機械学習実践チュートリアル (12): クラスタリング アルゴリズム Kmeans

クラスタリングの概念

クラスタリングは教師なし機械学習手法であり、主にデータセット内で類似したサンプルを見つけてグループ化することで、データ内のパターンと構造を発見します。クラスタリング アルゴリズムでは、データを同様の特性を持つグループに分割でき、各グループはクラスターと呼ばれます。

一般的なクラスタリング アルゴリズムには次のものがあります。

  1. K 平均法クラスタリング アルゴリズム: 最も一般的なクラスタリング アルゴリズムの 1 つです。その目標は、データ セットを K 個のクラスタに分割し、各クラスタ内のデータ ポイントの類似性が最も高く、異なるクラスタ間での差異が最大になるようにすることです。

  2. 階層的クラスタリング アルゴリズム: このアルゴリズムは、完全なクラスタリング構造が形成されるまで、データ セット内のサンプルを徐々にマージし、それによってクラスタリング ツリーを形成します。

  3. 密度クラスタリング アルゴリズム: データ ポイントの密度に基づくクラスタリング アルゴリズムで、データ ポイントを密な領域と疎な領域に分割し、密な領域をクラスターとして扱います。

  4. 平均シフト クラスタリング アルゴリズム: このアルゴリズムは、カーネル密度推定を使用してデータ ポイントの極大値を見つけ、クラスターの重心を決定します。

  5. DBSCAN クラスタリング アルゴリズム: データ セット内の密度に基づいてクラスターの数と形状を決定し、あらゆる形状のクラスターを識別できます。

K 平均法の概要

K 平均法は、距離メトリックに基づくクラスタリング アルゴリズムであり、その主なアイデアは、データ セットを K 個のクラスターに分割し、各クラスターには最も近い K 個のデータ ポイントが含まれることです。このアルゴリズムは、クラスターの中心点を繰り返し最適化することでクラスター分割を継続的に調整し、最終的に最適なクラスター分割結果のセットを取得します。

平たく言えば、K 平均法アルゴリズムは、賢いと思われる小学生が「数字を当てる」ゲームをしているようなものです。まず数字を推測し、次に推測と正解の間の距離に基づいて、答えが存在する数字の範囲を 2 つの領域に分割します (答えが近いほど、距離は小さくなります)。次に、デジタル範囲が K 個の領域に分割されるまでこのプロセスを繰り返し、各領域の中心点を記録します。最後に、各数値がどの領域 (またはクラスター) に属するかを示し、各領域の中心点を示します。

K 平均法アルゴリズムでは、クラスターの数 K を指定し、最初の中心点として K 個のデータ点をランダムに選択する必要があります。次に、各中心点から各データ点までの距離を計算し、最も近いクラスターに分類します。次に、各クラスターの中心点を再計算し、クラスターの中心点が変化しなくなるまで上記のプロセス (新しい中心を計算した後、各点をクラスターに再分類する) を繰り返します。最終的に、K 個のクラスターが得られます。各クラスターには最も近いデータ ポイントのセットが含まれ、各データ ポイントは 1 つのクラスターのみに属します。

K-meansアルゴリズムの初期中心点はランダムに選択されるため、異なるクラスター分割結果が得られる可能性があることに注意してください。より良い結果を得るために、アルゴリズムを複数回実行し、最適なクラスター分割結果が選択されます。

K 平均法と KNN の違い

K-Means と K-NN は 2 つの異なる機械学習アルゴリズムであり、違いは次のとおりです。

  1. K-Means は、データ セットを K 個のクラスターに分割し、各データ ポイントを最も近いクラスター中心に割り当てるクラスタリング アルゴリズムです。K-NN は、最近傍データ ポイントのラベルに基づいて新しいデータ ポイントのラベルを予測する分類アルゴリズムです。

  2. K-Means ではクラスター数 K を指定する必要がありますが、K-NN ではその必要がありません。

  3. K-Means はラベル付きデータを必要としない教師なし学習アルゴリズムですが、K-NN はラベル付きデータを必要とする教師あり学習アルゴリズムです。

  4. K-Means はユークリッド距離を使用してデータ ポイント間の類似性を計算しますが、K-NN はマンハッタン距離、コサイン類似度などのさまざまな距離尺度を使用できます。

  5. K-Means は大規模なデータを処理するときにパフォーマンスの問題が発生する可能性がありますが、K-NN は大規模なデータを簡単に処理できます。

全体として、K-Means と K-NN は、さまざまな問題やデータセットに適した 2 つの異なる機械学習アルゴリズムです。

Kmeansの計算プロセス

(1) c クラスの初期中心を適切に選択します;
(2) k 回の反復で、任意のサンプルについて、c の各中心までの距離 (ユークリッド距離) を見つけ、サンプルを中心までの距離が短いクラスに分類します
。 3) クラスの中心値を更新するには、mean などのメソッドを使用します。
(4) すべての c クラスターの中心について、(2) (3) の反復方法を使用して更新した後も値が変わらない場合は、反復終了、そうでない場合は続行します。反復。

4 つのデータ セットがあり、各データ セットには 2 つの次元があり、それらを 2 つのカテゴリにクラスタリングして視覚化するとします。
A = (1, 1)、B = (2, 1)、C = (4, 3)、D = (5, 4) A=(1,1)、B=(2,1)、C=( 4,3)、D=(5,4)=( 1 1 ) B=( 2 1 ) C=( 4 3 ) D=( 5 4 )
ここに画像の説明を挿入します
2 つの星の位置が初期中心として選択されたと仮定します。c 1 = ( 1 , 1 ) 、 c 2 = ( 2 , 1 ) c_1=(1,1),c_2=(2,1)c1=( 1 1 ) c2=( 2 1 )、各点から初期中心までの距離を計算し、ユークリッド距離を使用して 2 つの初期中心から 4 点の距離をそれぞれ取得し、それらを最も近いクラスに分類します。
ここに画像の説明を挿入します

D 0 1 行目は ABCD ~ c 1 の 4 点の例、2 行目は ABCD ~ c 2 の 4 点の例を示し、ユークリッド距離の公式を使用して計算されます。 c 1 このグループの例は 3.61、c 2 に対するこのグループの例は 2.83 で、最初の反復 C がグループ − 2 D^0 に属することを示します。D^0 の最初の行は 4 つの点の例を表しますABCD から c1 へ、2 行目は ABCD の 4 点を表します。c2 への例はユークリッド距離公式を使用して計算されます。C を例にとると、グループ c1 への例は 3.61、グループ c2 への例は 2.83 です。最初の反復 C がグループ 2 に属することを示します。D0 1 行目はAB CDc14 点、2 行目はAB CDc24 点。この例はユークリッド距離の公式を使用して計算されます。Cを例にとると、 toc1このグループの例は3.61グループc 2の例2.83で最初の反復C がグループに属していることを示しています2

比較して分類します。そして、平均化手法を使用して中心位置を更新します。
ここに画像の説明を挿入します
group1 に属する点は 1 つだけなので、 1 回の更新後の中心位置c 1 = ( 1 , 1 ) c_1=(1,1) になります。c1=( 1 1 )、およびc 2 = ( 11 3 , 8 3 ) c_{2} = (\frac{11}{3}, \frac{8}{3})c2=(31138)

group2 の新しい中心点はx = ( x 1 + x 2 + x 3 ) 3 = ( 2 + 4 + 5 ) 3 = 11 3 x={(x1+x2+x3)\over 3} ={(2) です。 +4+5)\over3}={11\over3}バツ=3( x 1 + x 2 + x 3 )=3( 2 + 4 + 5 )=311
y = ( y 1 + y 2 + y 3 ) 3 = ( 1 + 3 + 4 ) 3 = 8 3 y={(y1+y2+y3)\over 3} ={(1+3+4)\over3 }={8\over3}y=3( y1 + y2 + y3 ) _ _ _=3( 1 + 3 + 4 )=38
ここに画像の説明を挿入します
更新された位置中心から各点の距離を再度計算します。

ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
繰り返しを続けますが
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
、この時点で最後のカテゴリマークから変化がなければ停止しても構いません。

Kmeans のプログラミング実装

#%%

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 生成随机数据
X, y = make_blobs(n_samples=300, centers=4, random_state=42)

# 使用KMeans算法进行聚类
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans.fit(X)

# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], marker='*', s=150, color='red')
plt.show()

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/liaomin416100569/article/details/130493415