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.

Introduction to fuzzy kmeans on mahout

14,085 views

Published on

Published in: Technology, Business
  • Be the first to comment

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. ご清聴ありがとうございました。

×