Rで学ぶデータサイエンス
   5パターン認識
  第2章 K-平均法
      2011/05/28
  TwitterID:sleipnir002
前回までのあらすじ
• 前回は第1回として判別器の性能を評価する方法を学
  んだよ。
• 訓練誤差から予測誤差を推定するためにK交差検証
  法という方法が使えるよ!
• 偽陽性率を抑えながら陽性率を上げるために、ROC曲
  線が使えるよ!
   データセット
            学習用

            F1 ( x)

            推定用       TPR

                            FPR
第2章の目的
          K-平均法のアルゴリズム
           Kの数を推定する方法

• キーワード
 – K-平均法
 – カーネル主成分分析
 – Gap統計量
K-平均法って?
クラスタリングのアルゴリズム
クラスタリングのアルゴリズム




@hamadakoichiさんの資料より
[データマイニング+WEB勉強会][R勉強会] R言語によるクラスター分析 - 活用編
http://www.slideshare.net/hamadakoichi/r-3754836
K-平均法:クラスタの数をKと指定して
     クラスタする方法。
K-平均法のアルゴリズム
入力値:データX={x1, x2, … , xn} クラスタ数k

1.初期化:データからランダムにK個選び、これをクラス
 タの重心とする。
2.クラスタの決定:あるデータに対し、クラスタの重心の
 中で最も近いクラスタがデータの属するクラスタとなる。
 これを全てのデータに対して計算する。
3.クラスタの中心の再計算:2で計算したクラスタ毎に
 重心を再度計算。以下、収束するまで2と3を繰り返
 す。

出力値:データごとのクラスタ C={1, k, 2, … , 2}、クラスタ中心
K-平均法のアルゴリズム
• 言葉で言ってもわかんないので、可視化した
  ものをみてみましょう。

   入力:                         アルゴリズム:                        出力:
多次元データX(nxp)                    *K平均法                     データの属するクラスタ


                                 評価関数、
                                  n
                             L   min || xi  cl ||
                                        l 1,, k
                                 i 1


                              を最小化している
   クラスタ数k                       のと同じ。                      クラスタ中心
    k=3                                                   C  {c1 ,ck }

*アルゴリズムの詳細は下記リンクをチェック!
http://d.hatena.ne.jp/nitoyon/20090409/kmeans_visualise
Kmeansの使い方
   kmeans(x, centers, iter.max = 10, nstart = 1, algorithm =
    c("Hartigan-Wong", "Lloyd", "Forgy", "MacQueen"))

引数                              戻り値(kmeansクラス)
X:データセット                        $cluster:各データが属するクラ
centers:                           スタのベクトル
    →スカラ値:クラスタ数k                $centers:クラスタの重心ベクト
    →初期化ベクトルの集合                    ルを含む行列
iter.max:計算回数上限                 $withinss:クラスタ内の平方距
                                   離
nstart:初期値の繰り返し
                                $size:各クラスタのサイズを含ん
algorithm:アルゴリズムの指                 だベクトル。
    定
ここで疑問
Kの数はどうやって選ぶの?
最大の問題点

 Kの数はどうやって選ぶの?




カーネル主成分分析   ギャップ統計量
最大の問題点

 Kの数はどうやって選ぶの?




カーネル主成分分析   ギャップ統計量
カーネル主成分分析
  (カーネル)主成分分析は次元削減のアルゴリズムです。

• 主成分:(カーネル)主成分分析の出力結果、元の変数の
  線形結合で表される新しい変数
• 主成分の上位だけで基のデータをよく説明できるはず!
                     この部分を直接プ
                     ロットすればいい?                バラツキをよく
                                              説明する順番
                                              に並んでいる。
       元のデータ                    主成分

        x1            y1  c11 x1    c1 p x p
                        
        x2            y2  c21 x1    c2 p x p
バラツキ                                                 バラツキ
            主成分分析   
        xp            y p  c p1 x1    c pp x p
Rでカーネル主成分分析を行う
>library(kernlab)               Package kernlab
>x<-as.matrix(iris[,1:4])       Irisデータ
>gamma<-median(dist(x))         150x4 ,3class
>sigma<-1/(2*gamma^2)           ガウスカーネルのパラ
>kp<-kpca(x, kernel=“rbfdot”,   メータσを作成
   kpar=list(sigma=sigma))      ガウスカーネルで
>plot(iris[, 1:4])              カーネル主成分分析
>plot(data.frame(pcv(kp))       元のデータで散布図
  [,1:4])
                                主成分で散布図
カーネル主成分分析の結果

元のデータ                                                主成分



                  クラスタ数
                  が3つである
                  ことが示唆
                   される。




        元のデータ                    主成分

         x1           y1  c11 x1    c1 p x p
                        
         x2           y2  c21 x1    c2 p x p
 バラツキ                                                バラツキ
             主成分分析   
         xp           y p  c p1 x1    c pp x p
最大の問題点

 Kの数はどうやって選ぶの?




カーネル主成分分析   ギャップ統計量
できれば機械的に見積もりたい
最適なクラスタ数を推定する
 統計量を導入しよう!
評価関数Lは?
     n
L   min || xi  cl ||
           l 1,, k
    i 1
4クラスタデータに対する各クラスタ数K毎の
    K-平均法後の評価関数の値




  評
  価
  関   評価関数Lは?
  数
  L




          クラスタ数K
クラスタ数K=データ数nの
時に評価関数は最小になる。
そこで、クラスタ数Kが増加しても
評価関数Lが下がらないようにしよう
ギャップ統計量
         L'k
Gk  log      log L'k  log Lk
         Lk
ギャップ統計量のアイデア①
   クラスタを正しく分割すると評価関数Lは大きく下がる。
  クラスタを分割しすぎても評価関数Lは大きく下がらない。

正しいクラスタ数K’ = 3の場合、




   K = 2 < 3 = k’    K = 3 = 3 = k’        K = 4 > 3 = k’
         本来異なるクラスタを同一のクラ              同一のクラスタのデータを
         スタから別のクラスタとして分け              さらに分割しても評価関数
         ると、評価関数は大きく下がる!              は大きく下がらない。
ギャップ統計量のアイデア②
クラスタ数が1、クラスタ構造を持たないデータの
評価関数Lの減尐と比較することで、正規化する。




                             比較




       元のデータ                      同一範囲内の一様乱数

        n                                n
  Lk   min || xi  cl ||        L'k   min || xi  cl ||
              l 1,, k                        l 1,, k
       i 1                             i 1
ギャップ統計量
                            ランダムなデータと比較した評価関数L

                                                               Gkが最大値になるK
                        ギャップ統計量Gk                              =データのクラスタ数


                         L'k
     Gk  log                 log L'k  log Lk            ギ
                         Lk                                ャ
                                                           ッ
                                                           プ
                                                           統
                                  同一範囲内の                   計
    元のデータ
                                   一様乱数                    量
      n                               n
Lk   min || xi  cl ||       L'k   min || xi  cl ||
            l 1,, k                       l 1,, k
     i 1                            i 1


                                                               クラスタ数K
Rでギャップ統計量を使ってデータの
     クラスタ数を推定する
> library(SLmisc)                  Package SLmisc
> x <- iris[,1:4]
> gap <- c()                       やっぱりIrisデータ
> for (i in 1:20){                 150x4 ,3class
+ kg <- kmeansGap(x)
                                   ギャップ統計
+ nc <- length(kg$cluster$size)    量を求める。           20回
+ gap <- c(gap,nc)
                                   推定されたク           くりか
+}
                                                    えし
> par(ps=16)                       ラスタ数を取
> plot(table(gap),xlab="k : num.   得する。
    of clusters",ylab="freq.")
                                   推定されたクラス
                                   タ数のヒストグラ
                                   ムを作成
Rでギャップ統計量を使って
 クラスタ数を求めた結果




 頻
 度




     ギャップ統計量によって求められたクラスタ数K
本日のまとめ
• K-平均法は、事前にクラスタ数を決めて分類
  するクラスタリングアルゴリズムである。
• K-平均法は、クラスタの数の決定に恣意性が
  あり、クラスタ数の決定が問題となる。
 クラスタ数の推定方法 カーネル主成分分析   ギャップ統計量


 方法の概要     次元削減して可視化    ギャップ統計量の最
           して、クラスタ数を見   大値をクラスタ数とす
           積もる。         る。

 特徴        属人的          機械的

パターン認識02 k平均法ver2.0