Scikit Learn - K-Means - Elbow - criterion
ML System Design practice on Codemia
Design recommenders, ranking systems and training pipelines the way ML interviews actually ask for them, with worked solutions.
Introduction
In cluster analysis, the K-Means algorithm is one of the most popular methods due to its simplicity and efficiency. Scikit-learn, a widely-used machine learning library in Python, offers a robust implementation of K-Means clustering which supports various optimization and initialization techniques. A vital part of using K-Means effectively is selecting the right number of clusters, denoted as K. The "Elbow Method" is a heuristic used to determine the most appropriate number of clusters in a data set.
K-Means Clustering
K-Means is a partitioning method that divides a dataset into K distinct, non-overlapping subgroups known as clusters. The algorithm works as follows:
- Initialization: Choose K initial centroids, which can be selected randomly or using methods like K-Means++.
- Assignment: Assign each data point to the nearest centroid.
- Update: Calculate the mean of all data points assigned to each centroid and update the centroid's position.
- Repeat the assign-update steps until convergence, which occurs when there is no change in the assignment of data points or the centroids' positions.
The goal of K-Means is to minimize the within-cluster sum of squares (WCSS), also known as inertia. It measures the compactness of clusters, where a lower value means more compact clusters.
The Elbow Method
The Elbow Method is a graphical approach for determining the optimal number of clusters by observing the WCSS for various values of K. The steps for employing the Elbow Method are:
- **Compute the K-Means clustering for different values of K (e.g., from 1 to 10) and calculate the WCSS for each *K*.
- *Plot the WCSS values against the number of clusters K.
- Identify the "elbow" point in the plot, which is the point where the rate of decrease sharply changes.
The “elbow” resembles the bending of a human arm. Before the elbow point, adding another cluster results in a significant reduction in WCSS, but after the elbow, the reduction is minimal. This suggests that the optimal K is at the elbow point.
Technical Explanation
Calculating WCSS
The WCSS can be mathematically expressed as:
where is a data point, is the i-th cluster, and is the mean of the i-th cluster. It calculates the sum of squared distances between data points and their corresponding cluster centroids for all clusters.
Limitations of the Elbow Method
- Subjective: Identifying the elbow point can be subjective, especially when the graph does not have a clear bend.
- Multi-Dimensionality: In high dimensional data, the visual elbow may not be apparent.
- Oversimplification: The method assumes centroid distance is the sole metric for cluster quality, possibly ignoring the shape or connectivity of the clusters.
Example of K-Means with the Elbow Criterion in Scikit-Learn
Here's a Python example using Scikit-learn to implement K-Means and the Elbow Method:
Summary Table
Here’s a summary table of K-Means and the Elbow Method:
| Aspect | Description |
| Initialization | Randomly choose initial centroids or use K-Means++ |
| Distance Measure | Euclidean distance is typically used |
| Goal | Minimize WCSS for compact clusters |
| Elbow Method | Determine optimal K by finding the "elbow" in WCSS plot |
| Convergence | When centroids no longer move or assignments do not change |
| Computational Complexity | where =samples, =clusters, =iterations, =dimensions |
| Advantages | Simple, scales to a large number of samples |
| Disadvantages | Requires pre-specified , sensitive to initial centroid positions, assumes spherical clusters |
Related reading
- scikit learn custom classifier compatible with GridSearchCV
- Scikit Learn GridSearchCV without cross validation unsupervised learning
- Scikit Learn Multilabel Classification ValueError You appear to be using a legacy multi-label data representation
- scikit learn Problems creating customized CountVectorizer and ChiSquare
- scikit learn SVM, how to save/load support vectors?
- SciKit Learn SVR runs very long
- scikitlearn - how to model a single features composed of multiple independant values
- scikits learn and nltk Naive Bayes classifier performance highly different
.png&w=3840&q=75)
Tackling System Design Interview Problems
A short course that equips you with the skills to approach system design interviews methodically.
Start the free courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
ML System Design practice on Codemia
Design recommenders, ranking systems and training pipelines the way ML interviews actually ask for them, with worked solutions.