Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
k-means(k-平均法)
(+Javadocの説明)
WSL 勉強会
2016/06/19(⽇)
友松祐太
2016/6/19 1
はじめに
• 本スライドは本・ネットの資料を参考に作成した資料です。資
料内に誤りがあるかもしれません。。(指摘をお願いします。)
2016/6/19 2
もくじ
• Introduction(クラスタリングについて)
• k-means
• k-meansの初期値問題(初期値選択アルゴリズム)
• KKZアルゴリズム
• k-means++アルゴリズム
• k-meansのさらなる問題点
• お...
Introduction
(クラスタリングについて)
2016/6/19 4
クラスタリングとは
• クラスタリングとは?
データの集合を”似たもの同⼠”でグループ化する作業。
教師なしなので、あらかじめどんなグループが出来上がるかわからない
• クラスタとは?
クラスタリングの結果できあがったグループ。
• クラスタリ...
ハード or ソフト
• ハードクラスタリング
各ベクトルが1つのクラスタに
所属
• ソフトクラスタリング
各ベクトルが全てのクラスタに
ある割合で所属
2016/6/19 6
クラスタA クラスタB
クラスタA クラスタB
クラスタA クラ...
階層型クラスタリング
• 最も近いクラスタを1つずつ併合していきクラスタリングを⾏
う⼿法。
• クラスタ数が1つになったときの樹形図(dendrogram)を任意の
⾼さで切ることによって,欲しいクラスタ数を得ることができる。
2016/6/...
階層型クラスタリング
2016/6/19 8
階層型クラスタリング
2016/6/19 9
階層型クラスタリング
2016/6/19 10
階層型クラスタリング
2016/6/19 11
階層型クラスタリング
2016/6/19 12
クラスタリング⼿法とその分類
2016/6/19 13
階層型クラスタリング ⾮階層型クラスタリング
ソ
フ
ト
ク
ラ
ス
タ
リ
ン
グ
ハ
ド
ク
ラ
ス
タ
リ
ン
グ
・k-means
・x-means
・スペクトラルクラスタリング
...
クラスタリング⼿法とその分類
2016/6/19 14
階層型クラスタリング ⾮階層型クラスタリング
ソ
フ
ト
ク
ラ
ス
タ
リ
ン
グ
ハ
ド
ク
ラ
ス
タ
リ
ン
グ
・k-means<-今⽇はこれを扱う
・x-means
・スペクト...
k-means
2016/6/19 15
k-meansとは
• まずデータを適当に分割し、後からうまく分割するように調整
していくことによってクラスタリングを⾏う⽅法。k-meansの
kとはクラスタをいくつにわけるかという数で、ユーザが事前
に決定する。
2016/6/19 16
k-meansアルゴリズム
Step0 ・各ベクトルの所属クラスタを乱数で選ぶ。
Step1 ・各クラスタに所属するベクトルの重⼼をとり、ク
ラスタの代表ベクトルとする。
Step2 ・各ベクトルから⼀番近いクラスタの代表ベクトル
を新たな所属...
k-means(例)その1
2016/6/19 18
Step0:各ベクトルの所
属クラスタを乱数で選
ぶ。
Step1:各クラスタに所
属するベクトルの重⼼
をとり、クラスタの代
表ベクトルとする。
k-means(例)その2
2016/6/19 19
Step2:各ベクトルから⼀
番近いクラスタの代表ベ
クトルを新たな所属クラ
スタとする。
Step3: 所属クラスタ
が更新されているので
step1へ
Step1:各クラスタに所
属する...
k-means(例)その3
2016/6/19 20
Step2:各ベクトルから
⼀番近いクラスタの代
表ベクトルを新たな所
属クラスタとする。
Step3: クラスタの割
当に変更がない→終了
k-meansの初期値問題
2016/6/19 21
k-meansの初期値問題
このようなベクトル群を2つのクラスタに分けたい・・・
2016/6/19 22
k-meansの初期値問題
理想的にはこのように分かれて欲しい・・・
2016/6/19 23
k-meansの初期値問題
初期の割当てによってはこのように
分かれてしまうことも・・・2016/6/19 24
KKZ法
• このような初期値ランダム問題に対処するために考案された1
つ⽬の⼿法。
• 後で紹介するk-means++法の先⾏研究。
2016/6/19 25
KKZ法 アルゴリズム
Step0 ・ランダムに1つベクトルを選び代表ベクトルとする
Step1 ・代表ベクトルの数がk個になったら終了
Step2 ・それぞれのベクトル𝑥に関して、最も近い代表ベクト
ルの距離を求める。
Step3 ・Step...
KKZアルゴリズム
•4つのベクトルから
k=3(個)の初期代表ベ
クトルを選択するとす
る(実際はほぼありえな
い状況…)
2016/6/19 27
KKZアルゴリズム
•[Step0]
ランダムに1つベクトル
を選び代表ベクトルと
する
2016/6/19 28
KKZアルゴリズム
•[Step1]
代表ベクトルの数が1個
≠k個なのでアルゴリズ
ムを続ける
2016/6/19 29
KKZアルゴリズム
•[Step2]
それぞれのベクトル𝑥に
関して、最も近い代表
ベクトルの距離を求め
る。
2016/6/19 30
KKZアルゴリズム
•[Step3]
Step2で求めた距離が最
⼤になるベクトルを新
たな代表ベクトルとし
て選択
2016/6/19 31
KKZアルゴリズム
•[Step1]
代表ベクトルの数が2個
≠k個なのでアルゴリズ
ムを続ける
2016/6/19 32
KKZアルゴリズム
•[Step2]
それぞれのベクトル𝑥に
関して、最も近い代表
ベクトルの距離を求め
る。
2016/6/19 33
KKZアルゴリズム
•[Step3]
Step2で求めた距離が最
⼤になるベクトルを新
たな代表ベクトルとし
て選択
2016/6/19 34
KKZアルゴリズム
•[Step1]
代表ベクトルの数が3個
=k個なのでアルゴリズ
ムを⽌める⇒終了
2016/6/19 35
KKZの問題点
• KKZによって、最初に選んだ代表ベクトルをもとに各代表ベク
トルの距離が最⼤になるように初期値を選択できた。
• 外れ値が存在する場合にうまくいかないことがある。。。
⇒k-means++法の登場
2016/6/19 36
k-means++法
• k-means++:KKZでは距離が最⼤になるものを選んでいたが、
距離が⼤きい物が確率的に選ばれやすいように
して、ランダムに次の点を決める⽅法
• 次の代表ベクトルは確率的にランダムに選ぶので、外れ値にも
対応でき...
k-means++法 アルゴリズム
Step0 ・ランダムに1つベクトルを選び代表ベクトルとする
Step1 ・代表ベクトルの数がk個になったら終了
Step2 ・それぞれのベクトル𝑥に関して、そのベクトルに⼀番
近い代表ベクトルとの距離𝐷(𝑋...
さらなるk-meansの問題点
2016/6/19 39
さらなるk-meansの問題点
• 右のような事例ではk-means
ではうまくいかないようです。
• また、k-meansは予めkを⾃
分で決める必要があるという
こと
2016/6/19 40
⽯井 健⼀郎, 上⽥ 修功, 前⽥ 英作, 村...
x-means
• k-meansではあらかじめ分割するクラスタ数kを与える必要が
あった。
→x-meansではK=2で再帰的にK-means法を実⾏していく。ク
ラスタの分割前と分割後でBIC(ベイズ情報量規準)を⽐較し、
値が改善しなくな...
おまけ
Javadocのすゝめ
2016/6/19 42
Javadocを書こう
Javadoc:プログラムについての説明をソースコードに記述する仕
組み
/**
* ここにJavadocを書く
* @アノテーション 〜〜〜〜
*/
2016/6/19 43
/*
コメントとは違
う書き⽅
*/
Javadocを書こう
• Javadoc何がいい?
ソースコード内にソースコードの説明が記述できる
(これだけじゃないですが・・・)
•コメントと何が違うの?
HTML形式のドキュメンテーションファイルを出⼒できる。
他にも… コンパイル時の...
Javadocを書こう
2016/6/19 45
Javadocを書こう(アノテーション)
2016/6/19 46
• この他にもいろいろあります
アノテーション 効果
@author コーディングした⼈の名前を⽰す
@version プログラムのバージョンを記述する
@param メソッド...
Javadocを書こう
2016/6/19 47
このようなjavaファ
イルからHTML形式
のドキュメントファ
イルを作成する。
Javadocを書こう
• EclipseからHTML形式のJavadocを⽣成
• Project->Generate Javadoc…->private,publicを選択->Finish
2016/6/19 48
Javadocを書こう
2016/6/19 49
できた!!
ご清聴ありがとうございました!
2016/6/19 50
参考資料
• 【改訂版】Eclipseではじめるプログラミング(22):いまさら聞け
ない「Javadoc」と「アノテーション」⼊⾨
• k-means法の様々な初期値設定によるクラスタリング結果の実験的
⽐較(JSAI2011)
• クラスタ...
参考資料
• k-means++法 ‒ Wikipedia
• k-means++|ぽんのブログ - アメーバブログ
• クラスタリング (クラスター分析)
• scikit-learn による最も基本的なクラスタリング分析 ‒ Qiita
•...
Upcoming SlideShare
Loading in …5
×

k-means(k-平均法)

7,268 views

Published on

WSLの勉強会の資料。
クラスタリングの軽い説明からk-meansの説明、k-meansの初期値選択アルゴリズムに関しての資料。
最後におまけ的にJavadocの説明をのせる。

Published in: Data & Analytics
  • Sex in your area is here: ♥♥♥ http://bit.ly/2F4cEJi ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ❤❤❤ http://bit.ly/2F4cEJi ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

k-means(k-平均法)

  1. 1. k-means(k-平均法) (+Javadocの説明) WSL 勉強会 2016/06/19(⽇) 友松祐太 2016/6/19 1
  2. 2. はじめに • 本スライドは本・ネットの資料を参考に作成した資料です。資 料内に誤りがあるかもしれません。。(指摘をお願いします。) 2016/6/19 2
  3. 3. もくじ • Introduction(クラスタリングについて) • k-means • k-meansの初期値問題(初期値選択アルゴリズム) • KKZアルゴリズム • k-means++アルゴリズム • k-meansのさらなる問題点 • おまけ(Javadocのすゝめ) 2016/6/19 3
  4. 4. Introduction (クラスタリングについて) 2016/6/19 4
  5. 5. クラスタリングとは • クラスタリングとは? データの集合を”似たもの同⼠”でグループ化する作業。 教師なしなので、あらかじめどんなグループが出来上がるかわからない • クラスタとは? クラスタリングの結果できあがったグループ。 • クラスタリングの種類は以下の2つの観点で種類分けできる ハードクラスタリングorソフトクラスタリング 階層型クラスタリングor⾮階層型クラスタリング 2016/6/19 5
  6. 6. ハード or ソフト • ハードクラスタリング 各ベクトルが1つのクラスタに 所属 • ソフトクラスタリング 各ベクトルが全てのクラスタに ある割合で所属 2016/6/19 6 クラスタA クラスタB クラスタA クラスタB クラスタA クラスタB クラスタA:70% クラスタB:30% クラスタA:20% クラスタB:80%
  7. 7. 階層型クラスタリング • 最も近いクラスタを1つずつ併合していきクラスタリングを⾏ う⼿法。 • クラスタ数が1つになったときの樹形図(dendrogram)を任意の ⾼さで切ることによって,欲しいクラスタ数を得ることができる。 2016/6/19 7
  8. 8. 階層型クラスタリング 2016/6/19 8
  9. 9. 階層型クラスタリング 2016/6/19 9
  10. 10. 階層型クラスタリング 2016/6/19 10
  11. 11. 階層型クラスタリング 2016/6/19 11
  12. 12. 階層型クラスタリング 2016/6/19 12
  13. 13. クラスタリング⼿法とその分類 2016/6/19 13 階層型クラスタリング ⾮階層型クラスタリング ソ フ ト ク ラ ス タ リ ン グ ハ ド ク ラ ス タ リ ン グ ・k-means ・x-means ・スペクトラルクラスタリング ・単連結法 ・完全連結法 ・群平均法 ・ウォード法 ・重⼼法 ・メディアン法 ・Fuzzy c-means ・混合分布モデル ・pLSI ・NMF
  14. 14. クラスタリング⼿法とその分類 2016/6/19 14 階層型クラスタリング ⾮階層型クラスタリング ソ フ ト ク ラ ス タ リ ン グ ハ ド ク ラ ス タ リ ン グ ・k-means<-今⽇はこれを扱う ・x-means ・スペクトラルクラスタリング ・単連結法 ・完全連結法 ・群平均法 ・ウォード法 ・重⼼法 ・メディアン法 ・Fuzzy c-means ・混合分布モデル ・pLSI ・NMF
  15. 15. k-means 2016/6/19 15
  16. 16. k-meansとは • まずデータを適当に分割し、後からうまく分割するように調整 していくことによってクラスタリングを⾏う⽅法。k-meansの kとはクラスタをいくつにわけるかという数で、ユーザが事前 に決定する。 2016/6/19 16
  17. 17. k-meansアルゴリズム Step0 ・各ベクトルの所属クラスタを乱数で選ぶ。 Step1 ・各クラスタに所属するベクトルの重⼼をとり、ク ラスタの代表ベクトルとする。 Step2 ・各ベクトルから⼀番近いクラスタの代表ベクトル を新たな所属クラスタとする。 Step3 ・所属クラスタが更新されていればStep1へ、更新さ れていなければ終了 Finish 2016/6/19 17
  18. 18. k-means(例)その1 2016/6/19 18 Step0:各ベクトルの所 属クラスタを乱数で選 ぶ。 Step1:各クラスタに所 属するベクトルの重⼼ をとり、クラスタの代 表ベクトルとする。
  19. 19. k-means(例)その2 2016/6/19 19 Step2:各ベクトルから⼀ 番近いクラスタの代表ベ クトルを新たな所属クラ スタとする。 Step3: 所属クラスタ が更新されているので step1へ Step1:各クラスタに所 属するベクトルの重⼼ をとり、クラスタの代 表ベクトルとする。
  20. 20. k-means(例)その3 2016/6/19 20 Step2:各ベクトルから ⼀番近いクラスタの代 表ベクトルを新たな所 属クラスタとする。 Step3: クラスタの割 当に変更がない→終了
  21. 21. k-meansの初期値問題 2016/6/19 21
  22. 22. k-meansの初期値問題 このようなベクトル群を2つのクラスタに分けたい・・・ 2016/6/19 22
  23. 23. k-meansの初期値問題 理想的にはこのように分かれて欲しい・・・ 2016/6/19 23
  24. 24. k-meansの初期値問題 初期の割当てによってはこのように 分かれてしまうことも・・・2016/6/19 24
  25. 25. KKZ法 • このような初期値ランダム問題に対処するために考案された1 つ⽬の⼿法。 • 後で紹介するk-means++法の先⾏研究。 2016/6/19 25
  26. 26. KKZ法 アルゴリズム Step0 ・ランダムに1つベクトルを選び代表ベクトルとする Step1 ・代表ベクトルの数がk個になったら終了 Step2 ・それぞれのベクトル𝑥に関して、最も近い代表ベクト ルの距離を求める。 Step3 ・Step2で求めた距離が最⼤になるベクトルを新たな代 表ベクトルとして選択 2016/6/19 26 Finish
  27. 27. KKZアルゴリズム •4つのベクトルから k=3(個)の初期代表ベ クトルを選択するとす る(実際はほぼありえな い状況…) 2016/6/19 27
  28. 28. KKZアルゴリズム •[Step0] ランダムに1つベクトル を選び代表ベクトルと する 2016/6/19 28
  29. 29. KKZアルゴリズム •[Step1] 代表ベクトルの数が1個 ≠k個なのでアルゴリズ ムを続ける 2016/6/19 29
  30. 30. KKZアルゴリズム •[Step2] それぞれのベクトル𝑥に 関して、最も近い代表 ベクトルの距離を求め る。 2016/6/19 30
  31. 31. KKZアルゴリズム •[Step3] Step2で求めた距離が最 ⼤になるベクトルを新 たな代表ベクトルとし て選択 2016/6/19 31
  32. 32. KKZアルゴリズム •[Step1] 代表ベクトルの数が2個 ≠k個なのでアルゴリズ ムを続ける 2016/6/19 32
  33. 33. KKZアルゴリズム •[Step2] それぞれのベクトル𝑥に 関して、最も近い代表 ベクトルの距離を求め る。 2016/6/19 33
  34. 34. KKZアルゴリズム •[Step3] Step2で求めた距離が最 ⼤になるベクトルを新 たな代表ベクトルとし て選択 2016/6/19 34
  35. 35. KKZアルゴリズム •[Step1] 代表ベクトルの数が3個 =k個なのでアルゴリズ ムを⽌める⇒終了 2016/6/19 35
  36. 36. KKZの問題点 • KKZによって、最初に選んだ代表ベクトルをもとに各代表ベク トルの距離が最⼤になるように初期値を選択できた。 • 外れ値が存在する場合にうまくいかないことがある。。。 ⇒k-means++法の登場 2016/6/19 36
  37. 37. k-means++法 • k-means++:KKZでは距離が最⼤になるものを選んでいたが、 距離が⼤きい物が確率的に選ばれやすいように して、ランダムに次の点を決める⽅法 • 次の代表ベクトルは確率的にランダムに選ぶので、外れ値にも 対応できる k-means++を使うと・・・ • ほとんどのデータセットで誤差が減り、あるデータセットでは 誤差が1/1000にも減った • 収束までの速さが2倍に 2016/6/19 37
  38. 38. k-means++法 アルゴリズム Step0 ・ランダムに1つベクトルを選び代表ベクトルとする Step1 ・代表ベクトルの数がk個になったら終了 Step2 ・それぞれのベクトル𝑥に関して、そのベクトルに⼀番 近い代表ベクトルとの距離𝐷(𝑋)を求める。 Step3 ・各ベクトルxに関して重み付き確率分布𝜙 𝑥' = ) *+ ∑-) *- を⽤いて新たな代表ベクトルをランダムに選ぶ 2016/6/19 38 Finish
  39. 39. さらなるk-meansの問題点 2016/6/19 39
  40. 40. さらなるk-meansの問題点 • 右のような事例ではk-means ではうまくいかないようです。 • また、k-meansは予めkを⾃ 分で決める必要があるという こと 2016/6/19 40 ⽯井 健⼀郎, 上⽥ 修功, 前⽥ 英作, 村瀬 洋: わかりやすい パターン認識, オーム社 (1998)
  41. 41. x-means • k-meansではあらかじめ分割するクラスタ数kを与える必要が あった。 →x-meansではK=2で再帰的にK-means法を実⾏していく。ク ラスタの分割前と分割後でBIC(ベイズ情報量規準)を⽐較し、 値が改善しなくなるまで分割を続ける まだ勉強中なので、今回は説明しません 2016/6/19 41
  42. 42. おまけ Javadocのすゝめ 2016/6/19 42
  43. 43. Javadocを書こう Javadoc:プログラムについての説明をソースコードに記述する仕 組み /** * ここにJavadocを書く * @アノテーション 〜〜〜〜 */ 2016/6/19 43 /* コメントとは違 う書き⽅ */
  44. 44. Javadocを書こう • Javadoc何がいい? ソースコード内にソースコードの説明が記述できる (これだけじゃないですが・・・) •コメントと何が違うの? HTML形式のドキュメンテーションファイルを出⼒できる。 他にも… コンパイル時の警告の抑制,⾮推奨メソッドの警告表 ⽰,スレッドセーフかどうかなど様々なことを記述で きる。 2016/6/19 44
  45. 45. Javadocを書こう 2016/6/19 45
  46. 46. Javadocを書こう(アノテーション) 2016/6/19 46 • この他にもいろいろあります アノテーション 効果 @author コーディングした⼈の名前を⽰す @version プログラムのバージョンを記述する @param メソッドの引数についての説明 @return メソッドの返り値の説明 @throws メソッドが吐くエラーについての説明 (どんなときにどんなエラーが吐かれるか)
  47. 47. Javadocを書こう 2016/6/19 47 このようなjavaファ イルからHTML形式 のドキュメントファ イルを作成する。
  48. 48. Javadocを書こう • EclipseからHTML形式のJavadocを⽣成 • Project->Generate Javadoc…->private,publicを選択->Finish 2016/6/19 48
  49. 49. Javadocを書こう 2016/6/19 49 できた!!
  50. 50. ご清聴ありがとうございました! 2016/6/19 50
  51. 51. 参考資料 • 【改訂版】Eclipseではじめるプログラミング(22):いまさら聞け ない「Javadoc」と「アノテーション」⼊⾨ • k-means法の様々な初期値設定によるクラスタリング結果の実験的 ⽐較(JSAI2011) • クラスタリングの定番アルゴリズム「K-means法」をビジュアライ ズしてみた • 適切なクラスタ数を推定するX-means法 - kaisehのブログ 2016/6/19 51
  52. 52. 参考資料 • k-means++法 ‒ Wikipedia • k-means++|ぽんのブログ - アメーバブログ • クラスタリング (クラスター分析) • scikit-learn による最も基本的なクラスタリング分析 ‒ Qiita • ⾔語処理のための機械学習⼊⾨ (⾃然⾔語処理シリーズ) 2016/6/19 52

×