Contenu connexe
Similaire à Introduction to fuzzy kmeans on mahout
Similaire à Introduction to fuzzy kmeans on mahout (20)
Introduction to fuzzy kmeans on mahout
- 4. 自己紹介
● 名前
○ lawmn
● 出身
○ 新潟県
● 使用言語
○ Python, C#
● 大学のときの専攻
○ 素粒子物理学専攻、博士号取得(仕事とはなんの関係もあり
ません)
● 趣味
○ 旅行
■ 今のところ行ったことがあるところは20カ国
■ 南米に行ってみたい
- 12. kmeans on Mahout
アルゴリズム
1. 全データから初期中心を選ぶ
2. クラスタ中心と各データとの距離を求め、距離が最も近い中心のクラスタにデータ
を割り当てる
3. クラスタ中心の変化が閾値以下だった場合は処理を終了する
4. 各クラスタの中心を計算する
5. 2の処理へ
@hamadakoichi
Mahout Canopy Clustering - #TokyoWebmining 9
http://www.slideshare.net/hamadakoichi/mahout-canopy-clustering-tokyowebmining-9
- 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. Fuzzy kmeans on Mahout
以下の評価関数を最小化するクラスタリング
(n個のデータ点をk個のクラスタに分割する)
:データ点
:クラスタ中心
:クラスタへの帰属度
:ユークリッド距離
:fuzziness(m > 1)
- 15. Fuzzy kmeans on Mahout
アルゴリズム
1. 全データから初期中心を選ぶ
2. 初期中心を固定して、クラスタへの帰属度を計算する
3. 2で計算した帰属度を用いて, 各クラスタの中心を計算する
4. 3で計算した中心を用いて,帰属度を計算する
5. 3~4を繰り返し、クラスタ中心の変化が閾値以下であれば終了
Fuzzy kmeans
kmeans
最終的に上図のようになる
- 16. Fuzzy kmeans on Mahout
パッと見、評価関数を以下で定義してもfuzzy kmeansが実行できる
ように見える。
しかし、この場合に帰属度の条件を満たし最小化しようとすると
kmeansの評価関数と同じになってしまう。
参考:http://www.cs.osakafu-u.ac.jp/hi/honda/mathematics.htm
このため、fuzziness: mを導入して、例えばm=2として実行する。
- 17. Mahout上でのFuzzy kmeans実行
1. Data converter(tsvからsequenceFileを生成)をMahoutに追加
○ @hamadakoichiさんに感謝
○ http://d.hatena.ne.jp/hamadakoichi/20110112/p1
2. クラスタリング対象データ(tsv)をHDFS上にアップ
3. sequenceFile生成
4. 初期中心生成
○ Random
○ Canopy
5. Fuzzy kmeans実行
6. クラスタリング結果確認
Mahout version
mahout-distribution-0.5
27 May 2011 - Apache Mahout 0.5 released
maven, Hadoop, Mahoutがインストール済み
であることを前提とする
- 18. Mahout上でのFuzzy kmeans実行
1. Data converter(tsvからsequenceFileを生成)をMahoutに追加
○ @hamadakoichiさんに感謝
○ http://d.hatena.ne.jp/hamadakoichi/20110112/p1
2. クラスタリング対象データ(tsv)をHDFS上にアップ
3. sequenceFile生成
4. 初期中心生成
○ Random
○ Canopy
5. Fuzzy kmeans実行
6. クラスタリング結果確認
Mahout version
mahout-distribution-0.5
27 May 2011 - Apache Mahout 0.5 released
maven, Hadoop, Mahoutがインストール済み
であることを前提とする
- 20. Mahout上でのFuzzy kmeans実行
1. Data converter(tsvからsequenceFileを生成)をMahoutに追加
○ @hamadakoichiさんに感謝
○ http://d.hatena.ne.jp/hamadakoichi/20110112/p1
2. クラスタリング対象データ(tsv)をHDFS上にアップ
3. sequenceFile生成
4. 初期中心生成
○ Random
○ Canopy
5. Fuzzy kmeans実行
6. クラスタリング結果確認
Mahout version
mahout-distribution-0.5
27 May 2011 - Apache Mahout 0.5 released
maven, Hadoop, Mahoutがインストール済み
であることを前提とする
- 22. Mahout上でのFuzzy kmeans実行
1. Data converter(tsvからsequenceFileを生成)をMahoutに追加
○ @hamadakoichiさんに感謝
○ http://d.hatena.ne.jp/hamadakoichi/20110112/p1
2. クラスタリング対象データ(tsv)をHDFS上にアップ
3. sequenceFile生成
4. 初期中心生成
○ Random
○ Canopy
5. Fuzzy kmeans実行
6. クラスタリング結果確認 Mahout version
mahout-distribution-0.5
27 May 2011 - Apache Mahout 0.5 released
maven, Hadoop, Mahoutがインストール済み
であることを前提とする
- 23. Mahout上でのFuzzy kmeans実行
sequenceFile生成&初期中心生成
1. sequenceFile生成
○ $MAHOUT_HOME/bin/mahout org.apache.mahout.text.
TextToVectorConverter -i testdata -o testdata_seq
2. 初期中心生成
○ 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. Mahout上でのFuzzy kmeans実行
1. Data converter(tsvからsequenceFileを生成)をMahoutに追加
○ @hamadakoichiさんに感謝
○ http://d.hatena.ne.jp/hamadakoichi/20110112/p1
2. クラスタリング対象データ(tsv)をHDFS上にアップ
3. sequenceFile生成
4. 初期中心生成
○ Random
○ Canopy
5. Fuzzy kmeans実行
6. クラスタリング結果確認
Mahout version
mahout-distribution-0.5
27 May 2011 - Apache Mahout 0.5 released
maven, Hadoop, Mahoutがインストール済み
であることを前提とする
- 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.
EuclideanDistanceMeasure
2. クラスタリング結果確認
○ output_fcmにあるsequenceFileはバイナリであるため、テキ
ストに変換
○ $MAHOUT_HOME/bin/mahout clusterdump --seqFileDir
output_fcm/clusters-1 --pointsDir
output_fcm/clusteredPoints/ --output
$HOME/clusteranalyze-0.txt
- 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. 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. Reference
● Mahout IN ACTION
● sequenceFile生成
@hamadakoichi
http://d.hatena.ne.jp/hamadakoichi/20110112/p1
● fkmeans仕様
https://cwiki.apache.org/MAHOUT/fuzzy-k-means.html