K はクラスタリングを意味します – はじめに
K 平均法クラスタリング です 教師なし機械学習 アルゴリズム。ラベルのないデータセットを異なるクラスターにグループ化します。この記事は、k 平均クラスタリングの基礎と仕組みを実装とともに探ることを目的としています。
目次
- K 平均法クラスタリングとは何ですか?
- K-means クラスタリングの目的は何ですか?
- K-means クラスタリングはどのように機能するのでしょうか?
- Python での K-Means クラスタリングの実装
K 平均法クラスタリングとは何ですか?
教師なし機械学習 これは、ラベル付けされていない、機密扱いされていないデータを使用するようにコンピューターに学習させ、アルゴリズムが監視なしでそのデータを操作できるようにするプロセスです。事前のデータ トレーニングがなければ、この場合のマシンの仕事は、並べ替えられていないデータを類似性、パターン、バリエーションに従って整理することです。
K はクラスタリングを意味し、クラスターの中心からの距離に応じてデータ ポイントを K 個のクラスターの 1 つに割り当てます。まず、空間内のクラスターの重心をランダムに割り当てます。次に、各データ ポイントは、クラスターの重心からの距離に基づいてクラスターの 1 つに割り当てられます。各ポイントをクラスターの 1 つに割り当てた後、新しいクラスターの重心が割り当てられます。このプロセスは、適切なクラスターが見つかるまで繰り返し実行されます。分析では、クラスターの数が事前に与えられていると仮定し、グループの 1 つに点を配置する必要があります。
場合によっては、K が明確に定義されていないため、K の最適な数を考える必要があります。K とは、クラスタリングが最適に実行され、データが十分に分離されていることを意味します。データポイントが重なっている場合、このクラスタリングは適切ではありません。 K Means は、他のクラスタリング手法と比較して高速です。これにより、データ ポイント間に強力な結合が提供されます。 K Means クラスターは、クラスターの品質に関する明確な情報を提供しません。クラスター重心の初期割り当てが異なると、異なるクラスターが生成される可能性があります。また、K Means アルゴリズムはノイズの影響を受けやすくなります。極小値に陥っている可能性があります。
K-means クラスタリングの目的は何ですか?
の目標 クラスタリング 人口を分割するか、 セット 各グループ内のデータ ポイントがより多くなるように、データ ポイントをいくつかのグループに分割します。 匹敵します 相互に一致し、他のグループ内のデータ ポイントとは異なります。これは本質的に、相互にどれだけ似ているか、どれだけ異なっているかに基づいて物事をグループ化するものです。
K-means クラスタリングはどのように機能するのでしょうか?
特定の特徴とそれらの特徴の値 (ベクトルなど) を備えた項目のデータ セットが与えられます。タスクは、それらのアイテムをグループに分類することです。これを達成するために、教師なし学習アルゴリズムである K 平均法アルゴリズムを使用します。アルゴリズム名の「K」は、アイテムを分類するグループ/クラスターの数を表します。
(項目を n 次元空間内の点として考えると分かりやすくなります)。アルゴリズムは、アイテムを類似性のある k 個のグループまたはクラスターに分類します。その類似性を計算するには、ユークリッド距離を測定値として使用します。
アルゴリズムは次のように機能します。
- まず、平均値またはクラスター重心と呼ばれる k 点をランダムに初期化します。
- 各項目を最も近い平均値に分類し、そのクラスターにこれまで分類された項目の平均である平均値の座標を更新します。
- このプロセスを指定された反復回数だけ繰り返し、最後にクラスターが完成します。
上記の点は、そこに分類された項目の平均値であるため、平均値と呼ばれます。これらの手段を初期化するには、多くのオプションがあります。直感的な方法は、データセット内のランダムな項目で平均を初期化することです。別の方法は、データセットの境界間のランダムな値で平均を初期化することです (特徴の場合) バツ、 項目の値は [0,3] です。平均値を次の値で初期化します。 バツ [0,3] で)。
上記のアルゴリズムの擬似コードは次のとおりです。
Initialize k means with random values -->指定された反復回数: --> 項目を反復処理します: --> 各平均値を使用して項目のユークリッド距離を計算して、項目に最も近い平均値を見つけます。 --> 項目を平均値に割り当てます。 --> 平均値を更新します。それをそのクラスター内の項目の平均にシフトします>>'Python での K-Means クラスタリングの実装
例1
必要なライブラリをインポートする
輸入しております ナンピー 統計計算の場合、 マットプロットリブ プロットするには グラフ、 および sklearn.datasets からの make_blobs。
Python3
import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.datasets> import> make_blobs> |
make_blobs を使用してカスタム データセットを作成し、プロットします。
Python3
X,y> => make_blobs(n_samples> => 500> ,n_features> => 2> ,centers> => 3> ,random_state> => 23> )> fig> => plt.figure(> 0> )> plt.grid(> True> )> plt.scatter(X[:,> 0> ],X[:,> 1> ])> plt.show()> |
出力 :
クラスタリングデータセット
ランダムな重心を初期化する
このコードは、K-means クラスタリング用に 3 つのクラスターを初期化します。ランダムなシードを設定し、指定された範囲内でランダムなクラスター中心を生成し、空のクラスターを作成します。 リスト 各クラスターのポイント数。
Python3
k> => 3> clusters> => {}> np.random.seed(> 23> )> for> idx> in> range> (k):> > center> => 2> *> (> 2> *> np.random.random((X.shape[> 1> ],))> -> 1> )> > points> => []> > cluster> => {> > 'center'> : center,> > 'points'> : []> > }> > > clusters[idx]> => cluster> > clusters> |
出力:
{0: {'center': array([0.06919154, 1.78785042]), 'points': []}, 1: {'center': array([ 1.06183904, -0.87041662]), 'points': []}, 2: {'center': array([-1.11581855, 0.74488834]), 'points': []}} データ点を使用してランダム初期化中心をプロットする
Python3
plt.scatter(X[:,> 0> ],X[:,> 1> ])> plt.grid(> True> )> for> i> in> clusters:> > center> => clusters[i][> 'center'> ]> > plt.scatter(center[> 0> ],center[> 1> ],marker> => '*'> ,c> => 'red'> )> plt.show()> |
出力 :
ランダムな中心を持つデータ点
プロットには、データ ポイント (X[:,0]、X[:,1]) の散布図がグリッド線とともに表示されます。また、K 平均法クラスタリング用に生成された初期クラスター中心 (赤い星) もマークします。
ユークリッド距離を定義する
Python3
def> distance(p1,p2):> > return> np.sqrt(np.> sum> ((p1> -> p2)> *> *> 2> ))> |
クラスターセンターを割り当てて更新する関数を作成します。
E ステップはデータ ポイントを最も近いクラスター中心に割り当て、M ステップは K 平均法クラスタリングで割り当てられたポイントの平均に基づいてクラスター中心を更新します。
Python3
#Implementing E step> def> assign_clusters(X, clusters):> > for> idx> in> range> (X.shape[> 0> ]):> > dist> => []> > > curr_x> => X[idx]> > > for> i> in> range> (k):> > dis> => distance(curr_x,clusters[i][> 'center'> ])> > dist.append(dis)> > curr_cluster> => np.argmin(dist)> > clusters[curr_cluster][> 'points'> ].append(curr_x)> > return> clusters> > #Implementing the M-Step> def> update_clusters(X, clusters):> > for> i> in> range> (k):> > points> => np.array(clusters[i][> 'points'> ])> > if> points.shape[> 0> ]>>> 0> :> > new_center> => points.mean(axis> => 0> )> > clusters[i][> 'center'> ]> => new_center> > > clusters[i][> 'points'> ]> => []> > return> clusters> |
ステップ 7: データポイントのクラスターを予測する関数を作成する
Python3
def> pred_cluster(X, clusters):> > pred> => []> > for> i> in> range> (X.shape[> 0> ]):> > dist> => []> > for> j> in> range> (k):> > dist.append(distance(X[i],clusters[j][> 'center'> ]))> > pred.append(np.argmin(dist))> > return> pred> |
クラスター中心の割り当て、更新、予測
Python3
clusters> => assign_clusters(X,clusters)> clusters> => update_clusters(X,clusters)> pred> => pred_cluster(X,clusters)> |
予測されたクラスター中心を使用してデータ ポイントをプロットする
Python3
plt.scatter(X[:,> 0> ],X[:,> 1> ],c> => pred)> for> i> in> clusters:> > center> => clusters[i][> 'center'> ]> > plt.scatter(center[> 0> ],center[> 1> ],marker> => '^'> ,c> => 'red'> )> plt.show()> |
出力 :
K 平均法クラスタリング
プロットには、予測されたクラスターによって色付けされたデータ ポイントが表示されます。赤いマーカーは、K 平均法クラスタリング アルゴリズムの E-M ステップ後の更新されたクラスター中心を表します。
例 2
必要なライブラリをインポートする
Python3
import> pandas as pd> import> numpy as np> import> seaborn as sns> import> matplotlib.pyplot as plt> import> matplotlib.cm as cm> from> sklearn.datasets> import> load_iris> from> sklearn.cluster> import> KMeans> |
データセットをロードする
Python3
X, y> => load_iris(return_X_y> => True> )> |
エルボ法
データを分割する理想的なグループ数を見つけることは、教師なしアルゴリズムの基本段階です。この k の理想的な値を計算するための最も一般的な手法の 1 つは、エルボー アプローチです。
Python3
#Find optimum number of cluster> sse> => []> #SUM OF SQUARED ERROR> for> k> in> range> (> 1> ,> 11> ):> > km> => KMeans(n_clusters> => k, random_state> => 2> )> > km.fit(X)> > sse.append(km.inertia_)> |
エルボー グラフをプロットして、最適なクラスター数を見つけます。
Python3
sns.set_style(> 'whitegrid'> )> g> => sns.lineplot(x> => range> (> 1> ,> 11> ), y> => sse)> g.> set> (xlabel> => 'Number of cluster (k)'> ,> > ylabel> => 'Sum Squared Error'> ,> > title> => 'Elbow Method'> )> plt.show()> |
出力:
エルボ法
上のグラフから、k=2 および k=3 でエルボのような状況が観察できます。したがって、K=3 を考慮します。
Kmeans クラスタリング モデルを構築する
Python3
kmeans> => KMeans(n_clusters> => 3> , random_state> => 2> )> kmeans.fit(X)> |
出力:
KMeans KMeans(n_clusters=3, random_state=2)
クラスターの中心を見つける
Python3
kmeans.cluster_centers_> |
出力:
array([[5.006 , 3.428 , 1.462 , 0.246 ], [5.9016129 , 2.7483871 , 4.39354839, 1.43387097], [6.85 , 3.07368421, 5.74210526, 2.07105263]])
クラスター グループを予測します。
Python3
pred> => kmeans.fit_predict(X)> pred> |
出力:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1], dtype=int32)
データ点を使用してクラスターの中心をプロットする
Python3
plt.figure(figsize> => (> 12> ,> 5> ))> plt.subplot(> 1> ,> 2> ,> 1> )> plt.scatter(X[:,> 0> ],X[:,> 1> ],c> => pred, cmap> => cm.Accent)> plt.grid(> True> )> for> center> in> kmeans.cluster_centers_:> > center> => center[:> 2> ]> > plt.scatter(center[> 0> ],center[> 1> ],marker> => '^'> ,c> => 'red'> )> plt.xlabel(> 'petal length (cm)'> )> plt.ylabel(> 'petal width (cm)'> )> > plt.subplot(> 1> ,> 2> ,> 2> )> plt.scatter(X[:,> 2> ],X[:,> 3> ],c> => pred, cmap> => cm.Accent)> plt.grid(> True> )> for> center> in> kmeans.cluster_centers_:> > center> => center[> 2> :> 4> ]> > plt.scatter(center[> 0> ],center[> 1> ],marker> => '^'> ,c> => 'red'> )> plt.xlabel(> 'sepal length (cm)'> )> plt.ylabel(> 'sepal width (cm)'> )> plt.show()> |
出力:
K 平均法クラスタリング
左側のサブプロットには、花弁の長さと花弁の幅がクラスターごとに色付けされたデータ ポイントとともに表示され、赤いマーカーは K 平均クラスターの中心を示します。右側のサブプロットも同様にがく片の長さとがく片の幅を示しています。
結論
結論として、K 平均法クラスタリングは、ラベルのないデータセットをグループ化するための強力な教師なし機械学習アルゴリズムです。その目的は、データをクラスターに分割し、類似したデータ ポイントを同じグループの一部にすることです。このアルゴリズムはクラスターの重心を初期化し、データ ポイントを最も近い重心に繰り返し割り当て、各クラスター内のポイントの平均に基づいて重心を更新します。
よくある質問 (FAQ)
1. データ分析のための K 平均法クラスタリングとは何ですか?
K 平均法は、類似性に基づいてデータセットを重複しない「k」個の個別のサブセット (クラスター) に分割し、各クラスター内の分散を最小限に抑えることを目的とした分割方法です。
2.実際の K 平均法の例は何ですか?
マーケティングにおける顧客のセグメント化。K-means は購買行動に基づいて顧客をグループ化し、企業がさまざまなセグメントに合わせてマーケティング戦略を調整できるようにします。
3. K-means クラスタリング モデルとはどのような種類のデータですか?
K 平均法は、データ点間の距離の概念が意味を持つ数値データに適しています。これは通常、連続変数に適用されます。
4.予測には K 平均法が使用されますか?
K 平均法は主に、類似したデータ ポイントのクラスタリングとグループ化に使用されます。新しいデータのラベルは予測されません。類似性に基づいてそれらを既存のクラスターに割り当てます。
5.K-means クラスタリングの目的は何ですか?
目的は、データを「k」個のクラスターに分割し、クラスター内の分散を最小限に抑えることです。各クラスター内のデータ ポイントが他のクラスターのデータ ポイントよりも相互に類似するグループを形成しようとします。