Translate

#69 Section 24 クラスタリング(5)モデルの分析

assign_model関数で、クラスターラベルの付与を行ったところで、チュートリアルの『Analyze Model(モデルの評価)』に進みましょう。



1.plot_model関数

分類や回帰と同様に、plot_model関数を使用すると、学習済みモデルのパフォーマンスを分析できます。

plot_model(モデル名, plot='グラフの種類′)

クラスタリングでplot_model関数のグラフの種類についての詳細は、下記の公式ドキュメントの『Examples by module→Clustering』を参照してください。




2.plot_model関数 引数 'cluster'

まずは、下記のスライドにあるように引数を『plot = ‘cluster’』としたコードが書かれています。これは、「クラスタリングの結果を可視化せよ」という指示ですが、2次元のグラフに表示するために*PCAという次元圧縮技術が自動的に適用されます。

*PCA主成分分析/Principal Component Analysis):たくさんの変数を持つデータを特徴を保ちながら少数の変数で表現する次元削減の手法の一つ。『第1主成分』、『第2主成分』という新しい2つの指標にまとめ上げることができます。





出力された下記スライドのグラフから、このモデルは「非常に良好にクラスタリングができている」と評価できます。

クラスタ間の分離(Separation)が明確
→4つのグループ(Cluster 0〜3)が、平面上で互いに離れた位置に固まっています。これは、モデルがデータ間の明確な違いを捉えられていることを示します。

クラスタ内の凝集度(Cohesion)が高い
→各色がバラバラに散らばることなく、特定のエリアに集中して分布しています。これは、同じクラスタ内のデータが互いに似た性質を持っていることを意味します。

ノイズ(混合)が少ない
→一部、Cluster 3(赤)とCluster 0(青)の境界付近でデータが混じり合っている箇所がありますが、全体としては境界線がはっきりしています。

★スライドはクリックすると、拡大されます!





3.plot_model関数 引数 ’elbow’ 

次は、引数を『plot = ‘elbow’』にしたコードが書かれています。下記のスライドをご覧ください。

Section 22でも体験しましたが、これは、クラスター数をいくつにするのが最適かを判断するためのグラフです。

クラスター数を1、2、3... と増やしていき、それぞれのケースで「各データ点とその所属するクラスタの中心点との距離の合計(誤差の総和)」を計算し、グラフ化したものです。

グラフの形から、エルボー法と呼ばれています。

このグラフからは、データに対して最も効率的なクラスター数が3個であることが読み取れます。 





4.plot_model関数 引数 ’silhouette’ 

下記のスライドをご覧ください。

次は、引数を『plot = ’silhouette’』にしたコードが書かれています。『silhouette』は、シルエットと発音します。

Section 22でも体験しましたが、このグラフは、色分けされた塊が、1つのクラスターを表し、塊の厚み(高さ)は、そのクラスターに含まれるデータの数を表します。赤い破線は、平均シルエット係数です。

右に伸びていればいるほど(1に近いほど)、そのデータは「自分のクラスターにふさわしい」ことを示します。

『0』以下の左側に突き出しているデータは、別のクラスターに入ったほうが適切だった可能性がある「迷子」のデータです。

このグラフを見ると、全体的にクラスタリングがよく行われているように見えますが、一番下の青いクラスタが平均(赤い破線)に届かず、他のグループと混ざり合っていて、あまり質が良くないことを意味しています。塊の厚みも、他に比べて、薄いようです。

前出のエルボー法では、最適クラスター数は3でしたので、デフォルトの4個の場合、このようなクラスターが出てしまうのかもしれません。





5.help(plot_model)

次のコードには、利用可能なプロットを確認するためのドキュメントとして、
『# help(plot_model)』とあり、2行目の『#』を削除して、『plot_model』のhelpを表示させてみました。

あまり役に立たないので、ここでは、このhelpは無視して次に進みます。





6.evaluate_model関数

plot_model関数の代替としてevaluate_model関数があります。*ipywidgetを使用するため、ノートブックでのみ使用できます。

*ipywidget:プログラムを書いたり、実行できたりする対話式の分析環境JupyterLabで、インタラクティブな操作画面(UI)を作るためのライブラリです。

実行すると、出力は下記のようになります。下記のスライドをご覧ください。

①は、メニューボタンで、何もしない状態では、『Pipline Plot』が選択され、機械学習モデルを構築する際にPyCaretが自動的に行った前処理を視覚的に表現しています(②)。SimpleImputerは欠損値の補完、 KMeansはK-means法でクラスタリングを行ったことを表しています。





t-SNE(3d)Dimensi...』のボタンをクリックすると、plot_model関数で引数を
『plot = ‘cluster’』にした際と同じグラフを出力させることができます。 PCA(主成分分析)の結果を、『第1主成分』、『第2主成分』を軸にしてプロットしたグラフです。





ボタン『Cluster t-SNE(3d)』をクリックすると、『3d TSNE Plot for Clusters』というタイトルの3次元のグラフが出力されます。

これは、PCA(主成分分析)によるプロットと似ていますが、『t-SNE(ティー・スネー)』 という次元削減手法を使うことで、よりデータの細かな構造が浮き彫りになります。

全体的な位置関係を知りたいときはPCA」、「似たもの同士がどれだけ固まっているかを見たいときはt-SNE」と使い分けると、より説得力のある分析ができるようになります。

また、このグラフは、ドラッグすることにより見る角度を変えることができますので、クラスターの分離がよくわかる角度で見てみましょう(見せましょう)!コードを書いて、Google Colaboratoryでグリグリと動かしてみてください。




ボタン『Elbow Plot』をクリックすると、『Distortion Score Elbow for KMeans Clustering』というタイトルのグラフが出力されます。

詳細は、スライド5を参照ください。





ボタン『Silhouette Plot』をクリックすると、『Silhouette Plot of Kmeans Clustering for 505 Samples in 4 Centers』というタイトルのグラフが出力されます。

詳細は、スライド6を参照ください。





ボタン『Distance Plot』をクリックすると、『KMeans Intercluster Distance Map』というグラフが表示されます。

これは、クラスタ間の距離と各クラスタの規模という2つの視点で評価するためのグラフです。

●円の大きさ(Size)
→そのクラスタに含まれるデータポイントの数を表します。円が大きいほど、多くのデータ(サンプル)がそのグループに属していることを意味します。

●円同士の距離(Distance)
→2次元平面上の距離として、クラスタ間の類似性を表します。円が離れているほど、それらのグループは互いに異なる性質を持っており、重なっている場合は性質が似通っている(分離が不十分な可能性がある)ことを示します。

●中心からの位置
→多次元尺度構成法(MDS)という手法を用いて、高次元のクラスタ中心の関係を2次元に投影しています。





ボタン『Distribution Plot』をクリックすると、「各クラスターに何個のデータが含まれているか」を表示するグラフが出力されます。





このセクションでは、plot_model関数、evaluate_model関数で、作成したモデルの分析を体験してきました。

それでは、また!








































 

コメント