Machine-learning-with-python-clustering-algorithms-k-means
ML-クラスタリングK-Meansアルゴリズム
K-Meansアルゴリズムの概要
K平均クラスタリングアルゴリズムは重心を計算し、最適な重心が見つかるまで繰り返します。 クラスターの数はすでにわかっていると想定しています。 また、 flat clustering アルゴリズムとも呼ばれます。 アルゴリズムによってデータから識別されたクラスターの数は、K-meansの「K」で表されます。
このアルゴリズムでは、データポイントと重心間の距離の2乗の合計が最小になるように、データポイントがクラスターに割り当てられます。 クラスター内の変動が少ないと、同じクラスター内でより類似したデータポイントにつながることを理解されたい。
K-Meansアルゴリズムの動作
私たちは、次のステップの助けを借りて、K-Meansクラスタリングアルゴリズムの動作を理解することができます-
- ステップ1 *-最初に、このアルゴリズムで生成する必要があるクラスターの数Kを指定する必要があります。
- ステップ2 *-次に、K個のデータポイントをランダムに選択し、各データポイントをクラスターに割り当てます。 簡単に言えば、データポイントの数に基づいてデータを分類します。
- ステップ3 *-クラスタ重心を計算します。
- ステップ4 *-次に、変化しないクラスターへのデータポイントの割り当てである最適な重心が見つかるまで、以下を繰り返し続けます。
- 4.1 -まず、データポイントと重心間の距離の2乗の合計が計算されます。
- 4.2 -ここで、各データポイントを他のクラスター(重心)より近いクラスターに割り当てる必要があります。
- 4.3 -最後に、そのクラスターのすべてのデータポイントの平均を取ることにより、クラスターの重心を計算します。
K-meansは Expectation-Maximization アプローチに従って問題を解決します。 Expectation-stepはデータポイントを最も近いクラスターに割り当てるために使用され、Maximization-stepは各クラスターの重心を計算するために使用されます。
K-meansアルゴリズムを使用している間、次のことに注意する必要があります-
- K-Meansなどのクラスタリングアルゴリズムを使用する場合、データポイント間の類似性を判断するために距離ベースの測定を使用するため、データを標準化することをお勧めします。
- K-Meansの反復的な性質と重心のランダムな初期化により、K-Meansは局所的な最適値にとどまり、グローバルな最適値に収束しない場合があります。 そのため、異なる重心の初期化を使用することをお勧めします。
Pythonでの実装
K-Meansクラスタリングアルゴリズムを実装する次の2つの例は、その理解を深めるのに役立ちます。
例1
k-meansの仕組みを理解するのは簡単な例です。 この例では、最初に4つの異なるブロブを含む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つの塊を含む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推定器によって選択されたクラスターの中心をプロットおよび視覚化できます-
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], 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平均クラスタリングを適用する別の例に移りましょう。 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クラスタリングは十分に機能しています。 次のアプリケーションで使用できます-
- 市場セグメンテーション
- ドキュメントのクラスタリング
- 画像のセグメンテーション
- 画像圧縮
- 顧客セグメンテーション
- 動的データの傾向の分析