Python の K-means クラスタリング モデルの詳細説明
クラスター分析は、データ内の類似したオブジェクトを発見するために使用される手法です。データマイニングや機械学習などの分野では、クラスター分析が広く使用されています。 K-means クラスタリングは、より一般的なクラスタリング手法の 1 つです。データセット内のサンプルを k 個のクラスターに分割し、各クラスター内の内部差分が最小となり、クラスター間差分が最大になります。この記事では、Python の K-means クラスタリング モデルについて詳しく紹介します。
k-means クラスタリング アルゴリズムは、反復クラスタリング手法です。その中心となるステップには、重心の初期化、距離の計算、重心の更新、停止条件の決定などが含まれます。
まず、クラスター数 k を指定する必要があります。次に、k 個のデータ サンプルが初期重心としてランダムに選択され、残りの各サンプルについて、最も近い重心を持つクラスターに割り当てられます。次に、各クラスター内のすべてのデータ点のクラスターの重心からの距離の二乗の合計がクラスターの誤差として計算されます。次に、各クラスターの重心が更新され、そのクラスター内のすべてのサンプルの中心に移動します。誤差が特定のしきい値未満になるか、反復回数の上限に達するまで、上記の手順を繰り返します。
Python では、sklearn ライブラリが k-means クラスタリング関数を提供します。これは、k-means クラスタリングを使用する最も簡単な方法です。アルゴリズム、メソッド。以下では、例として虹彩データ セットを取り上げ、Python を使用して K 平均法クラスタリングを実装する方法を示します。
from sklearn.cluster import KMeans from sklearn.datasets import load_iris iris = load_iris() X = iris.data[:, :2] # 为了便于可视化,只取前两个特征 y = iris.target kmeans = KMeans(n_clusters=3) # 聚成3类 kmeans.fit(X) centroids = kmeans.cluster_centers_ # 质心 labels = kmeans.labels_ # 样本分类 # 绘制图形 import matplotlib.pyplot as plt colors = ['red', 'green', 'blue'] for i in range(len(X)): plt.scatter(X[i][0], X[i][1], c=colors[labels[i]]) for c in centroids: plt.scatter(c[0], c[1], marker='x', s=300, linewidths=3, color='black') plt.show()
上記のコードを実行して、次のような画像を生成します。画像、赤、緑、青 色の点はさまざまなクラスターを表し、黒い「x」記号は各クラスターの重心を表します。
最適な k 値を選択する方法エルボ法: まず、k 値をより小さい整数に設定し、各クラスターの二乗誤差の合計 (SSE) を計算します。 k の値が増加すると、二乗誤差の合計は減少します。 k 値が一定レベルまで増加すると、SSE は大幅に低下しなくなります。このとき、k 値と SSE の関係は曲線グラフに描かれますが、この曲線はエルボの線分を表す必要があります。この線分は「エルボ」の位置にあり、対応する k 値が最適なクラスター数になります。 。
コード例:
sse = [] for i in range(1, 11): kmeans = KMeans(n_clusters=i).fit(X) sse.append(kmeans.inertia_) # ineria_属性表示模型的误差平方和 plt.plot(range(1, 11), sse) plt.xlabel('K') plt.ylabel('SSE') plt.show()
シルエット係数法: シルエット係数は、クラスター内の無関連性とクラスター間の類似性の 2 つの要素を組み合わせます。シルエット係数の値が大きいほど、クラスタリング効果が高くなります。シルエット係数法の計算プロセスは次のとおりです。
各サンプルについて、同じクラスター (a と呼ばれる) 内のすべてのサンプルからの平均距離を計算し、最も近い他のクラスター内のすべてのサンプルからの平均距離を計算します。クラスター (b に対して a) と呼ばれます)。
各サンプルのシルエット係数 s、$s = rac {b-a} {max(a, b)}$ を計算します。モデル全体のシルエット係数は、すべてのサンプルのシルエット係数の平均です。
コード例:
from sklearn.metrics import silhouette_score sil_scores = [] for k in range(2, 11): kmeans = KMeans(n_clusters=k).fit(X) sil_score = silhouette_score(X, kmeans.labels_) # 计算轮廓系数 sil_scores.append(sil_score) plt.plot(range(2, 11), sil_scores) plt.xlabel('K') plt.ylabel('Silhouette Coefficient') plt.show()
最初の値が結果に大きく影響するため、初期値が適切でない場合、悪い結果が得られる可能性があります。
クラスタリングの結果は、ユークリッド距離、マンハッタン距離など、選択した距離メトリックによって異なります。実際の状況に応じて選択する必要があります。
データセット内の外れ値は間違ったクラスターに引き寄せられやすいため、外れ値の削除を検討する必要があります。
サンプル クラスの分布がアンバランスな場合、よくある問題は、極端に偏った属性を持つクラスターが得られることです。
概要以上がPython の K-means クラスタリング モデルの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。