Python機械学習プログラミング
読み会
第11章
クラスタ分析 - ラベルなしデータの分析
1
[第2版]
基盤 江口春紀
目次
● k-means法を使った類似度によるオブジェクトのグループ化
● クラスタを階層木として構成する
● DBSCANを使って高密度の領域を特定する
2
クラスタ分析 - ラベルなしデータの分析
● クラスタ分析
● 教師なし学習。
● 正しい答えが事前に分かっていないデータから隠れた構造を見つけ出す。
3
4
k-means法を使った
類似度によるオブジェクトのグループ化
k-means法を使った類似度によるオブジェクトのグループ化
● k-means法(k-means algorithm)
● 類似したオブジェクトをグループにまとめることができる。
● レコメンデーションエンジンのベースとして、異なるテーマの文書、
音楽映画を同じグループにまとめること、などができる。
5
POP
Rock
Jazz
scikit-learnを使ったk-meansクラスタリング
● k-means法
● プロトタイプベースクラスタリングに属する手法。
(他に階層的クラスタリングと密度ベースクラスタリングがある)
● もっとも効果を発揮するのは球状または円状のクラスタの分類である。
● クラスタの適切な個数kを決定する必要がある。(後述)
6
scikit-learnを使ったk-meansクラスタリング
● k-means法を説明するための簡易的な例
● ランダムに生成された150個のサンプル点を用意する。
7
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=150,
n_features=2,
centers=3,
cluster_std=0.5,
shuffle=True,
random_state=0)
plt.scatter(X[:, 0], X[:, 1],
c='white', marker='o', edgecolor='black',
s=50)
plt.grid()
plt.tight_layout()
plt.show()
scikit-learnを使ったk-meansクラスタリング
● k-means法のアルゴリズム
1. クラスタの中心の初期値として、サンプル点からk個のセントロイドをランダムに選択する。
2. 各サンプルをもっとも近いセントロイドに割り当てる。
3. セントロイドに割り当てられたサンプルの中心にセントロイドを移動する。
4. クラスタ割り当てが変化しなくなるか、指定したイテレーションの回数2~3を繰り返す。
8
1 2 3
scikit-learnを使ったk-meansクラスタリング
● オブジェクトの類似度
● オブジェクトの類似度は「距離が離れていないこと」として定義ができる。
オブジェクトの類似度を測る指標として、ユークリッド距離を用いた、
クラスタ内誤差平方和(SSE)を使用する。このSSEを最小化するような最適化問題を
取り上げる。
9
クラスタjの中心点(セントロイド)
サンプル点x^(i)がクラスタ内に存在する場合は
w=1、そうでない場合はw=0となる
scikit-learnを使ったk-meansクラスタリング
● サンプルデータへの適用
10
from sklearn.cluster import KMeans
km = KMeans(n_clusters=3,
init='random',
n_init=10,
max_iter=300,
tol=1e-04,
random_state=0)
y_km = km.fit_predict(X)
scikit-learnを使ったk-meansクラスタリング
● k-meansで注意すべき点
● クラスタの個数kを指定する必要がある。
● 空になるクラスタが存在する可能性がある。scikit-learnの実装では、この問題を
回避している。
クラスタが空である場合、空のクラスタのセントロイドからもっとも離れた
サンプルを探し、そのサンプル点をセントロイドに変更する。
11
k-means++法を使ってセントロイドの初期値をよりスマートに設定する
● k-means++
● 最初のセントロイドの選択の時、セントロイドを互いに離れた位置に配置することで、
k-means法よりも効果的な、より一貫性のある結果が得られる。
12
k-means++法を使ってセントロイドの初期値をよりスマートに設定する
● k-means++法による初期化
1. 選択の対象となるk個のセントロイドを格納するために、空のデータセットMを初期化する。
2. 入力サンプルから初期のセントロイドμをランダムに選択し、Mに割り当てる。
3. Mに含まれていないサンプルxごとに、Mのセントロイドに対して距離の2乗d(x, M)^2
が最小となるセントロイドを求める。
4. 次のセントロイドμをランダムに選択するために、各サンプルとの距離によって重み付けされ
た確率分布を使用する。
5. k個のセントロイドが選択されるまで3~4を繰り返す。
13
https://wasyro.github.io/k-meansppVisualizer/
ハードクラスタリングとソフトクラスタリング
● ハードクラスタリング
● データセットのサンプルがそれぞれちょうど1つのクラスタに割り当てられるアルゴリズム。
● ソフトクラスタリング
● サンプルを1つ以上のクラスタに割り当てるアルゴリズム。
ファジークラスタリングとも呼ばれる。
● ソフトクラスタリングの代表的な例として、Fuzzy C-means法(FCM)がある。
14
ハードクラスタリングとソフトクラスタリング
● Fuzzy C-means法(FCM)
● 通常のハードクラスタリングではサンプルの帰属が0か1かで判断されるが、
ソフトクラスタリングでは、「あるクラスターには0.8帰属し、
別のクラスターには0.2帰属する」というような確率に置き換えられる。
15
ハードクラスタリング ソフトクラスタリング
ハードクラスタリングとソフトクラスタリング
● FCM法のアルゴリズム
1. セントロイドの個数kを指定し、各サンプル点に対してクラスタメンバシップ確率を
ランダムに割り当てる。
2. クラスタのセントロイドを計算する。
3. 各サンプルのクラスタメンバシップ確率を変更する。
4. クラスタメンバシップ確率の係数が変化しなくなるか、ユーザ定義の許容値、
またはイテレーションの最大回数に達するまで2~3を繰り返す。
16
ハードクラスタリングとソフトクラスタリング
● FCM法の目的変数J
● k-means法によって最小化されるクラスタ内誤差平方和(SSE)とよく似ている。
17
0と1の二値ではなくクラスタメンバシップ確率
を表す実数値である。
ファジー性の度合いを制御するファジー係数。
mの値が大きくなるほどクラスタメンバシップ確率w
は小さくなりよりファジーなクラスタとなる。
ハードクラスタリングとソフトクラスタリング
● FCM法のクラスタメンバシップ確率w
● クラスタ自体の中心μは、そのクラスタの全てのサンプルの平均として計算できる。
サンプルは独自のクラスタに対するクラスタメンバシップ確率の度合いで重み付けされる。
18
エルボー法を使ってクラスタの最適な個数を求める
● 教師なし学習の課題
● 教師なし学習は明確な正解がないので、クラスタリングの性能を数値化するには、
クラスタ内誤差平方和(SSE)のような指標を用いて性能を比較する必要がある。
● kの値が増えるとSSEの値は小さくなる。エルボー法という図解によって、kを変化させた時
SSEが最も急激に増え始めるkを特定することができる。
19
エルボー
シルエット図を使ってクラスタリングの性能を数値化する
● シルエット分析
● クラスタ内のサンプルがどの程度密にグループ化されているか(凝集度)の目安となる
グラフをプロットする。
(1つのクラスターが隣接するクラスターとどれくらい離れているかを可視化する。)
● k-means法以外のクラスタリングアルゴリズムにも適用できる。
20
シルエット図を使ってクラスタリングの性能を数値化する
● シルエット分析のアルゴリズム
1. クラスタの凝集度a^(i)を計算する。この凝集度は同一クラスのサンプルx^(i)と他の
全サンプルとの平均距離として計算する。
2. 最も近いクラスタからの乖離度b^(i)を計算する。この乖離度は、サンプルx^(i)と最も近くに
あるクラスタ内の全サンプルとの平均距離として計算する。
3. クラスタの凝集度と乖離度の差を、それらのうちの大きい方の値で割り、
シルエット係数s^(i)を計算する。
21
シルエット図を使ってクラスタリングの性能を数値化する
● シルエット係数のプロット
22
from sklearn.metrics import silhouette_samples
cluster_labels = np.unique(y_km)
n_clusters = cluster_labels.shape[0]
silhouette_vals = silhouette_samples(X, y_km, metric='euclidean')
y_ax_lower, y_ax_upper = 0, 0
yticks = []
for i, c in enumerate(cluster_labels):
c_silhouette_vals = silhouette_vals[y_km == c]
c_silhouette_vals.sort()
y_ax_upper += len(c_silhouette_vals)
color = cm.jet(float(i) / n_clusters)
plt.barh(range(y_ax_lower,y_ax_upper),
c_silhouette_vals,
height=1.0,
edgecolor='none',
color=color)
yticks.append((y_ax_lower + y_ax_upper) / 2.)
y_ax_lower += len(c_silhouette_vals)
シルエット図を使ってクラスタリングの性能を数値化する
● 悪いクラスタリングの例
● k=2でk-meansを実行し、シルエット係数を算出する。
23
明らかにシルエット係数が低い
24
クラスタを階層木として構成する
クラスタを階層木として構成する
● 階層的クラスタリング
● プロトタイプベースのクラスタリングのうちの1つだが、クラスタの個数を事前に
指定する必要がない。
● 樹形図をプロットできる。樹形図は二分木の階層的クラスタリングを可視化した
ものであり、意味のある分割を作成することで、結果を解釈するのに役立つ。
25
クラスタを階層木として構成する
● 凝集型階層的クラスタリング
● 個々のサンプルを1つのクラスタと扱い、クラスタが1つだけ残った状態になるまで
最も近くにある2つのクラスタをマージしていく。
● 分割型階層的クラスタリング
● まず全てのサンプルを包含する1つのクラスタを定義し、全てのクラスタにサンプルが
1つだけ含まれた状態になるまでクラスタをより小さなクラスタに分割していく。
26
ボトムアップ方式でのクラスタのグループ化
● 凝集型階層的クラスタリング
● 単連結法(single linkage)
● クラスタのペアごとに最も類似度の高いメンバー同士の距離を計算し、
それらの距離が最小になるような方法で2つのクラスタをマージする。
● 完全連結法(complete linkage)
● クラスタのペアごとに最も類似度の高いメンバー同士を比較するのではなく、
最も類似度の低いメンバー同士を比較する。
27
単連結
完全連結
ボトムアップ方式でのクラスタのグループ化
● 完全連結法
1. 全てのサンプルの距離行列を計算する。
2. 各データ点を単一のクラスタとみなして表現する。
3. 最も類似度の低いメンバーの距離に基づき、2つの最も近いクラスタをマージする。
4. 距離行列を更新する。
5. クラスタが1つだけ残った状態になるまで、3~4を繰り返す。
28
距離行列で階層的クラスタリングを実行する
● 完全連結法の実行
● クラスタリングの結果
29
from scipy.cluster.hierarchy import linkage
row_clusters = linkage(
pdist(df, metric='euclidean'),
method='complete'
)
30
DBSCANを使って
高密度の領域を特定する
DBSCANを使って高密度の領域を特定する
● DBSCAN(Density-based spatial clustering of applications with noise)
● 密度ベースのクラスタリングで、サンプル点の局所的な密度に基づいて
クラスタラベルを割り当てる。
「密度」とは指定された半径ε以内に存在する点の個数として定義される。
31
コア点 : 半径ε以内に少なくともminPts個の隣接点を持つ点。
ボーダー点 : 半径ε以内にminPts個ほどは隣接点がないが,
半径ε以内にコア点を持つ点
ノイズ点 : 半径ε以内に隣接点がない点
DBSCANを使って高密度の領域を特定する
● DBSCANのメリット
● k-meansと違って,クラスタ数を決める必要がない。
● クラスタが球状であることを前提としないので、とがったクラスタでも分類できる。
● ノイズが除去できる。
● DBSCANのデメリット
● データが密集していると適切にεとminPtsを決めるのが困難である。
● クラスタ間で密度が異なるようなデータの場合、期待通りのクラスタリングができない。
32
DBSCANを使って高密度の領域を特定する
● 他のアルゴリズムとの比較
● k-means法と階層的クラスタリングとの比較結果
33
まとめ
● k-means法
● 指定された個数のクラスタのセントロイドに基づいて、サンプルが球状に
クラスタリングされる。
● 凝集型階層的クラスタリング
● クラスタの個数を事前に指定する必要はなく、結果は樹形図として表示される。
● DBSCAN
● 局所的な密度に基づいて点をグループ化するアルゴリズムであり、外れ値の処理や
球状以外の形状を識別できる。
● 性能指標
● エルボー法、シルエット分析
34

More Related Content

PPTX
【DL輪読会】Variable Bitrate Neural Fields
PPTX
Superpixel Sampling Networks
PPTX
畳み込みLstm
PPTX
【輪読会】Learning Continuous Image Representation with Local Implicit Image Funct...
PDF
3次元レジストレーション(PCLデモとコード付き)
PPTX
[DL輪読会]Pyramid Stereo Matching Network
PDF
サポートベクトルマシン(SVM)の勉強
PDF
【DL輪読会】Code as Policies: Language Model Programs for Embodied Control
【DL輪読会】Variable Bitrate Neural Fields
Superpixel Sampling Networks
畳み込みLstm
【輪読会】Learning Continuous Image Representation with Local Implicit Image Funct...
3次元レジストレーション(PCLデモとコード付き)
[DL輪読会]Pyramid Stereo Matching Network
サポートベクトルマシン(SVM)の勉強
【DL輪読会】Code as Policies: Language Model Programs for Embodied Control

What's hot (20)

PDF
深層自己符号化器+混合ガウスモデルによる教師なし異常検知
PDF
【DL輪読会】Novel View Synthesis with Diffusion Models
PDF
文献紹介:Swin Transformer: Hierarchical Vision Transformer Using Shifted Windows
PPTX
ベイズ深層学習5章 ニューラルネットワークのベイズ推論 Bayesian deep learning
PDF
物体検知(Meta Study Group 発表資料)
PDF
Overcoming Catastrophic Forgetting in Neural Networks読んだ
PDF
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
PDF
論文紹介:Temporal Action Segmentation: An Analysis of Modern Techniques
PPTX
Convolutionl Neural Network 入門
PDF
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
PDF
NeurIPS2021論文読み会 (parameter prediction for unseen deep architecture)
PPTX
CVPR2018 pix2pixHD論文紹介 (CV勉強会@関東)
PDF
【メタサーベイ】数式ドリブン教師あり学習
PDF
[DL輪読会]Temporal Abstraction in NeurIPS2019
PPTX
Structure from Motion
PDF
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
PDF
オープンワールド認識 (第34回全脳アーキテクチャ若手の会 勉強会)
PDF
ICLR2020の異常検知論文の紹介 (2019/11/23)
PPTX
Can Spatiotemporal 3D CNNs Retrace the History of 2D CNNs and ImageNet?
PDF
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
深層自己符号化器+混合ガウスモデルによる教師なし異常検知
【DL輪読会】Novel View Synthesis with Diffusion Models
文献紹介:Swin Transformer: Hierarchical Vision Transformer Using Shifted Windows
ベイズ深層学習5章 ニューラルネットワークのベイズ推論 Bayesian deep learning
物体検知(Meta Study Group 発表資料)
Overcoming Catastrophic Forgetting in Neural Networks読んだ
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
論文紹介:Temporal Action Segmentation: An Analysis of Modern Techniques
Convolutionl Neural Network 入門
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
NeurIPS2021論文読み会 (parameter prediction for unseen deep architecture)
CVPR2018 pix2pixHD論文紹介 (CV勉強会@関東)
【メタサーベイ】数式ドリブン教師あり学習
[DL輪読会]Temporal Abstraction in NeurIPS2019
Structure from Motion
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
オープンワールド認識 (第34回全脳アーキテクチャ若手の会 勉強会)
ICLR2020の異常検知論文の紹介 (2019/11/23)
Can Spatiotemporal 3D CNNs Retrace the History of 2D CNNs and ImageNet?
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
Ad

Similar to [第2版]Python機械学習プログラミング 第11章 (20)

PDF
Section11 clustering
PDF
各言語の k-means 比較
PPTX
[機械学習]文章のクラス分類
PDF
論文紹介&実験
PDF
第3回集合知プログラミング勉強会 #TokyoCI グループを見つけ出す
PPT
Tokyo r#10 Rによるデータサイエンス 第五章:クラスター分析
PDF
データ解析12 k平均法
PDF
第四回 集合知プログラミング勉強会資料
PDF
はじパタLT2
PDF
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
PDF
パターン認識02 k平均法ver2.0
PDF
[第2版] Python機械学習プログラミング 第3章(5節~)
PPTX
Python Project (2)
PPTX
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
PDF
Machine&data
PDF
分類問題 - 機械学習ライブラリ scikit-learn の活用
PDF
ユークリッド距離以外の距離で教師無しクラスタリング
PDF
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V k-1
PDF
はじパタLT3
PPTX
Knn発表資料(R)
Section11 clustering
各言語の k-means 比較
[機械学習]文章のクラス分類
論文紹介&実験
第3回集合知プログラミング勉強会 #TokyoCI グループを見つけ出す
Tokyo r#10 Rによるデータサイエンス 第五章:クラスター分析
データ解析12 k平均法
第四回 集合知プログラミング勉強会資料
はじパタLT2
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
パターン認識02 k平均法ver2.0
[第2版] Python機械学習プログラミング 第3章(5節~)
Python Project (2)
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
Machine&data
分類問題 - 機械学習ライブラリ scikit-learn の活用
ユークリッド距離以外の距離で教師無しクラスタリング
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V k-1
はじパタLT3
Knn発表資料(R)
Ad

More from Haruki Eguchi (16)

PDF
[第2版]Python機械学習プログラミング 第16章
PDF
[第2版]Python機械学習プログラミング 第15章
PDF
[第2版]Python機械学習プログラミング 第14章
PDF
[第2版]Python機械学習プログラミング 第13章
PDF
[第2版]Python機械学習プログラミング 第12章
PPTX
[第2版]Python機械学習プログラミング 第12章
PPTX
[第2版]Python機械学習プログラミング 第10章
PPTX
[第2版]Python機械学習プログラミング 第9章
PDF
[第2版]Python機械学習プログラミング 第8章
PDF
[第2版]Python機械学習プログラミング 第7章
PDF
[第2版]Python機械学習プログラミング 第6章
PDF
[第2版] Python機械学習プログラミング 第5章
PDF
[第2版] Python機械学習プログラミング 第4章
PDF
[第2版] Python機械学習プログラミング 第3章(~4節)
PDF
[第2版] Python機械学習プログラミング 第2章
PDF
[第2版] Python機械学習プログラミング 第1章
[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第15章
[第2版]Python機械学習プログラミング 第14章
[第2版]Python機械学習プログラミング 第13章
[第2版]Python機械学習プログラミング 第12章
[第2版]Python機械学習プログラミング 第12章
[第2版]Python機械学習プログラミング 第10章
[第2版]Python機械学習プログラミング 第9章
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第7章
[第2版]Python機械学習プログラミング 第6章
[第2版] Python機械学習プログラミング 第5章
[第2版] Python機械学習プログラミング 第4章
[第2版] Python機械学習プログラミング 第3章(~4節)
[第2版] Python機械学習プログラミング 第2章
[第2版] Python機械学習プログラミング 第1章

[第2版]Python機械学習プログラミング 第11章

Editor's Notes

  • #3: IMDb: Internet Movie Database
  • #6: 同じグループに属しているオブジェクトは、他のグループに属しているグループよりも 互いに関連度が高い。
  • #8: n_samples=サンプル数 n_features=特徴量の個数 centers=クラスタ数 cluster_std=クラスタ内の標準偏差
  • #9: セントロイド:類似する点の中心を表す
  • #11: n_clusters=クラスタ数 init=セントロイドの初期値をランダムに選択 n_init=異なるセントロイドの初期値を用いたk-meansの試行回数 max_iter=最大イテレーション回数 tol=1e-04収束判定
  • #14: この確率変数を使うと、次に選択されるセントロイドμは、Mにあるセントロイドと距離が離れているところに配置される確率が高くなる。 分母:Mに含まれていないサンプルxとMのセントロイドの距離を2乗したものの最小値を合計したもの 分子:次のセントロイドμとMのセントロイドの距離を2乗したものの最小値
  • #16: 各セントロイドへの帰属の確率は合計すると1になる。 クラスタメンバシップ確率:該当するクラスタのセントロイドのメンバーとなる確率
  • #17: クラスタメンバシップ確率:該当するクラスタのセントロイドのメンバーとなる確率
  • #18: クラスタメンバシップ確率:該当するクラスタのセントロイドのメンバーとなる確率 ファジー性が大きいとよりぼやけたクラスタになる。
  • #19: k-meansよりも計算コストは高いが、一般的に収束するまでのイテレーション数はFCMの方が少ない。
  • #20: kの値が増えるとSSEの値は小さくなる。 -> サンプルがそれぞれが属するクラスタのセントロイドに近づくから。
  • #22: シルエット係数の範囲は-1, 1 乖離度と凝集度が等しいとシルエット係数は0 b>>aの場合は理想的なシルエット係数である1に近づく
  • #23: 縦軸が全サンプル 横軸がシルエット係数。 クラスタごとにクラスタ内のサンプルのシルエット係数が小さいものからプロットしている。 赤い点線は全サンプルのシルエット係数の平均。
  • #24: 縦軸が全サンプル 横軸がシルエット係数。 クラスタごとにクラスタ内のサンプルのシルエット係数が小さいものからプロットしている。 赤い点線は全サンプルのシルエット係数の平均。
  • #29: 類似度が低い:最も離れている 距離行列の計算はscipyのspatial.distanceモジュールのpdist関数を使用
  • #30: scikit-learnでも実装可能 AgglomerativeClusteringクラス
  • #36: k-meansよりも計算コストは高いが、一般的に収束するまでのイテレーション数はFCMの方が少ない。