Machine-learning-with-python-clustering-algorithms-k-means

提供:Dev Guides
移動先:案内検索

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()

PythonでのK-Mean実装

次に、クラスタの数を提供するとともに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()

K-Means Python Estimator

例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によって学習されたクラスター中心を示す次の画像を取得します。

Simple Digits Dataset

次のコード行は、学習したクラスターラベルとそれらに含まれる真のラベルを一致させます-

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クラスタリングは十分に機能しています。 次のアプリケーションで使用できます-

  • 市場セグメンテーション
  • ドキュメントのクラスタリング
  • 画像のセグメンテーション
  • 画像圧縮
  • 顧客セグメンテーション
  • 動的データの傾向の分析