Lesson 51 of 60 · python
Unsupervised Learning – K‑Means Clustering
Duration: 25 minutes
K‑Means Clustering
K‑Means groups unlabeled data into k clusters by minimizing intra‑cluster variance.
Algorithm steps
- Randomly initialize
kcentroids. - Assign each point to the nearest centroid.
- Re‑compute centroids as the mean of assigned points.
- Iterate steps 2‑3 until convergence.
Using scikit‑learn
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X_scaled)
df['cluster'] = clusters
Elbow method to find optimal k
inertia = []
K = range(1, 11)
for k in K:
km = KMeans(n_clusters=k, random_state=42)
km.fit(X_scaled)
inertia.append(km.inertia_)
plt.plot(K, inertia, 'bo-')
plt.xlabel('Number of clusters k')
plt.ylabel('Inertia (Sum of squared distances)')
plt.title('Elbow Method')
plt.show()
Visualizing clusters (2‑D using PCA)
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
proj = pca.fit_transform(X_scaled)
plt.scatter(proj[:,0], proj[:,1], c=clusters, cmap='viridis', s=50)
plt.title('K‑Means Clusters (PCA projection)')
plt.show()
Silhouette score (cluster quality)
from sklearn.metrics import silhouette_score
score = silhouette_score(X_scaled, clusters)
print('Silhouette Score:', score)
Limitations
- Assumes spherical clusters.
- Sensitive to scaling (hence standardize first).
- Requires pre‑specifying
k.