第6章 クラスタリングアルゴリズム K-means: 1. k-means: 教師なし分類 1. sklearn のクラスタリングアルゴリズム 1.1 sklearn.cluster.K-means 1.2 ハイパーパラメータ n_clusters=inert

1. K 平均法: 教師なし分類

クラスタリングと分類:

クラスタリングは教師なし学習方法であり、その目的は、データ サンプルを異なるグループに分割して、同じグループ内のサンプルは互いに類似し、異なるグループ間のサンプルは大きく異なるようにすることです。クラスタリング アルゴリズムは、データ ポイント間の類似性または距離に基づいて、データ ポイントを異なるクラスターに割り当てます。クラスタリング アルゴリズムでは、事前のラベルやカテゴリ情報は必要ありませんが、データ自体の特性に基づいてそれらをグループ化します。クラスタリングは、データの本質的な構造、類似性、パターンを発見するのに役立ち、データ探索、セグメンテーション、前処理などのタスクに非常に役立ちます。

分類は、既存のラベルまたはカテゴリ情報を使用してモデルをトレーニングし、新しい未知のデータ ポイントが属するカテゴリを予測する教師あり学習方法です。分類タスクの目標は、入力データを事前定義されたカテゴリにマッピングできるモデルを学習することです。分類アルゴリズムには、トレーニング データとして既知のラベルまたはカテゴリ情報が必要で、これらのラベルに基づいて分類ルールまたは決定境界を学習します。一般的な分類アルゴリズムには、デシジョン ツリー、サポート ベクター マシン、ニューラル ネットワークが含まれます。

クラスタリングはデータ探索、セグメンテーション、前処理などのタスクによく使用され、データの類似性やグループ構造を発見するのに役立ちます。分類は、新しい未知のデータを分類するための予測および識別タスクによく使用されます。

1.sklearnのクラスタリングアルゴリズム

2 つの表現形式: クラスと関数
ここに画像の説明を挿入します

  • K 平均法の場合​​:
    クラスター: 同じクラスターは 1 つのタイプです。
    重心: データのクラスターの水平座標と垂直座標の平均です。
    プロセス: k 個のサンプルを初期重心としてランダムに選択します。サイクルの開始: 各サンプル ポイントが割り当てられます。 k 個のクラスターを生成し、クラスターごとに新しい重心を計算し、重心位置が変化しなくなった時点でクラスタリングが完了します。

  • サンプルから重心までの距離の測定:
    ここに画像の説明を挿入します
    n は特徴の数を表し、たとえば 2 次元データの x と y の場合、n=2、x はサンプル点、u は重心を表します。

K 平均法でユークリッド距離を使用する場合、すべてのサンプル点の距離の合計は次のようになります。前者はここに画像の説明を挿入します
クラスター内の平方和であり、後者は全平方和です。K 平均法では、クラスター内の平方和が最小となる重心を追跡します。これは、損失関数ではなく、k-means のモデル評価メトリックです。

1.1 sklearn.cluster.K-means

コード:

  1. データセットを作成します。
from sklean.datasets import make_blobs as mb
import matplotlib.pyplot as pt 
x,y=mb(n_samples=500,n_features=2,centers=4,random_sate=1)
print(x.shape)

fig,ax1=pt.subplots(1)//fig是窗口,ax1是子图
ax1.scatter(x[:,0],x[:,1],marker='o',s=8)//点的形状,点的大小
print(pt.show())

color=["red","pink","orange","gray"]
fig,ax1=pt.subplots(1)

//聚类算法结束应该的样子
for i in range(4):
	ax1.scatter(x[y==i],x[y==i,1],marker='o',s=8,c=color[i])
print(pt.show())
  1. クラスタリングを実行する
from sklean.cluster import KMeans as km
import matplotlib.pyplot as pt 
n_clsters=3
cluster=km(n_clusters,random_state=0).fix(x)
y_pred=cluster_.labels_
print(y_pred)//查看y的所有值

center=cluster.cluster_centers_//质心
print(center)
print(center.shape)

d=cluster.inertia_//距离平方和,越小越好
print(d) //此时为1903

color=["red","pink","orange","gray"]
fig,ax1=pt.subplots(1)
for i in range(n_clusters):
   ax1.scatter(x[y_pred==i],x[y_pred==i,1],marker='o',s=8,c=color[i])
ax1.scatter(center[:,0],center[:,1],maeker='x',s=18,c="black")
print(pt.show())

結果は次のようになります: ここに画像の説明を挿入します
n_clusters=3 が 4 に変更された場合: d=908; n_clusters=3 が 5 に変更された場合: d=733。
ただし、数値が小さければ小さいほど良いというわけではありません。

1.2 ハイパーパラメータ n_clusters=inertia を選択するにはどうすればよいですか?

  • イナーシャは小さいほうが良いのでしょうか?
    いいえ。
    まず、制限がありません。慣性が小さいほど優れており、0 が最適であることだけがわかっていますが、慣性が小さいことがモデルの限界に達しているかどうか、さらに改善し続けることができるかどうかはわかりません。
    次に、計算が特徴量の影響を受けやすく、データ次元が大きい場合、lnertia の計算量は次元の呪いに陥り、計算量が爆発的に増加するため、モデルを繰り返し評価するのには適していません。
    第三に、慣性はデータの分布に関する仮定を行います。データが凸分布を満たす (つまり、数値が 2 次元平面画像上で凸関数のように見える) と仮定し、データが等方性であると仮定します。データの属性が異なる方向で同じ意味を表すことを意味します。しかし、実際のデータはそうでないことがよくあります。したがって、評価指標として慣性を使用すると、一部の細長いクラスター、環状クラスター、または不規則な形状の多様体に対してクラスタリング アルゴリズムのパフォーマンスが低下します。
    ここに画像の説明を挿入します
    効果があるのはクラスターのクラスターだけであり、他のクラスターは誤って区別されやすくなります。

したがって、実際のラベルが不明な場合は、一般に輪郭係数が選択されます。

1.3 シルエット係数 Silent_score

  • シルエット係数:
    ここに画像の説明を挿入します
    ファミリ
    ここに画像の説明を挿入します
    内のほとんどのサンプルが比較的高い輪郭係数を持っている場合、そのファミリーの全体的な輪郭係数はより高く、データ セット全体の平均輪郭係数が高いほど、クラスタリングは適切です。多くのサンプル点のシルエット係数が低い、または負の値さえある場合、クラスタリングは不適切であり、クラスタリング ハイパーパラメータ K の設定が大きすぎるか小さすぎる可能性があります。

プロファイル係数は以下を同時に測定できます。

  1. 白色体と同じファミリー内の他のサンプルに対するサンプルの類似度 a は、サンプルと同じ船内の他のすべての点の間の平均距離に等しい
  2. サンプルと他のクラスターのサンプル間の類似度 b は、サンプルと次に近いクラスター内のすべての点の間の平均距離に等しくなります。クラスタリングの要件によれば、「クラスター内の差異は小さく、クラスターの外部の差異は小さい」 「大きい」という場合は、b が常に a より大きく、大きいほど良いと考えられます。

等高線係数コード:

silhouette_samples(x,y_pred)//每个样本点的轮廓系数
silhouette_score(x,y_pred)
//y_pred就是cluster_.labels_

結果:
ここに画像の説明を挿入します
等高線係数の選択に基づいて、n_clusters=4

1.4 その他の評価指標

最も一般的に使用されるシルエット係数に加えて、Calinski-Harabaz 指数 (CHI、分散比標準としても知られる)、Davies-Bouldin 指数、および分割行列も使用できます。
例えば:
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_53982314/article/details/131261650