Machine Learning Academy · Pelajaran

K-Means: Sentroid, Penugasan dan Langkah Kemas Kini

Pelajar akan menjejaki tiga lelaran K-Means secara manual, menugaskan titik kepada sentroid terdekat, mengira semula sentroid dan memerhatikan penumpuan pada plot serakan 2D.

Pelajaran 1 daripada 413 langkah

K-Means: Sentroid, Penugasan dan Langkah Kemas Kini ialah pelajaran Machine Learning Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Machine Learning Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Machine Learning Academy merangkumi sejumlah 4 pelajaran.

Apakah Pengelompokan K-Means?

K-Means ialah algoritma tanpa penyeliaan yang membahagikan n titik data kepada k kelompok yang tidak bertindih. Berbeza daripada pembelajaran terselia, tiada label — algoritma ini menemui struktur semata-mata berdasarkan nilai ciri. K-Means pantas, boleh diskalakan, dan digunakan secara meluas untuk pembahagian pelanggan, pemampatan imej, serta pengesanan anomali.

Algoritma Tiga Langkah

K-Means mengulangi tiga langkah sehingga penumpuan: 1) Mulakan — letakkan k sentroid secara rawak dalam ruang ciri. 2) Tugasan — tugaskan setiap titik kepada sentroid terdekat. 3) Kemas kini — alihkan setiap sentroid kepada min titik yang ditugaskan kepadanya. Gelung berhenti apabila tugasan tidak lagi berubah.

Mengira Jarak ke Sentroid

Dalam setiap langkah tugasan, jarak Euclidean daripada setiap titik ke setiap sentroid dikira. Sesuatu titik ditugaskan kepada sentroid dengan jarak terkecil. Bagi titik x dan sentroid c, jarak kuasa dua ialah sum((x_i - c_i)^2). Penggunaan jarak kuasa dua mengelakkan punca kuasa dua yang mahal dari segi pengiraan dan memberikan susunan yang sama.

import numpy as np

def assign_clusters(X, centroids):
    # X: (n, d), centroids: (k, d)
    distances = np.linalg.norm(X[:, np.newaxis] - centroids, axis=2)  # (n, k)
    return np.argmin(distances, axis=1)  # label for each point

X = np.array([[1, 2], [3, 4], [5, 6], [8, 8]])
centroids = np.array([[2, 2], [7, 7]])
labels = assign_clusters(X, centroids)
print(labels)  # [0, 0, 0, 1]

Langkah Kemas Kini: Mengira Semula Sentroid

Selepas tugasan dibuat, setiap sentroid dipindahkan ke min aritmetik semua titik yang kini berada dalam kelompoknya. Jika sesuatu kelompok menjadi kosong (tiada titik ditugaskan), sentroid itu biasanya dimulakan semula secara rawak atau dibuang. Peralihan berdasarkan min ini meminimumkan jumlah kuasa dua dalam kelompok (WCSS) — yang juga dipanggil inersia.

import numpy as np

def update_centroids(X, labels, k):
    d = X.shape[1]
    new_centroids = np.zeros((k, d))
    for c in range(k):
        points = X[labels == c]
        if len(points) > 0:
            new_centroids[c] = points.mean(axis=0)
    return new_centroids

X = np.array([[1, 2], [3, 4], [5, 6], [8, 8]])
labels = np.array([0, 0, 0, 1])
print(update_centroids(X, labels, k=2))

Menjejaki Penumpuan Secara Manual

Pertimbangkan empat titik 1D: 1, 2, 8, 9 dan k=2. Permulaan: sentroid = [1, 8]. Tugasan lelaran 1: 1→C0, 2→C0, 8→C1, 9→C1. Kemas kini lelaran 1: C0=1.5, C1=8.5. Tugasan lelaran 2: tidak berubah. Menumpu dalam 2 lelaran! Dalam dimensi yang lebih tinggi, penumpuan mungkin memerlukan lebih banyak langkah, tetapi logiknya sama.

Inersia: Mengukur Kekompakan Kelompok

Inersia (WCSS) ialah jumlah jarak kuasa dua antara setiap titik dengan sentroid kelompoknya. Inersia yang lebih rendah bermaksud kelompok yang lebih rapat dan kompak. K-Means meminimumkan inersia pada setiap langkah kemas kini, tetapi algoritma ini tidak dijamin menemukan minimum global — ia boleh terperangkap dalam optimum setempat bergantung pada permulaan.

from sklearn.cluster import KMeans
import numpy as np

X = np.array([[1, 2], [1, 4], [1, 0],
              [10, 2], [10, 4], [10, 0]])

km = KMeans(n_clusters=2, random_state=42)
km.fit(X)

print('Inertia:', km.inertia_)
print('Labels:', km.labels_)
print('Centroids:', km.cluster_centers_)

Permulaan K-Means++

Permulaan sentroid secara rawak sering menyebabkan penumpuan yang perlahan atau optimum setempat yang lemah. K-Means++ (lalai scikit-learn melalui init='k-means++') memilih sentroid permulaan dengan lebih bijak: sentroid pertama dipilih secara rawak, dan setiap sentroid berikutnya dipilih dengan kebarangkalian yang berkadar dengan jarak kuasanya dari sentroid terdekat yang telah dipilih. Ini menyebarkan titik permulaan dan secara konsisten menemukan penyelesaian yang lebih baik.

from sklearn.cluster import KMeans
import numpy as np

X = np.random.randn(300, 2)

# Default: k-means++ initialisation
km = KMeans(n_clusters=3, init='k-means++', n_init=10, random_state=0)
km.fit(X)
print('Inertia with k-means++:', round(km.inertia_, 2))

# Compare with random init
km_rand = KMeans(n_clusters=3, init='random', n_init=10, random_state=0)
km_rand.fit(X)
print('Inertia with random init:', round(km_rand.inertia_, 2))

Memvisualkan Tugasan Kelompok

Memplot tugasan kelompok pada serakan 2D menunjukkan pembahagian Voronoi — sempadan keputusan apabila sentroid terdekat bagi setiap titik berubah. Memplot sentroid sebagai bintang besar dan mewarnakan titik berdasarkan label kelompok menjadikan penumpuan lebih mudah difahami. Visualisasi ini juga menunjukkan apabila kelompok bertindih atau mempunyai saiz yang tidak sama.

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

X, _ = make_blobs(n_samples=300, centers=3, cluster_std=0.6, random_state=0)
km = KMeans(n_clusters=3, random_state=0)
labels = km.fit_predict(X)

plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='tab10', s=30)
plt.scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1],
            c='black', s=200, marker='*', label='Centroids')
plt.legend()
plt.title('K-Means Clusters')
plt.show()

Mulakan Semula Berbilang Kali dan n_init

Oleh sebab K-Means boleh menumpu kepada optimum setempat, scikit-learn menjalankan algoritma itu sebanyak n_init kali dengan benih rawak yang berbeza dan mengekalkan hasil dengan inersia paling rendah. Nilai lalai ialah n_init=10. Untuk set data kecil, 10 biasanya mencukupi; untuk set data besar atau sukar, anda boleh meningkatkannya kepada 20 atau 50. Sentiasa semak inersia akhir berbanding inersia larian terbaik untuk mendiagnosis penumpuan yang lemah.

from sklearn.cluster import KMeans
import numpy as np

X = np.random.randn(500, 5)

km = KMeans(n_clusters=4, n_init=20, random_state=0)
km.fit(X)

print('Best inertia over 20 runs:', round(km.inertia_, 2))
print('Number of iterations until convergence:', km.n_iter_)

Had K-Means

K-Means mempunyai beberapa kelemahan yang diketahui umum: 1) Menganggap kelompok berbentuk sfera — ia sukar menangani bentuk memanjang atau bulan sabit. 2) Sensitif terhadap pencilan — pencilan yang jauh menarik sentroid menjauhi min sebenar kelompok. 3) Memerlukan k terlebih dahulu — anda mesti mengetahui atau menganggar bilangan kelompok sebelum melakukan pemadanan. 4) Skala ciri penting — sentiasa piawaikan ciri sebelum menjalankan K-Means supaya pemboleh ubah berskala besar tidak mendominasi jarak.

Menjalankan K-Means dengan scikit-learn

Dalam amalan, penggunaan sklearn.cluster.KMeans ialah pendekatan standard. Parameter utama: n_clusters (k), init (lalai 'k-means++'), n_init, max_iter (lalai 300), dan random_state. Selepas pemadanan, km.labels_ mengandungi tugasan kelompok, km.cluster_centers_ menyimpan kedudukan sentroid, dan km.inertia_ melaporkan WCSS.

from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris

X, _ = load_iris(return_X_y=True)

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

km = KMeans(n_clusters=3, random_state=42)
km.fit(X_scaled)

print('Cluster sizes:', {i: (km.labels_ == i).sum() for i in range(3)})
print('Inertia:', round(km.inertia_, 2))

Semakan Pantas

Uji pemahaman anda tentang konsep pengelompokan K-Means daripada pelajaran ini.

Ulang Kaji Pelajaran

Dalam pelajaran ini, anda telah mempelajari: K-Means mengulangi langkah tugasan dan kemas kini sehingga keahlian kelompok menjadi stabil, inersia (WCSS) mengukur kekompakan dan diminimumkan oleh setiap kemas kini, serta permulaan K-Means++ dan mula semula berbilang kali membantu mengelakkan optimum setempat yang lemah. Seterusnya, kita akan meneroka cara memilih nilai k yang sesuai menggunakan kaedah siku dan skor siluet.

Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “K-Means: Sentroid, Penugasan dan Langkah Kemas Kini” percuma?

Ya — teks penuh “K-Means: Sentroid, Penugasan dan Langkah Kemas Kini” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Machine Learning Academy, tingkat taraf kepada CoddyKit PRO. Kursus Machine Learning Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “K-Means: Sentroid, Penugasan dan Langkah Kemas Kini”?

Pelajar akan menjejaki tiga lelaran K-Means secara manual, menugaskan titik kepada sentroid terdekat, mengira semula sentroid dan memerhatikan penumpuan pada plot serakan 2D. Anda berlatih Machine Learning Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Machine Learning Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Machine Learning Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “K-Means: Sentroid, Penugasan dan Langkah Kemas Kini” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Machine Learning Academy ini?

Ya. Setiap pelajaran Machine Learning Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. K-Means: Sentroid, Penugasan dan Langkah Kemas Kini
  2. Memilih K: Kaedah Siku dan Skor Siluet
  3. DBSCAN: Titik Teras, Titik Sempadan dan Hingar
  4. Pengelompokan untuk Pembahagian Pelanggan: Contoh Menyeluruh
← Kembali ke Machine Learning Academy