K-Means 是最经典的无监督学习(Unsupervised Learning)算法之一。它不要求训练数据具有Label,而是尝试自动发现数据中的自然分组,也就是Cluster。
核心思想
假设选择K = 3。
算法首先准备三个初始Centroid。每个数据点被分配给距离最近的Centroid,然后使用各Cluster中样本的平均位置重新计算Centroid。
该过程不断重复,直到分配结果趋于稳定。
标准步骤
- 选择K。
- 初始化K个Centroid。
- 计算每个点到所有Centroid的距离。
- 分配到最近的Cluster。
- 用Cluster中样本的平均值更新Centroid。
- 重复直到Convergence。
什么是Centroid?
Centroid是一个Cluster中所有样本坐标的平均位置,它并不一定是一个真实的数据样本。
Euclidean Distance
K-Means常使用欧氏距离:
d = sqrt((x2 - x1)^2 + (y2 - y1)^2)
如何选择K?
Elbow Method
对多个K值运行K-Means,并比较Cluster内部误差。随着K增加,误差会下降,但当继续增加K带来的改进开始明显变小时,就可能出现“肘部”位置。
Silhouette Score
Silhouette Score可以衡量样本与自身Cluster的匹配程度以及与其他Cluster的分离程度。
Feature Scaling
由于K-Means依赖距离,如果不同Feature的数值范围差距很大,结果可能被大尺度Feature主导。
因此通常会使用Standardization或Min-Max Scaling。
Centroid初始化
K-Means对初始Centroid比较敏感。较差的初始值可能得到不理想的局部结果。
**K-Means++**是一种常见的改进初始化方法。
所提供JavaScript项目中的实现直接使用前K个数据点作为初始中心。这种方式适合教学,但实际项目中通常会采用更稳健的初始化策略或多次运行。
应用场景
- Customer Segmentation
- 产品用户分群
- 营销分析
- 图像颜色压缩
- Exploratory Data Analysis
优点
- 原理简单
- 计算效率较高
- 非常适合Segmentation
- 能够快速发现数据的基础结构
局限
- 必须提前指定K
- 对Outlier敏感
- 初始Centroid会影响结果
- 更适合相对紧凑的Cluster
- 标准K-Means主要面向数值型数据
实现逻辑
choose K centroids
repeat:
assign every point to nearest centroid
recompute each centroid as cluster mean
until assignments stop changing
项目中的实现会建立距离信息,为每个数据点选择最近的Cluster,再根据Cluster成员的平均坐标计算新的Centroid,并重复直到分配稳定。
K-Means与KNN的区别
KNN通常属于Supervised Learning,使用带Label的邻居预测新样本。
K-Means属于Unsupervised Learning,不需要Label,而是寻找数据中的自然Cluster。
总结
K-Means是理解Clustering最重要的基础算法之一。实际使用时,需要重点考虑K值、Feature Scaling、初始Centroid、Outlier以及真实数据中的Cluster形状。