Introduction to fuzzy kmeans on mahout

13,551 views
13,486 views

Published on

Published in: Technology, Business
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
13,551
On SlideShare
0
From Embeds
0
Number of Embeds
7,404
Actions
Shares
0
Downloads
66
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Introduction to fuzzy kmeans on mahout

  1. 1. Introduction toFuzzy kmeans on Mahout (Fuzzy c-means) lawmn 12th Jun. 2011 #TokyoWebmining
  2. 2. 始めにこの知識は個人的なものであり会社とは関係ありません。
  3. 3. Agenda1. 自己紹介2. Clustering overview3. kmeans on Mahout4. Fuzzy kmeans on Mahout5. Mahout上でのFuzzy kmeans実行6. Reference
  4. 4. 自己紹介● 名前 ○ lawmn● 出身 ○ 新潟県● 使用言語 ○ Python, C#● 大学のときの専攻 ○ 素粒子物理学専攻、博士号取得(仕事とはなんの関係もあり ません)● 趣味 ○ 旅行 ■ 今のところ行ったことがあるところは20カ国 ■ 南米に行ってみたい
  5. 5. MahoutJP● MahoutJPのお手伝い
  6. 6. Clustering overviewデータの分類方法 ● Clustering ○ 教師データなしでデータを分類 ● Classification ○ 教師データありでデータを分類
  7. 7. Clustering overviewデータの分類方法 ● Clustering ○ 教師データなしでデータを分類 ● Classification ○ 教師データありでデータを分類
  8. 8. Clustering overview@hamadakoichiMahout Canopy Clustering - #TokyoWebmining 9http://www.slideshare.net/hamadakoichi/mahout-canopy-clustering-tokyowebmining-9
  9. 9. Clustering overview@hamadakoichiMahout Canopy Clustering - #TokyoWebmining 9http://www.slideshare.net/hamadakoichi/mahout-canopy-clustering-tokyowebmining-9
  10. 10. Clustering overview@hamadakoichiMahout Canopy Clustering - #TokyoWebmining 9http://www.slideshare.net/hamadakoichi/mahout-canopy-clustering-tokyowebmining-9
  11. 11. kmeans on Mahout以下の評価関数を最小化するクラスタリング(n個のデータ点をk個のクラスタに分割する) :データ点 :クラスタ中心 :ユークリッド距離
  12. 12. kmeans on Mahoutアルゴリズム1. 全データから初期中心を選ぶ2. クラスタ中心と各データとの距離を求め、距離が最も近い中心のクラスタにデータ を割り当てる3. クラスタ中心の変化が閾値以下だった場合は処理を終了する4. 各クラスタの中心を計算する5. 2の処理へ@hamadakoichiMahout Canopy Clustering - #TokyoWebmining 9http://www.slideshare.net/hamadakoichi/mahout-canopy-clustering-tokyowebmining-9
  13. 13. kmeans vs Fuzzy kmeans kmeans ● 一つのデータを一つのクラスタに割り当て ● 利点 ○ アルゴリズムが単純 ● 欠点 ○ データを無理にでも一つのクラスタに割り当てないといけない ○ はずれ値に影響を受けやすい(クラスタ中心が引っ張られる) ● 適用例 ○ 画像減色処理 ○ http://opencv.jp/opencv2-x-samples/k-means_clustering fuzzy kmeans ● 一つのデータを複数のクラスタに割り当て ● 割り当て方は各クラスタへの帰属度で指定 ● 利点 ○ 完全に分割できないデータで有効 ○ はずれ値に影響を受けにくい ● 欠点 ○ kmeansに比べてアルゴリズムが複雑 ● 適用例 ○ 遺伝子発現データのクラスタ解析(バイオインフォマティクス) ○ http://www.sbj.or.jp/wp-content/uploads/file/sbj/8407_tokusyu_03. pdf
  14. 14. Fuzzy kmeans on Mahout以下の評価関数を最小化するクラスタリング(n個のデータ点をk個のクラスタに分割する) :データ点 :クラスタ中心 :クラスタへの帰属度 :ユークリッド距離 :fuzziness(m > 1)
  15. 15. Fuzzy kmeans on Mahoutアルゴリズム1. 全データから初期中心を選ぶ2. 初期中心を固定して、クラスタへの帰属度を計算する3. 2で計算した帰属度を用いて, 各クラスタの中心を計算する4. 3で計算した中心を用いて,帰属度を計算する5. 3~4を繰り返し、クラスタ中心の変化が閾値以下であれば終了Fuzzy kmeanskmeans 最終的に上図のようになる
  16. 16. Fuzzy kmeans on Mahoutパッと見、評価関数を以下で定義してもfuzzy kmeansが実行できるように見える。しかし、この場合に帰属度の条件を満たし最小化しようとするとkmeansの評価関数と同じになってしまう。参考:http://www.cs.osakafu-u.ac.jp/hi/honda/mathematics.htmこのため、fuzziness: mを導入して、例えばm=2として実行する。
  17. 17. Mahout上でのFuzzy kmeans実行1. Data converter(tsvからsequenceFileを生成)をMahoutに追加 ○ @hamadakoichiさんに感謝 ○ http://d.hatena.ne.jp/hamadakoichi/20110112/p12. クラスタリング対象データ(tsv)をHDFS上にアップ3.  sequenceFile生成4.  初期中心生成 ○ Random ○ Canopy5. Fuzzy kmeans実行6.  クラスタリング結果確認 Mahout version mahout-distribution-0.5 27 May 2011 - Apache Mahout 0.5 released maven, Hadoop, Mahoutがインストール済み であることを前提とする
  18. 18. Mahout上でのFuzzy kmeans実行1. Data converter(tsvからsequenceFileを生成)をMahoutに追加 ○ @hamadakoichiさんに感謝 ○ http://d.hatena.ne.jp/hamadakoichi/20110112/p12. クラスタリング対象データ(tsv)をHDFS上にアップ3.  sequenceFile生成4.  初期中心生成 ○ Random ○ Canopy5. Fuzzy kmeans実行6.  クラスタリング結果確認 Mahout version mahout-distribution-0.5 27 May 2011 - Apache Mahout 0.5 released maven, Hadoop, Mahoutがインストール済み であることを前提とする
  19. 19. Mahout上でのFuzzy kmeans実行Data converter(tsvからsequenceFileを生成)をMahoutに追加http://d.hatena.ne.jp/hamadakoichi/20110112/p11. javaファイル配置 ● $MAHOUT_HOME/examples/src/main/java/org/apache/mah out/text ● 元々org.apache.mahout.clustering.toolsだったが、都合上org. apache.mahout.textに変更2. javaファイルのpackage記述を"org.apache.mahout.text"に変更3.  インストール ● $ cd $MAHOUT_HOME/examples/ ● $ mvn install
  20. 20. Mahout上でのFuzzy kmeans実行1. Data converter(tsvからsequenceFileを生成)をMahoutに追加 ○ @hamadakoichiさんに感謝 ○ http://d.hatena.ne.jp/hamadakoichi/20110112/p12. クラスタリング対象データ(tsv)をHDFS上にアップ3. sequenceFile生成4.  初期中心生成 ○ Random ○ Canopy5. Fuzzy kmeans実行6.  クラスタリング結果確認 Mahout version mahout-distribution-0.5 27 May 2011 - Apache Mahout 0.5 released maven, Hadoop, Mahoutがインストール済み であることを前提とする
  21. 21. Mahout上でのFuzzy kmeans実行クラスタリング対象データ(tsv)をHDFS上にアップ1. Rのデータセット「iris」からiris.tsvを作成2. 数値データのみになるようにSpeciesカラム削除 ○ Sepal.Length, Sepal.Width, Petal.Length, Petal.Width3. HDFS上にアップ ○ $HADOOP_HOME/bin/hadoop dfs -put iris.tsv testdata
  22. 22. Mahout上でのFuzzy kmeans実行1. Data converter(tsvからsequenceFileを生成)をMahoutに追加 ○ @hamadakoichiさんに感謝 ○ http://d.hatena.ne.jp/hamadakoichi/20110112/p12. クラスタリング対象データ(tsv)をHDFS上にアップ3. sequenceFile生成4. 初期中心生成 ○ Random ○ Canopy5. Fuzzy kmeans実行6.  クラスタリング結果確認 Mahout version mahout-distribution-0.5 27 May 2011 - Apache Mahout 0.5 released maven, Hadoop, Mahoutがインストール済み であることを前提とする
  23. 23. Mahout上でのFuzzy kmeans実行sequenceFile生成&初期中心生成1. sequenceFile生成 ○ $MAHOUT_HOME/bin/mahout org.apache.mahout.text. TextToVectorConverter -i testdata -o testdata_seq2. 初期中心生成 ○ Canopy使用 ○ Randomに選択したい場合はFuzzy kmeans実行時に-kでク ラスタ数を指定 ○ $MAHOUT_HOME/bin/mahout canopy -i testdata_seq -o clusters_fcm -dm org.apache.mahout.common.distance. EuclideanDistanceMeasure -xm mapreduce -t1 20 -t2 1 ○ 必要な数の中心を得るためにt1,t2を調整
  24. 24. Mahout上でのFuzzy kmeans実行1. Data converter(tsvからsequenceFileを生成)をMahoutに追加 ○ @hamadakoichiさんに感謝 ○ http://d.hatena.ne.jp/hamadakoichi/20110112/p12. クラスタリング対象データ(tsv)をHDFS上にアップ3.  sequenceFile生成4.  初期中心生成 ○ Random ○ Canopy5. Fuzzy kmeans実行6. クラスタリング結果確認 Mahout version mahout-distribution-0.5 27 May 2011 - Apache Mahout 0.5 released maven, Hadoop, Mahoutがインストール済み であることを前提とする
  25. 25. Mahout上でのFuzzy kmeans実行Fuzzy kmeans実行&クラスタリング結果確認1. Fuzzy kmeans実行 ○ $MAHOUT_HOME/bin/mahout fkmeans -i testdata_seq - c clusters_fcm/clusters-0 -x 10 -o output_fcm -m 2 -cl - dm org.apache.mahout.common.distance. EuclideanDistanceMeasure2. クラスタリング結果確認 ○ output_fcmにあるsequenceFileはバイナリであるため、テキ ストに変換 ○ $MAHOUT_HOME/bin/mahout clusterdump --seqFileDir output_fcm/clusters-1 --pointsDir output_fcm/clusteredPoints/ --output $HOME/clusteranalyze-0.txt
  26. 26. Mahout上でのFuzzy kmeans実行 クラスタリング結果 SC-0{n=46 c=[3.025, 3.668, 1.146] r=[0.426, 1.585, 0.673]} Weight: Point: 0.9971797368342612: 5.1 = [3.500, 1.400, 0.200] 0.9879369220797811: 4.9 = [3.000, 1.400, 0.200] 0.993180497187098: 4.7 = [3.200, 1.300, 0.200] ... SC-1{n=34 c=[3.083, 4.097, 1.365] r=[0.415, 1.884, 0.826]} Weight: Point: 0.9773007230993884: 7.0 = [3.200, 4.700, 1.400] 0.9661792609907912: 6.4 = [3.200, 4.500, 1.500] 0.9930659179177667: 6.9 = [3.100, 4.900, 1.500] ...
  27. 27. Fuzzy kmeans実行パラメータ $MAHOUT_HOME/bin/mahout fkmeans -i 入力データディレクトリ ● 文字列で指定 ● データ型:sequenceFile -c 初期中心データディレクトリ ● 文字列で指定 ● データ型:sequenceFile -o 出力データディレクトリ ● 文字列で指定 ● すでに存在すると動作しない。-owを指定すると上書きする。 - dm 距離定義- m fuzziness ● 数値で指定。m > 1 -x 繰り返し最大回数 ● 数値で指定 -k 初期中心のランダムサンプリング数 ● 数値で指定 ● これを指定すると-cで指定したディレクトリは上書きされる ● ただし、Mahout 0.5でこれを指定するとエラーになる。バグ?http://search-lucene. com/m/CMBEC2UENp&subj=Bug+in+fkmeans+ -cd 収束閾値 ● 数値で指定 ● デフォルト値は0.5 -xm 処理方法を指定 ● 文字列で指定 ● sequential (running on memory) or mapreduce -cl クラスタが確定した後にデータのクラスタリングを行う ● 引数なし
  28. 28. Reference ● Mahout IN ACTION ● sequenceFile生成@hamadakoichihttp://d.hatena.ne.jp/hamadakoichi/20110112/p1 ● fkmeans仕様https://cwiki.apache.org/MAHOUT/fuzzy-k-means.html
  29. 29. ご清聴ありがとうございました。

×