Bird
Raised Fist0
ML Pythonml~8 mins

K-Means clustering in ML Python - Model Metrics & Evaluation

Choose your learning style10 modes available
Metrics & Evaluation - K-Means clustering
Which metric matters for K-Means clustering and WHY

K-Means is an unsupervised method. It groups data points into clusters without labels. So, we cannot use accuracy or precision like in labeled tasks.

Instead, we use metrics that measure how well the clusters fit the data. Common metrics are:

  • Inertia (Within-Cluster Sum of Squares): Measures how close points are to their cluster center. Lower is better.
  • Silhouette Score: Measures how similar a point is to its own cluster compared to other clusters. Scores range from -1 to 1. Higher is better.
  • Calinski-Harabasz Index: Ratio of between-cluster variance to within-cluster variance. Higher means better separated clusters.

These metrics help us decide if the clusters are tight and well separated.

Confusion matrix or equivalent visualization

K-Means does not use a confusion matrix because it is unsupervised and has no true labels.

Instead, we visualize clusters with scatter plots showing points colored by cluster assignment and cluster centers.

Cluster 1: ●●●●●
Cluster 2: ○○○○○
Cluster 3: ▲▲▲▲▲

Centers: ★

Example:
  ●  ●  ★  ○  ○
  ●  ●     ○  ○
  ▲  ▲  ★  ▲  ▲
    

This helps us see if clusters are well separated or overlapping.

Precision vs Recall tradeoff (or equivalent) with concrete examples

In clustering, we do not have precision or recall because no true labels exist.

Instead, there is a tradeoff between:

  • Number of clusters (k): Too few clusters may group different groups together (underfitting).
  • Cluster tightness: Too many clusters may split natural groups (overfitting).

For example, if you cluster customers:

  • Choosing too few clusters mixes different customer types, losing detail.
  • Choosing too many clusters splits similar customers, making it hard to act on groups.

Metrics like silhouette score help find a balance by measuring cluster quality.

What "good" vs "bad" metric values look like for K-Means clustering

Inertia:

  • Good: Low inertia means points are close to their cluster centers.
  • Bad: High inertia means points are far from centers, clusters are loose.

Silhouette Score:

  • Good: Scores near 1 mean clusters are well separated and dense.
  • Bad: Scores near 0 mean clusters overlap or are not distinct.
  • Negative scores mean points may be assigned to wrong clusters.

Calinski-Harabasz Index:

  • Good: Higher values indicate better cluster separation.
  • Bad: Low values mean clusters are not well separated.
Common pitfalls in K-Means clustering metrics
  • Choosing k without validation: Picking number of clusters arbitrarily can lead to poor results.
  • Ignoring scale of features: Features with large ranges dominate distance calculations, skewing clusters.
  • Overfitting with too many clusters: Clusters may fit noise, not real groups.
  • Random initialization: Different runs can give different clusters; use multiple runs or k-means++ initialization.
  • Using inertia alone: Inertia always decreases with more clusters, so it cannot decide best k alone.
Self-check question

Your K-Means model with k=3 has a silhouette score of 0.15. Is this good? Why or why not?

Answer: A silhouette score of 0.15 is low, meaning clusters overlap or are not well separated. This suggests the clustering is poor and you should try different k or preprocess data better.

Key Result
Silhouette score near 1 means well-separated clusters; inertia alone decreases with more clusters and can mislead.

Practice

(1/5)
1. What does the n_clusters parameter in K-Means control?
easy
A. The initial random seed for cluster centers
B. The maximum number of iterations for the algorithm
C. The number of groups (clusters) to find in the data
D. The distance metric used to measure similarity

Solution

  1. Step 1: Understand the role of n_clusters

    The n_clusters parameter tells K-Means how many groups to split the data into.
  2. Step 2: Compare with other parameters

    Other parameters control iterations, distance, or randomness, but n_clusters specifically sets group count.
  3. Final Answer:

    The number of groups (clusters) to find in the data -> Option C
  4. Quick Check:

    n_clusters = number of groups [OK]
Hint: Remember: n_clusters means how many groups you want [OK]
Common Mistakes:
  • Confusing n_clusters with max iterations
  • Thinking n_clusters sets distance metric
  • Assuming n_clusters controls randomness
2. Which of the following is the correct way to import KMeans from scikit-learn in Python?
easy
A. from sklearn import KMeans.cluster
B. import KMeans from sklearn.cluster
C. import sklearn.cluster.KMeans
D. from sklearn.cluster import KMeans

Solution

  1. Step 1: Recall Python import syntax

    Python uses 'from module import class' to import specific classes.
  2. Step 2: Match correct syntax for KMeans

    The correct import is from sklearn.cluster import KMeans.
  3. Final Answer:

    from sklearn.cluster import KMeans -> Option D
  4. Quick Check:

    Correct import syntax = from sklearn.cluster import KMeans [OK]
Hint: Use 'from module import class' for importing classes [OK]
Common Mistakes:
  • Using wrong import order
  • Trying to import with 'import' and 'from' combined incorrectly
  • Using dot notation in import statement
3. Given the code below, what will be the output of print(kmeans.labels_)?
from sklearn.cluster import KMeans
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=0).fit(X)
print(kmeans.labels_)
medium
A. [0 0 0 1 1 1]
B. [1 1 1 0 0 0]
C. [0 1 0 1 0 1]
D. [1 0 1 0 1 0]

Solution

  1. Step 1: Understand data grouping

    The first three points are close together near (1, y), the last three near (10, y), so KMeans will group first three as one cluster and last three as another.
  2. Step 2: Check label assignment

    KMeans assigns cluster labels starting from 0. The first cluster gets label 0, second cluster label 1. But the cluster near (10, y) is assigned label 0 and near (1, y) label 1 due to initialization and fitting.
  3. Final Answer:

    [1 1 1 0 0 0] -> Option B
  4. Quick Check:

    Close points share label 0 or 1 [OK]
Hint: Clusters group close points; labels start at 0 [OK]
Common Mistakes:
  • Assuming labels start at 1
  • Mixing cluster order
  • Ignoring spatial grouping
4. What is wrong with the following K-Means code snippet?
from sklearn.cluster import KMeans
X = [[1, 2], [1, 4], [1, 0]]
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
print(kmeans.labels_)
medium
A. The number of clusters (4) is greater than the number of data points (3)
B. The data X should be a numpy array, not a list
C. The KMeans class requires a random_state parameter
D. The fit method should be called with labels, not data

Solution

  1. Step 1: Check cluster count vs data points

    There are only 3 data points but 4 clusters requested, which is invalid because you cannot have more clusters than points.
  2. Step 2: Validate other code parts

    Using a list for X is allowed, random_state is optional, and fit expects data, not labels.
  3. Final Answer:

    The number of clusters (4) is greater than the number of data points (3) -> Option A
  4. Quick Check:

    Clusters ≤ data points [OK]
Hint: Clusters cannot exceed number of data points [OK]
Common Mistakes:
  • Thinking data must be numpy array
  • Believing random_state is mandatory
  • Confusing fit input as labels
5. You have a dataset with 3 natural groups, but you run K-Means with n_clusters=5. What is the likely effect on the clustering result?
hard
A. K-Means will split some natural groups into smaller clusters, causing over-segmentation
B. K-Means will ignore extra clusters and only find 3 groups
C. K-Means will fail to run and throw an error
D. K-Means will merge groups to reduce clusters to 3 automatically

Solution

  1. Step 1: Understand cluster count effect

    Setting more clusters than natural groups causes K-Means to split existing groups into smaller parts.
  2. Step 2: Check K-Means behavior

    K-Means does not reduce cluster count automatically or throw error if clusters exceed natural groups; it always finds exactly n_clusters.
  3. Final Answer:

    K-Means will split some natural groups into smaller clusters, causing over-segmentation -> Option A
  4. Quick Check:

    More clusters than groups = splitting groups [OK]
Hint: More clusters than groups splits groups into smaller parts [OK]
Common Mistakes:
  • Thinking K-Means auto-adjusts cluster count
  • Expecting error when clusters > natural groups
  • Assuming extra clusters are ignored
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard