知的情報処理
12. 仲間を集めるクラス
タリング(
2)
櫻井彰人
慶應義塾大学理工学部
k-means クラスタリング: 定式化
•
入力
: n 個の点からなる集合 V, パラメータ k
•
出力: k 個の点 (クラスタの中心) からなる集合 X で、
すべての可能な
X のなかで、二乗歪(squared error
distortion) d(V,X) が最小のもの
二乗歪
点
v と点集合 X が与えられたとき, v から X への距離
d(v, X)
は、
v から X の最近接点へのユークリッド距離であるとする.
n 個の点からなる集合 V={v
1…v
n} と点集合 X が与えられたとき,
二乗歪
Squared Error Distortion は次のように定義される
d(V,X) =
∑
d(v
i
, X)
2
/ n
1 < i < n
1-Means クラスタリング: やさしい場合
•
Input:
n 個の点からなる集合 V
•
Output:
ある一個
の点
x (クラスタ中心) で、 x のすべての可能な選び
方のなかで、二乗歪
d(V,x) が最小となるもの
1-Means クラスタリングはやさしい問題.
しかし, 中心(クラスタ数)が2個以上となると、とたんに難しい問題 (NP-完全) となる.
効率のよい発見的方法の一つに
Lloyd アルゴリズムがある
K-Means クラスタリング: Lloyd アルゴリ
ズム
1.
Lloyd アルゴリズム
2.
任意に
k
個のクラスタ中心を選ぶ
3.
while クラスタ中心が変更された
4.
各データ点をクラスタ
C
i
に割り当てる
割り当てるクラスタは、最も近いクラスタ中心のクラスタ
(1 ≤
i
≤
k
)
5.
すべての点への割り当てが終わったら
,
各クラスタの重心を新たなクラスタ中心とする
すなわち、新たなクラスタ中心は、クラスタ
C それぞれに
∑
v
/ |
C
|
全
v ∈C
*このアルゴリズムは局所解に陥ることがある
.
0
1
2
3
4
5
0
1
2
3
4
5
座標軸
1
座標軸
2
x
1
x
2
x3
0
1
2
3
4
5
0
1
2
3
4
5
座標軸
1
座標軸
2
x1
x2
x
3
0
1
2
3
4
5
0
1
2
3
4
5
座標軸
1
座標軸
2
x1
x2
x3
0
1
2
3
4
5
0
1
2
3
4
5
座標軸
1
座標軸
2
x1
x2
x
3
クラスタリング
demo
http://home.dei.polimi.it/matteucc/Clustering/tutorial_html/AppletKM.html
http://www.cs.washington.edu/research/imagedatabase/demo/kmcluster/
http://tech.nitoyon.com/ja/blog/2009/04/09/kmeans-visualise/
統計的な枠組み
40 45 50 55 74 76 78 80 8 2 8 45または6個のクラスタがありそう(?)
クラスタを正規分布でモデル化しよう
-10 -5 0 5 10 0. 0 0.05 0.1 0 0 .1 5 | | | ||||||||||||||||||||||||||||||||||||| |||||||||||||||||| || || |||||||||| |||||||| |||| ||| | | | | | |||||||||| ||||||||||| ||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||ガウス混合分布
:
前提をおく
:
• 観測値はある混合分布からのサンプルである
p(x) =
g
p
g
(x)
• 各クラスタは混合分布を構成する個々の分布に対応する
= [0 0] = [0 0] = [0 0]
= I
= 0.6I
= 2I
ガウス混合分布
-10 -5 0 5 10 0 .0 0 .0 5 0 .1 0 0 .1 5 | | | ||||||||||||||||||||||||||||||||||||| |||||||||||||||||| || || |||||||||| |||||||| |||| ||| | | | | | |||||||||| ||||||||||| ||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||フィッティング
:
g
と
p
g
(x) のパラメータ(平均、分散等)を推定する
尤度最大化
ガウス混合分布(ガウス分布の重み付き線形和)をフィッティン
グする
各xはいずれかの分布(クラスタ)に属すると考える
対数尤度を最大化する
g
、
p
g() を求める。
n i G g g g i n i G g i g g n G Gx
p
x
p
x
x
p
p
L
1 1 1 1 1 1 1log
log
,
,
|
,
,
,
,
,
log
尤度最大化の困難点
変更: 対数尤度を最大化する
g
、
p (
g
) を求める。
困難点(等式制約もあるが):
n i G g g i g n i G g g i g n G Gx
p
x
p
x
x
L
1 1 1 1 1 1 1;
log
;
log
,
,
|
,
,
,
,
,
log
n i g i g ix
p
x
p
L
1 1 1 1 1;
;
|,
,
log
x
θ
π
考え方を変える
各
x
i
は
z
i
番目の分布から得られたと考える。
そうすると、
n i z i z n i z i zip
x
i ip
x
iL
1 1;
log
;
log
|,
,
log
π
θ
x
1 : 1 1 1 1 : 1 1 1 1;
;
1
;
;
|,
,
log
i i i i iz i i z i z i z ix
p
x
p
x
p
x
p
L
x
θ
π
n i G g g i gp
x
1 1;
log
どのクラスタに属するか?
しかし、「各
x
i
は
z
i
番目の分布から得られた」とする
z
i
は知りようがない。
ここで、
z
i
を適当に仮定する(そして、各分布のパラメータ
を最尤推定し、それから
z
i
を推定することを繰り返す)の
が
k-means法。
EMアルゴリズムが考えられた
各点
x
iが各分布
p
gに属する確率(
z
i=g となる確率)を求める
gp
g(x
i)/
正規化定数 を計算する
これらの確率をもとに、周辺尤度を最大化するパラメータを求める
g, p
gのパラメータを最尤推定する
という反復計算。一般には、局所最適解に収束。
EM-アルゴリズムの実行イメージ
K-Means クラスタリングとの比較
EMアルゴリズムの長所と短所
長所
統計的基盤、理論的に健全
信頼性等が計算可能。検定もできる
短所
計算が大変
世の中のものに、「分布」を予め仮定するのが妥当か
現実問題への適用に際し、その妥当性に疑問がある場合が多い
再: クラスタリング方法の分類
階層的クラスタリング:
ある基準に従って、階層的に対象(データ)の集合を分割していく
非階層的クラスタリング
モデル法: 各クラスタに(統計的)モデルを仮定し、データに最もあう
ように、パラメータを決定する
分割的クラスタリング: いくつかの分割を作成し、ある基準に従い評
価する
濃度に基づく: 濃度・密度・結合度に基づく
グリッド法: 多層の粒度構造に基づく
例:文書分類はできるか?
実は、できない!
クラスタリングするには、各文書をなんらかの数値
ベクトルで表現しないといけない。
どうやる?
文書クラスタリング
普通は次のように行う
文書を単語に分ける。
例: 明日は晴れでしょう。 → 明日+は+晴れ+で+しょう+。
どこにでもある単語(
at, is, a,… )ははずす
なぜでしょうか?
余りにも特殊な単語ははずす
なぜでしょうか?
文書ごとに文書の特徴ベクトルを作る。各単語に番号を
振り、その番号を場所とするベクトルである。各要素は、
当該文書中に出現する当該単語の回数(または、0/1)
文書を点、この特徴ベクトルをその点の座標と考えて、ク
ラスタリングを行う
文書クラスタリング: 困ること
ベクトルの次元が極めて高くなる
短い文書(実験を行う
newsgroup への投稿記事でも)か
つ少ない文書数でもすぐ数千、数万になる。
すなわち、数千次元、数万次元。
人間が図で見れるのは多くて3次元
実は、「高次元」というのはいろいろな問題を引き起こす
要因である。
計算に時間がかかる
(いくらメモリが
1Gとか2Gとかいっても)メモリ不足
実は、ベクトルの距離の定義が難しくなる。ユークリッド距離は適
さなくなってしまう
検索エンジンへの適用例
企業内での活用例はあるようである。
検索エンジンとしては、様々な要素がからむため、
成功していないのが実情である
Vivisimo (2006)
Vivisimo (2006)
Vivisimo (2007)
http://vivisimo.com/
Clusty (2007)
Mooter(2006)
http://www.mooter.com/
Mooter(2006)
Mooter(2006)
Mooter (2007)
http://www.mooter.co.jp/
Mooter (2007)
Grokker (2005)
Grokker (2005)
Grokker(2006)
http://www.grokker.com/
Grokker (2007)
Grokker (2007)
http://www.grokker.com/
Yippy (2012)
Vivisimo (2012)
Mooter (2010-2011)
Mooter (2012)
次元の呪い
: これは実問題の問題
Curse of dimentionality という
コンビニの売り上げデータを考えよう
一回の売り上げを一個のベクトルであらわす
Excel の表なら、横1行が一回の売り上げ。
ベクトルの各要素は、各商品に対応する
Excel の表なら、縦1行がある商品一個に対応
ある一年を考えるだけでも、数千・数万行が必要。
次元が数千・数万のベクトル
数年分を管理しようと思えば、数万・数十万行
次元が数万・数十万のベクトル
高次元の実データ例
MovieLens
全ユーザ
数量化3類
適用後
action adventure animation/children comedy crime documentary drama fantasy film-noir horror musical mystery romance SF thriller war western高次元の実データ例
MovieLens
女性、18歳
~24歳
数量化3類
適用後
action adventure animation comedy crime documentary drama film horror musical mystery romance SF thrillar westernクラスタ数の推定
適切なクラスタ数はどうやって推定するか?
cross validation (交叉検定)
評価基準は、各点の対応するクラスタ中心までの距離の和
情報量規準を用いる
AIC:赤池情報量基準
BIC:ベイズ情報量基準
Mclustではモデルの選択にBICを用いている。
http://www.statsoft.com/textbook/cluster-analysis/#vfoldR における clustering
パッケージとしては, stats (標準に含まれている),
e1071, cluster などに含まれる
ここでは、stats の kmeans (k-means)を試用する。
なお、EMアルゴリズムを用いたクラスタリングには、
Mclustパッケージのmclustがよくつかわれる
-0.5 0.0 0.5 1.0 1.5 -0 .5 0 .0 0 .5 1 .0 1 .5 x y> # k-means in stats package > #
> x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2), + matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2)) > colnames(x) <- c("x", "y")
> (cl <- kmeans(x, 2))
K-means clustering with 2 clusters of sizes 49, 51 Cluster means: x y 1 0.01249021 -0.0488819 2 0.99572877 0.8887047 Clustering vector: [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 [32] 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 [63] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 [94] 2 2 2 2 2 2 2
Within cluster sum of squares by cluster: [1] 8.926331 9.806389
Available components:
[1] "cluster" "centers" "withinss" "size" > plot(x, col = cl$cluster)
> points(cl$centers, col = 1:2, pch = 8, cex=2) >
> x <- rbind(matrix(rnorm(120, sd = 0.3), ncol = 3), + matrix(rnorm(120, mean = 0.5, sd = 0.3), ncol = 3)) > colnames(x) <- c("x", "y", "z")
> (cl <- kmeans(x, 2))
K-means clustering with 2 clusters of sizes 48, 32 Cluster means: x y z 1 0.1210649 0.01357391 0.06235026 2 0.5492681 0.44262103 0.64539340 Clustering vector: [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 [26] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 2 2 2 2 2 2 [51] 2 2 2 2 2 2 2 2 2 1 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 [76] 2 1 2 2 2
Within cluster sum of squares by cluster: [1] 8.754782 7.128787
Available components:
[1] "cluster" "centers" "withinss" "size" > plot(x, col = cl$cluster)
> points(cl$centers, col = 1:2, pch = 8, cex=2) >
> plot(x[,2:3], col = cl$cluster)
> points(cl$centers[,2:3], col = 1:2, pch = 8, cex=2) > -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 -0 .5 0. 0 0 .5 1. 0 x y -0.5 0.0 0.5 1.0 -0 .5 0. 0 0 .5 1. 0 y z > # data.frame にすると一覧の図になります > x <- data.frame(x)
> plot(x, col = cl$cluster) >
x
-0.5 0.0 0.5 1.0 -0 .4 0. 0 0.4 0 .8 -0 .5 0. 0 0.5 1 .0y
-0.4 0.0 0.4 0.8 -0.5 0.0 0.5 1.0 -0 .5 0. 0 0.5 1. 0z
> # iris では > x <- iris[,-5] > cl <- kmeans(x, 3) > plot(x, col = cl$cluster)
> points(cl$centers, col = 1:3, pch = 8, cex=2) > Sepal.Length 2.0 3.0 4.0 0.5 1.5 2.5 4 .55 .5 6. 57 .5 2. 0 3 .0 4. 0 Sepal.Width Petal.Length 1234 5 67 4.5 5.5 6.5 7.5 0. 5 1. 5 2. 5 1 2 3 4 5 6 7 Petal.Width