标准回答
算法流程
K-means 是一种基于距离的无监督聚类,目标是最小化簇内平方误差(SSE)。流程:
- 随机选取 k 个初始质心;
- 分配:把每个样本划到欧氏距离最近的质心;
- 更新:用各簇样本的均值作为新质心;
- 重复 2-3 直到质心不再变化或达到迭代上限。
它本质是对 SSE 做坐标下降,保证收敛,但只收敛到局部最优。
局限
- 需人为指定 k;结果对初始质心敏感,故用 k-means++ 让初始点尽量分散;
- 对特征量纲敏感,须先标准化;
- 基于均值与欧氏距离,假设簇是球形、大小相近,对非凸簇、不同密度或离群点效果差;
- 离群点会显著拉偏质心。
常见误区
⚠️ 常见踩坑
别说「K-means 能自动确定簇数」——k 必须预设;也别忽略标准化,量纲差异会让大尺度特征主导距离。
追问
追问 1:k-means++ 解决了什么问题?
普通随机初始化容易让多个质心落在同一簇,导致收敛到差的局部最优。k-means++ 按与已选质心距离的平方为概率依次挑初始点,使其分散,显著降低 SSE 并加快收敛。
追问 2:如何选择 k?
常用肘部法(画 SSE 随 k 的曲线,找下降趋缓的拐点)和轮廓系数(衡量簇内紧凑与簇间分离,取最大值对应的 k)。也可结合业务先验或 Gap Statistic。
追问 3:K-means 和 DBSCAN 有何区别?
K-means 需指定 k、找球形簇、对离群点敏感;DBSCAN 基于密度,无需指定簇数,能发现任意形状簇并天然识别噪声点,但对密度差异大的数据和参数 eps 较敏感。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。