クラスタリングアルゴリズム-K-meansアルゴリズム
K-Meansアルゴリズムの概要
K-meansクラスタリングアルゴリズムは重心を計算し、最適な重心が見つかるまで繰り返します。クラスターの数はすでにわかっていることを前提としています。とも呼ばれますflat clusteringアルゴリズム。アルゴリズムによってデータから識別されたクラスターの数は、K-meansの「K」で表されます。
このアルゴリズムでは、データポイントと重心の間の距離の2乗の合計が最小になるように、データポイントがクラスターに割り当てられます。クラスター内の変動が少ないと、同じクラスター内でより類似したデータポイントが得られることを理解されたい。
K-Meansアルゴリズムの動作
次の手順を使用して、K-Meansクラスタリングアルゴリズムの動作を理解できます。
Step 1 −まず、このアルゴリズムで生成する必要のあるクラスターの数Kを指定する必要があります。
Step 2−次に、K個のデータポイントをランダムに選択し、各データポイントをクラスターに割り当てます。簡単に言うと、データポイントの数に基づいてデータを分類します。
Step 3 −これで、クラスターの重心が計算されます。
Step 4 −次に、変化しなくなったクラスターへのデータポイントの割り当てである最適な重心が見つかるまで、以下を繰り返します。
4.1 −最初に、データポイントと重心の間の距離の2乗の合計が計算されます。
4.2 −ここで、各データポイントを他のクラスター(重心)よりも近いクラスターに割り当てる必要があります。
4.3 −最後に、そのクラスターのすべてのデータポイントの平均をとることにより、クラスターの重心を計算します。
K-meansが続きます Expectation-Maximization問題を解決するためのアプローチ。期待ステップは、データポイントを最も近いクラスターに割り当てるために使用され、最大化ステップは、各クラスターの重心を計算するために使用されます。
K-meansアルゴリズムを使用している間、次のことに注意する必要があります-
K-Meansを含むクラスタリングアルゴリズムを使用する場合、そのようなアルゴリズムは距離ベースの測定を使用してデータポイント間の類似性を判断するため、データを標準化することをお勧めします。
K-Meansの反復性と重心のランダムな初期化により、K-Meansは局所最適に固執し、全体最適に収束しない場合があります。そのため、図心のさまざまな初期化を使用することをお勧めします。
Pythonでの実装
K-Meansクラスタリングアルゴリズムを実装する次の2つの例は、理解を深めるのに役立ちます。
例1
k-meansがどのように機能するかを理解するための簡単な例です。この例では、最初に4つの異なるblobを含む2Dデータセットを生成し、その後、k-meansアルゴリズムを適用して結果を確認します。
まず、必要なパッケージをインポートすることから始めます-
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
次のコードは、4つのblobを含む2Dを生成します-
from sklearn.datasets.samples_generator import make_blobs
X, y_true = make_blobs(n_samples=400, centers=4, cluster_std=0.60, random_state=0)
次に、次のコードはデータセットを視覚化するのに役立ちます-
plt.scatter(X[:, 0], X[:, 1], s=20);
plt.show()
次に、クラスターの数を提供するとともにKMeansのオブジェクトを作成し、モデルをトレーニングして、次のように予測を行います。
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)
これで、次のコードを使用して、k-means Python推定量によって選択されたクラスターの中心をプロットして視覚化できます-
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=20, cmap='summer')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='blue', s=100, alpha=0.9);
plt.show()
例2
単純な数字のデータセットにK-meansクラスタリングを適用する別の例に移りましょう。K-meansは、元のラベル情報を使用せずに、類似した数字を識別しようとします。
まず、必要なパッケージをインポートすることから始めます-
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
次に、sklearnから数字データセットをロードし、そのオブジェクトを作成します。このデータセットの行と列の数は、次のように見つけることもできます-
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
出力
(1797, 64)
上記の出力は、このデータセットに64個の機能を持つ1797個のサンプルがあることを示しています。
上記の例1で行ったようにクラスタリングを実行できます-
kmeans = KMeans(n_clusters=10, random_state=0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
出力
(10, 64)
上記の出力は、K-meansが64の機能を持つ10のクラスターを作成したことを示しています。
fig, ax = plt.subplots(2, 5, figsize=(8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks=[], yticks=[])
axi.imshow(center, interpolation='nearest', cmap=plt.cm.binary)
出力
出力として、k-meansによって学習されたクラスター中心を示す次の画像が得られます。
次のコード行は、学習したクラスターラベルを、それらに含まれる実際のラベルと一致させます-
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]
次に、次のように精度を確認できます。
from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)
出力
0.7935447968836951
上記の出力は、精度が約80%であることを示しています。
長所と短所
利点
以下は、K-Meansクラスタリングアルゴリズムのいくつかの利点です。
理解と実装は非常に簡単です。
変数の数が多い場合、K-meansは階層的クラスタリングよりも高速になります。
重心の再計算時に、インスタンスはクラスターを変更できます。
階層的クラスタリングと比較して、より緊密なクラスターはK-meansで形成されます。
短所
以下は、K-Meansクラスタリングアルゴリズムのいくつかの欠点です-
クラスターの数、つまりkの値を予測するのは少し難しいです。
出力は、クラスターの数(kの値)などの初期入力の影響を強く受けます。
データの順序は、最終出力に大きな影響を与えます。
再スケーリングに非常に敏感です。正規化または標準化によってデータを再スケーリングすると、出力は完全に変更されます。最終出力。
クラスターの幾何学的形状が複雑な場合、クラスタリングジョブを実行するのは適切ではありません。
K-Meansクラスタリングアルゴリズムのアプリケーション
クラスター分析の主な目標は次のとおりです。
使用しているデータから意味のある直感を得る。
クラスター化してから、さまざまなサブグループに対してさまざまなモデルが構築される場所を予測します。
上記の目標を達成するために、K-meansクラスタリングは十分に機能しています。以下の用途に使用できます-
市場セグメンテーション
ドキュメントクラスタリング
画像セグメンテーション
画像圧縮
顧客セグメンテーション
動的データの傾向を分析する