Choosing the right number of clusters (K) helps group data well. It makes sure clusters are clear and useful.
Choosing K (elbow method, silhouette score) in ML Python
from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score # Elbow method steps: # 1. For each K, fit KMeans and get inertia (sum of squared distances). # 2. Plot K vs inertia to find the 'elbow' point. # Silhouette score steps: # 1. For each K, fit KMeans and predict clusters. # 2. Calculate silhouette_score(X, labels). # 3. Choose K with highest silhouette score.
The elbow method looks for a point where adding more clusters doesn't improve much.
Silhouette score measures how well each point fits its cluster compared to others.
kmeans = KMeans(n_clusters=3, random_state=42) kmeans.fit(X) print(kmeans.inertia_)
labels = KMeans(n_clusters=4, random_state=42).fit_predict(X) score = silhouette_score(X, labels) print(score)
This code creates 3 groups of points, then tries K from 2 to 6 clusters. It prints inertia and silhouette scores for each K. The plots help find the best K by showing the elbow and highest silhouette score.
import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score # Create sample data: 3 groups around centers np.random.seed(42) X = np.vstack([ np.random.normal(loc=0, scale=0.5, size=(50, 2)), np.random.normal(loc=5, scale=0.5, size=(50, 2)), np.random.normal(loc=10, scale=0.5, size=(50, 2)) ]) inertias = [] sil_scores = [] K_range = range(2, 7) for k in K_range: kmeans = KMeans(n_clusters=k, random_state=42) labels = kmeans.fit_predict(X) inertias.append(kmeans.inertia_) sil_scores.append(silhouette_score(X, labels)) print("Inertia for K=2 to 6:", inertias) print("Silhouette scores for K=2 to 6:", sil_scores) # Plotting results plt.figure(figsize=(12,5)) plt.subplot(1,2,1) plt.plot(K_range, inertias, 'bo-') plt.xlabel('Number of clusters K') plt.ylabel('Inertia') plt.title('Elbow Method') plt.subplot(1,2,2) plt.plot(K_range, sil_scores, 'ro-') plt.xlabel('Number of clusters K') plt.ylabel('Silhouette Score') plt.title('Silhouette Scores') plt.tight_layout() plt.show()
The elbow point is where inertia stops decreasing quickly.
Silhouette score ranges from -1 to 1; closer to 1 means better clusters.
Use both methods together for better decision on K.
Choosing K helps find the right number of groups in data.
Elbow method looks at inertia to find a point of diminishing returns.
Silhouette score measures how well points fit their clusters.
Practice
K in clustering algorithms?Solution
Step 1: Understand the purpose of clustering
Clustering groups similar data points together to find patterns.Step 2: Identify the role of choosing K
Choosing K means deciding how many groups best represent the data structure.Final Answer:
To find the number of groups that best represent the data -> Option AQuick Check:
Choosing K = best data groups [OK]
- Picking K without checking data patterns
- Choosing too many clusters blindly
- Ignoring the meaning of clusters
labels with data X?Solution
Step 1: Check the correct import
The silhouette_score function is in sklearn.metrics, not sklearn.cluster.Step 2: Verify function parameters order
The function takes data first (X), then cluster labels (labels).Final Answer:
from sklearn.metrics import silhouette_score\nscore = silhouette_score(X, labels) -> Option CQuick Check:
Correct import and parameter order = from sklearn.metrics import silhouette_score score = silhouette_score(X, labels) [OK]
- Importing silhouette_score from wrong module
- Swapping data and labels in function call
- Using cluster module instead of metrics
from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score import numpy as np X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) kmeans = KMeans(n_clusters=2, random_state=42).fit(X) labels = kmeans.labels_ score = silhouette_score(X, labels) print(round(score, 2))
Solution
Step 1: Understand the data and clustering
The data has two clear groups around [1, x] and [10, x], so KMeans with 2 clusters fits well.Step 2: Calculate silhouette score
Silhouette score measures cluster quality; for well-separated clusters, it is close to 1. Running the code gives approximately 0.74.Final Answer:
0.74 -> Option BQuick Check:
Well-separated clusters give silhouette ~0.74 [OK]
- Expecting silhouette score to be 1.0 always
- Confusing silhouette with inertia
- Ignoring cluster separation in score
Solution
Step 1: Identify the problem with elbow method
If inertia decreases smoothly, no clear elbow means it's hard to pick K by this method.Step 2: Use alternative metric
Silhouette score measures cluster quality differently and can help find the best K when elbow is unclear.Final Answer:
Try silhouette score to find the best K instead -> Option AQuick Check:
Use silhouette when elbow is unclear [OK]
- Forcing a large K without reason
- Ignoring metrics and guessing K
- Picking K=1 without analysis
Solution
Step 1: Compare elbow and silhouette methods
Elbow method focuses on inertia reduction, which can miss subtle clusters; silhouette measures cluster quality and separation.Step 2: Match method to data nature
Since the dataset has 5 natural clusters, silhouette score's suggestion aligns better with true structure.Final Answer:
Choose K=5 because silhouette score better reflects cluster separation -> Option DQuick Check:
Silhouette score > elbow for true cluster count [OK]
- Blindly trusting elbow method over silhouette
- Choosing too few clusters ignoring data
- Overfitting by choosing too many clusters
Ready to prove it?
Pass the test and this pattern moves unknown
