Rumah >pembangunan bahagian belakang >Tutorial Python >Penjelasan terperinci tentang model k-means clustering dalam Python

Penjelasan terperinci tentang model k-means clustering dalam Python

王林
王林asal
2023-06-10 09:15:192086semak imbas

Penjelasan terperinci tentang model pengelompokan k-means dalam Python

Analisis kelompok ialah kaedah untuk menemui objek serupa dalam data. Dalam bidang seperti perlombongan data dan pembelajaran mesin, analisis kelompok digunakan secara meluas. k-means clustering adalah salah satu kaedah pengelompokan yang lebih biasa. Ia boleh membahagikan sampel dalam set data kepada k gugusan, dengan perbezaan dalaman terkecil dalam setiap kluster dan perbezaan antara kluster yang terbesar. Artikel ini akan memperkenalkan model k-means clustering dalam Python secara terperinci.

  1. Prinsip pengelompokan k-means

algoritma pengelompokan k-means ialah kaedah pengelompokan berulang. Langkah terasnya termasuk: memulakan pusat jisim, mengira jarak, mengemas kini pusat jisim, menentukan keadaan berhenti, dsb.

Pertama, anda perlu menyatakan bilangan kluster k. Kemudian sampel data k dipilih secara rawak sebagai centroid awal, dan untuk setiap sampel yang tinggal, ia diberikan kepada kelompok dengan centroid terdekat. Seterusnya, jumlah jarak kuasa dua semua titik data dalam setiap gugusan daripada pusat gugusan dikira sebagai ralat gugusan. Centroid setiap kluster kemudiannya dikemas kini, mengalihkannya ke tengah semua sampel dalam kluster itu. Ulangi langkah di atas sehingga ralat kurang daripada ambang tertentu atau had atas bilangan lelaran dicapai.

  1. Python melaksanakan k-means clustering

Dalam Python, perpustakaan sklearn menyediakan fungsi k-means clustering, yang merupakan cara paling mudah untuk menggunakan k-means clustering kaedah algoritma. Berikut mengambil set data iris sebagai contoh untuk menunjukkan cara menggunakan Python untuk melaksanakan k-means clustering

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

Laksanakan kod di atas untuk menjana imej yang serupa dengan yang berikut:

Dalam imej, merah, hijau dan biru Titik warna mewakili kelompok yang berbeza, dan simbol "x" hitam mewakili centroid setiap kelompok.

  1. Cara memilih nilai k optimum

Cara menentukan nilai k optimum ialah salah satu masalah yang lebih sukar dalam algoritma pengelompokan k-means. Dua kaedah biasa diperkenalkan di bawah: kaedah siku dan kaedah pekali kontur.

Kaedah siku: Mula-mula, tetapkan nilai k kepada integer yang lebih kecil dan hitung jumlah ralat kuasa dua (SSE) untuk setiap kelompok. Apabila nilai k meningkat, jumlah ralat kuasa dua berkurangan. Apabila nilai k meningkat ke tahap tertentu, SSE tidak lagi menurun dengan ketara. Pada masa ini, hubungan antara nilai k dan SSE dilukis ke dalam graf lengkung, yang mesti menunjukkan segmen garisan siku Segmen garisan berada pada kedudukan "siku" di sini, dan nilai k yang sepadan ialah bilangan gugusan yang optimum .

Contoh kod:

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

Kaedah pekali kontur: Pekali siluet menggabungkan dua faktor ketidakrelevanan antara kelompok dan kesamaan antara kelompok. Lebih besar nilai pekali siluet, lebih baik kesan pengelompokan. Proses pengiraan kaedah pekali siluet adalah seperti berikut:

Bagi setiap sampel, hitung jarak puratanya daripada semua sampel dalam kelompok yang sama (dipanggil a), dan kira jarak puratanya daripada semua sampel dalam kumpulan lain yang terdekat. kelompok (dipanggil a) untuk b).

Kira pekali siluet s setiap sampel, $s = rac {b-a} {maks(a, b)}$. Pekali siluet keseluruhan model ialah purata pekali siluet semua sampel.

Contoh kod:

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()
  1. K-bermaksud pertimbangan pengelompokan

K-bermaksud pengelompokan mempunyai pertimbangan berikut:

Permulaan nilai mempunyai kesan yang lebih besar pada keputusan Jika nilai awal tidak baik, anda mungkin mendapat hasil yang buruk.

Hasil pengelompokan bergantung pada metrik jarak yang dipilih, seperti jarak Euclidean, jarak Manhattan, dsb. Pilihan hendaklah dibuat mengikut situasi sebenar.

Outlier dalam set data mudah tertarik kepada gugusan yang salah, dan penyingkiran outlier harus dipertimbangkan.

Apabila pengedaran kelas sampel tidak seimbang, masalah biasa adalah untuk mendapatkan kluster dengan sifat yang sangat condong.

  1. Ringkasan

k-means clustering ialah algoritma pengelompokan yang digunakan secara meluas. Dalam Python, fungsi KMeans yang disediakan oleh perpustakaan sklearn boleh digunakan untuk melaksanakannya dengan cepat Pada masa yang sama, kaedah siku atau kaedah pekali siluet juga boleh digunakan untuk menentukan bilangan kelompok yang optimum. Pada masa yang sama, perhatian harus diberikan kepada pemilihan nilai k dan penetapan centroid awal semasa aplikasi.

Atas ialah kandungan terperinci Penjelasan terperinci tentang model k-means clustering dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn