概要
K-Meansは、最も人気のあるクラスタリングアルゴリズムのXNUMXつです。 クラスターへの中心点を持つことにより、その中心点までの距離に基づいて他の点をグループ化します。
K-Meansの欠点は、クラスターの数を選択する必要があることです。 K、ポイントをグループ化するアルゴリズムを実行する前。
K-Meansクラスタリングの詳細なガイドを読みたい場合は、以下をご覧ください。 「Scikit-Learnを使用したK-Meansクラスタリング」.
エルボー法とシルエット分析
Kの数を選択するために最も一般的に使用される手法は、 エルボー法 と シルエット分析.
Ksの選択を容易にするために、 イエローブリック ライブラリは、コードをforループと、通常4行のコードに書き込むプロットでラップします。
YupyterノートブックからYellowbrickを直接インストールするには、次のコマンドを実行します。
! pip install yellowbrick
すでにScikit-learnの一部であるおなじみのデータセットでどのように機能するかを見てみましょう。 虹彩 データセット。
最初のステップは、データセットをインポートすることです。 KMeans
および yellowbrick
ライブラリ、およびデータをロードします。
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer
iris = load_iris()
ここに注意してください、私たちはインポートします KElbowVisualizer
および SilhouetteVisualizer
から yellowbrick.cluster
、これらは、ElbowとSilhouetteの結果を視覚化するために使用するモジュールです。
データセットを読み込んだ後、 data
束のキー(辞書の拡張であるデータ型)は、クラスター化するポイントの値です。 数字が何を表しているのか知りたい場合は、 iris['feature_names']
.
アイリスデータセットには、「versicolor」、「virginica」、「setosa」のXNUMX種類のアイリスが含まれていることが知られています。 でクラスを検査することもできます iris['target_names']
検証します。
したがって、クラスター化する4つの機能があり、それらは、すでにわかっていることに従って3つの異なるクラスターに分離する必要があります。 ElbowMethodとSilhouetteAnalysisの結果がそれを裏付けるかどうかを見てみましょう。
まず、機能値を選択します。
print(iris['feature_names'])
print(iris['target_names'])
X = iris['data']
次に、を作成できます KMeans
モデル、 KElbowVisualizer()
メトリックが計算されるksの数とともに、そのモデルを受け取るインスタンス。この場合は、 2〜11 Ks。
その後、ビジュアライザーを使用してデータに適合させます fit()
とプロットを表示します show()
。 メトリックが指定されていない場合、ビジュアライザーは ねじれ メトリック。各ポイントから割り当てられた中心までの距離のXNUMX乗の合計を計算します。
model = KMeans(random_state=42)
elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)
elb_visualizer.show()
今、私たちはすでに持っています KMeansクラスタリングの歪みスコアエルボ この場合、ksの最適な数となる垂直線のマーキングを使用してプロットします。 4
.
クラスターの実際の数がわからない場合は、歪みメトリックを使用したエルボー法は最良の選択ではなかったようです。 シルエットはまた、4つのクラスターがあることを示しますか? これに答えるには、4つのクラスターと異なるビジュアライザーオブジェクトを持つモデルで最後のコードを繰り返す必要があります。
model_4clust = KMeans(n_clusters = 4, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)
sil_visualizer.show()
コードは 150つのセンターでの4サンプルのKMeansクラスタリングのシルエットプロット。 このクラスターを分析するには、シルエット係数(またはスコア)の値を確認する必要があります。その最良の値は1に近くなります。平均値は次のとおりです。 0.5
、縦線でマークされていますが、あまり良くありません。
また、クラスター間の分布も確認する必要があります。適切なプロットでは、クラスター化された領域または十分に分散されたポイントのサイズが類似しています。 このグラフには、3つの小さなクラスター(番号3、2、1)と0つの大きなクラスター(番号XNUMX)がありますが、これは期待した結果ではありません。
ベストプラクティス、業界で認められた標準、および含まれているチートシートを含む、Gitを学習するための実践的で実用的なガイドを確認してください。 グーグルGitコマンドを停止し、実際に 学ぶ それ!
3つのクラスターに対して同じプロットを繰り返して、何が起こるかを見てみましょう。
model_3clust = KMeans(n_clusters = 3, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)
sil_visualizer.show()
クラスターの数を変更することで、シルエットスコアが得られました 0.05
より高く、クラスターはよりバランスが取れています。 クラスターの実際の数がわからない場合は、両方の手法を実験して組み合わせることで、 3
2
Kの数として。
これは、結果を正しい方向に導くために、さまざまなメトリックの組み合わせと比較、データの視覚化、およびクラスターのさまざまな値の実験がどのように重要であるかの例です。 また、その分析を容易にするライブラリがあれば、そのプロセスにどのように役立つのでしょうか。