はじパタlt3
DESCRIPTION
Rで学ぶデータサイエンス 5 「パターン認識」 第3章 階層的クラスタリングTRANSCRIPT
パターン認識Rで学ぶデータサイエンス
第3章2013/07/16
at リクルート(CodeIQ)
@kenchan0130_aki
学生ニート
働いたら負け
自然言語処理
得意になりたい言語:Ruby
俺だよ俺
@kenchan0130_aki
学生ニート
働いたら負け
自然言語処理
得意になりたい言語:Ruby 女の子と仲良くなれそう
俺だよ俺
@kenchan0130_aki
学生ニート
働いたら負け
自然言語処理
得意になりたい言語:Ruby 女の子と仲良くなれそう
俺だよ俺
Seleniumでスクレイピング楽しすぎワロタ\(^o^)/
パターン認識
第3章 階層的クラスタリング
第2章 k-平均法
第1章 判別能力の評価
第4章 混合正規分布モデル
第5章 判別分析
第6章 ロジスティック回帰
第7章 密度推定
第8章 k-近傍法
第9章 学習ベクトル量子化
第10章 決定木
第11章 サポートベクターマシン
第12章 正規化とパス追跡アルゴリズム
第13章 ミニマックス確率マシン
第14章 集団学習
第15章 2値判別から多値判別へ
パターン認識
第3章 階層的クラスタリング
第2章 k-平均法
第1章 判別能力の評価
第4章 混合正規分布モデル
第5章 判別分析
第6章 ロジスティック回帰
第7章 密度推定
第8章 k-近傍法
第9章 学習ベクトル量子化
第10章 決定木
第11章 サポートベクターマシン
第12章 正規化とパス追跡アルゴリズム
第13章 ミニマックス確率マシン
第14章 集団学習
第15章 2値判別から多値判別へ
クラスタ分析って?クラスタ分析って?
• あるデータ間(2つのベクトル間)の距離を, 何かしら定義します.
クラスタ分析
• あるデータ間(2つのベクトル間)の距離を, 何かしら定義します.
• その距離の近さでデータを分類する手法です.
クラスタ分析
• あるデータ間(2つのベクトル間)の距離を, 何かしら定義します.
• その距離の近さでデータを分類する手法です.• つまり, データの類似度に従ってグループ分けすることが目的です.
クラスタ分析
• 大きくクラスタ分析は以下の2つに分類されます.
クラスタ分析
• 大きくクラスタ分析は以下の2つに分類されます.
クラスタ分析
1) 階層的クラスタリングクラスタリングしたいすべてのデータに対して距離を求め, 距離が短い順にデータをまとめる方法です.
• 大きくクラスタ分析は以下の2つに分類されます.
クラスタ分析
1) 階層的クラスタリングクラスタリングしたいすべてのデータに対して距離を求め, 距離が短い順にデータをまとめる方法です.
2) 非階層的クラスタリング分割結果が得られるようにデータを分類しなおすことを繰返して, 最終的な分割結果を得る手法です.
• 帰属度を考慮する場合以下の2つに分けられます.
クラスタ分析
• 帰属度を考慮する場合以下の2つに分けられます.
クラスタ分析
1) ソフトクラスタリングデータが複数のクラスタに属することを許すクラスタリング手法です. データが各クラスタに属する度合いが出力となります. ex. 混合分布モデル, pLSI, NMF
• 帰属度を考慮する場合以下の2つに分けられます.
クラスタ分析
1) ソフトクラスタリングデータが複数のクラスタに属することを許すクラスタリング手法です. データが各クラスタに属する度合いが出力となります. ex. 混合分布モデル, pLSI, NMF
2) ハードクラスタリングデータがある1つのクラスタに属する形で出力されるクラスタリング手法です. 一般的にクラスタリングというとこちらを示すことが多いです.
階層的クラスタリングのお話
• クラスタリングしたいすべてのデータに対して距離を求め, 距離が短い順にデータをまとめる方法です.
階層的クラスタリング
• クラスタリングしたいすべてのデータに対して距離を求め, 距離が短い順にデータをまとめる方法です.
• 距離の求め方で色々名前が付いています.
階層的クラスタリング
• クラスタリングしたいすべてのデータに対して距離を求め, 距離が短い順にデータをまとめる方法です.
• 距離の求め方で色々名前が付いています. • 全てに対して分析をかけるので, データの数が多いとその分時間がかかってしまいます.
階層的クラスタリング
距離のお話距離のお話~データ間の場合~~データ間の場合~
データ間の距離
• ユークリッド距離一般的な平方距離. 各成分の差の2乗和の平方根.
各ベクトル成分は
データ間の距離
• ミンコフスキー距離ユークリッド距離をq乗に一般化した距離. 各成分の差のq乗和のq乗根.
各ベクトル成分は
データ間の距離
• 最大距離各成分の差の中での最大値.
各ベクトル成分は
データ間の距離
• マンハッタン距離格子状に引かれた路に沿って移動するときの距離.各成分の差の絶対値の和.
各ベクトル成分は
データ間の距離
• キャンベラ距離原点付近での違い強調するように各座標軸における位置を考慮してマンハッタン距離を修正した距離.各成分の絶対値の和に対する成分の差の絶対値の比の合計.
各ベクトル成分は
データ間の距離
• バイナリ距離質的変数を対象とした距離. 各成分を0と1の2値とし, 少なくともどちらか一方が1である成分数に対する一方のみである成分数の比率.
各ベクトル成分は
• データの性質に応じて適宜使い分ける必要があります.
データ間の距離
• データの性質に応じて適宜使い分ける必要があります.
• 単位の取り方で分析結果が異なることがあるため, データを正規化すると良い場合があります.
データ間の距離
距離のお話距離のお話~クラスタ間の場合~~クラスタ間の場合~
クラスタ間の距離
• 最短距離法2つのクラスタに属するデータのうち, 最も近いデータ間の距離をクラスタ間の距離とする方法.
いくつかのデータからなるクラスタ
結合後の距離は以下の式で表されます.
クラスタ間の距離
• 最長距離法2つのクラスタに属するデータのうち, 最も遠いデータ間の距離をクラスタ間の距離とする方法.
いくつかのデータからなるクラスタ
結合後の距離は以下の式で表されます.
クラスタ間の距離
• 群平均法2つのクラスタに属するデータ間のすべての組合せの距離を求め, その平均値をクラスタ間の距離とする方法.
いくつかのデータからなるクラスタ
結合後の距離は以下の式で表されます.
クラスタ間の距離
• McQuitty法2つのクラスタを統合した場合に, 他のクラスタからの距離を単純平均で算出する方法.
いくつかのデータからなるクラスタ
クラスタ間の距離
• 重心法各クラスタに含まれるデータの重心を用いてクラスタの距離を定義する方法.
いくつかのデータからなるクラスタ
結合後は以下の関係が成り立ちます.
クラスタ間の距離
• メディアン法重心法と同様にクラスタを中心に用いて距離を定義し, クラスタ結合時に新たな重心を元の重心の中点に取る方法.
いくつかのデータからなるクラスタ
クラスタ間の距離
• ウォード法新しいデータがクラスタに加わるとき, 最も広がりが小さく抑えられるクラスタにそのデータを加えてクラスタを形成する方法.
いくつかのデータからなるクラスタ
結合後は以下の関係が成り立ちます.
• 最短距離法や最長距離法は外れ値などの影響を受けやすいです.
クラスタ間の距離
• 最短距離法や最長距離法は外れ値などの影響を受けやすいです.
• 1度だけ全ての2点間の距離を計算すればよいため, 計算時間が短くて済みます.
クラスタ間の距離
• 最短距離法や最長距離法は外れ値などの影響を受けやすいです.
• 1度だけ全ての2点間の距離を計算すればよいため, 計算時間が短くて済みます.
• 群平均法やウォード法は鎖効果が起こりにくいです.
クラスタ間の距離
• 最短距離法や最長距離法は外れ値などの影響を受けやすいです.
• 1度だけ全ての2点間の距離を計算すればよいため, 計算時間が短くて済みます.
• 群平均法やウォード法は鎖効果が起こりにくいです. • クラスタを作るたびに距離を計算し直すため, 多量のデータに対して計算時間が増えることになります.
クラスタ間の距離
クラスタ間の距離
巨大なクラスターが生じることを「鎖効果」といいます
で、codeはー?で、codeはー?
• データ間の距離を計算にはdist関数を用います.
Rでの実装例
• データ間の距離を計算にはdist関数を用います. • methodオプションで, どの距離を使用するか選択できます.
Rでの実装例
• データ間の距離を計算にはdist関数を用います. • methodオプションで, どの距離を使用するか選択できます.
• デフォルトではユークリッド距離が選択されています.
Rでの実装例
• データ間の距離を計算にはdist関数を用います. • methodオプションで, どの距離を使用するか選択できます.
• デフォルトではユークリッド距離が選択されています.
Rでの実装例
- euclidean : ユークリッド距離- maximum : 最大距離- manhatttan : マンハッタン距離- canberra : キャンベラ距離- binary : バイナリ距離- minkowski : ミンコフスキー距離
• データ間の距離を計算にはdist関数を用います. • methodオプションで, どの距離を使用するか選択できます.
• デフォルトではユークリッド距離が選択されています.
Rでの実装例
- euclidean : ユークリッド距離- maximum : 最大距離- manhatttan : マンハッタン距離- canberra : キャンベラ距離- binary : バイナリ距離- minkowski : ミンコフスキー距離
• クラスタ間の距離を計算にはhclust関数を用います.
Rでの実装例
• クラスタ間の距離を計算にはhclust関数を用います. • methodオプションで, どの距離を使用するか選択できます.
Rでの実装例
• クラスタ間の距離を計算にはhclust関数を用います. • methodオプションで, どの距離を使用するか選択できます.
• デフォルトでは最長距離法が選択されています.
Rでの実装例
• クラスタ間の距離を計算にはhclust関数を用います. • methodオプションで, どの距離を使用するか選択できます.
• デフォルトでは最長距離法が選択されています.
Rでの実装例
- ward : ウォード法- single : 最短距離法- complete : 最長距離法- average : 群平均法- mcquitty : McQuitty法- median : メディアン法- centroid : 重心法
• クラスタ間の距離を計算にはhclust関数を用います. • methodオプションで, どの距離を使用するか選択できます.
• デフォルトでは最長距離法が選択されています.
Rでの実装例
- ward : ウォード法- single : 最短距離法- complete : 最長距離法- average : 群平均法- mcquitty : McQuitty法- median : メディアン法- centroid : 重心法
Rでの実装例
Rでの実装例
距離の違いによる樹形図の相違
hOd
hOdhOd
hod
hod
hod hYd
hYd
hYd
hed
hed
hed had
had
had
had hud
hud
hud
hud hUd
hUdhUd
hUd
hUd
hId
hId
hId hid hid
hEd
hEd
hAd
hAd
hAd
hAd
02
46
8
euclidean and complete
hclust (*, "complete")dist(x)
Height
hId
hId
hId hid
hid
hEd
hEd
hAd
hAd
hAd
hAd
hOd
hOd hOd
hod
hod
hodhYd
hYd
hYd
hed
hed
hedhad
had
had
had
hud
hud
hud
hud
hUd
hUd
hUd
hUd
hUd
05
1525
euclidean and ward
hclust (*, "ward")dist(x)
Height
hAd
hAd
hAd
hAd hid
hid
hId
hId
hId hEd
hEd
hOd
hOd hOd
hod
hod
hodhYd
had
hYd
hYd
hed
hed
hed had
had
had
hud
hud
hud
hud hUd
hUd
hUd
hUd
hUd
05
1015
2025
manhattan and complete
hclust (*, "complete")dist(x, method = "manhattan")
Height
hEd
hEd
hAd
hAd
hAd
hAd
hId
hId
hId hid
hid
hOd
hOdhOd
hod
hod
hod
hYd
hYd
hYd
hed
hed
hed
had
had
had
had
hud
hud
hud
hud
hUd
hUd
hUd
hUd
hUd
020
4060
80
manhattan and ward
hclust (*, "ward")dist(x, method = "manhattan")
Height
• ユークリッド距離を用いた最長距離法では, 他と比べて鎖効果が多少強い樹形図が描かれています.
Rでの実装例
• 樹系図をいくつかのグループに分割する方法として, rect.hclust関数があります.
• 指定した分割数の長方形が描画されます. • 必要な部分木のみを取得することもできます.
Rでの実装例
Rでの実装例
Rでの実装例
樹形図の分割(左)とその部分木(右)
hOd
hOd
hod
hud
hId
hId
hEd
hEd hid
hid hud
hId
hid
hud
hud hId
hId hid
hid
hOd
hYd
hYd
hAd
had
hAd hEd
hEd
hEd
hed
hed
hed hud
hed
hed had
hed
hUd
had
hod
hodhod
hUd
hUd
hod
hod
hYd
hYd
hud
hud
hud hOd
hYd
hOd
hOd
hYd
hYdhed
hed
hed hUd
hUd
hUd hod
hod
hod hid
hUd
hUd hYd
hYd
hYd
hAd
hYd
hEd
had
hAd
hAd
hEd
hEd hId
hEd
hEd hud
hud
hYd
hYd hed
hed
hed hid
hid
hId
hId hid
hId
hed
hed hed
hed
had
020
4060
80100
120
140
Cluster Dendrogram
hclust (*, "ward")dist(x, method = "manhattan")
Height
hUd
hUd
hUd
hod
hod
hod
hid
hUd
hUd0
24
68
1012
1416
Cluster Dendrogram
hclust (*, "ward")dist(x[grp[[7]], ], method = "manhattan")
Height
今日のまとめ今日のまとめ
まとめ
• 階層的クラスタリングは, 全てのデータに対して距離を計算するものでした.
まとめ
• 階層的クラスタリングは, 全てのデータに対して距離を計算するものでした.
• 距離の計算方法によって計算量が変わります.
まとめ
• 階層的クラスタリングは, 全てのデータに対して距離を計算するものでした.
• 距離の計算方法によって計算量が変わります. • データに分布を仮定したりしないので, 数学的にあまり面倒な議論をしないでもOK.
まとめ
• 階層的クラスタリングは, 全てのデータに対して距離を計算するものでした.
• 距離の計算方法によって計算量が変わります. • データに分布を仮定したりしないので, 数学的にあまり面倒な議論をしないでもOK.
• クラスタに分けたあとのクラスタ毎の意味付け頑張って下さい^^ (←これが一番大変だと思います. )
まとめ
• 階層的クラスタリングは, 全てのデータに対して距離を計算するものでした.
• 距離の計算方法によって計算量が変わります. • データに分布を仮定したりしないので, 数学的にあまり面倒な議論をしないでもOK.
• クラスタに分けたあとのクラスタ毎の意味付け頑張って下さい^^ (←これが一番大変だと思います. )
• Rにはクラスタリングのための機能を提供する, clusterパッケージがあるので是非使ってみて下さい!
Have a nice clustering!!