聚类——KMeans面试总结

本文详细介绍了K-means聚类算法的工作流程,包括随机选择初始质心、样本点分配及质心更新,直至收敛。讨论了算法的优点如简单易实现和较低的时间复杂度,同时也指出了其缺点,如K值确定困难、对初值敏感和局部最优等问题。通过Python示例展示了如何使用Scikit-learn库进行K-means聚类,并提供了效果评价指标轮廓系数的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kmeans
流程:
1 随机抽取K个样本作为最初的质心
2 开始循环:
2.1 将每个样本点分配到离他们最近的质心,生成K个簇
2.2 对于每个簇,计算所有被分到该簇的样本点的平均值作为新的质心
3 当质心的位置不再发生变化,迭代停止,聚类完成

优点:
1 简单,容易实现
2 时间复杂度也不是很高

缺点:
1 K不好确定,得画学习曲线才能找到合适的K
2 初始质心的选择会影响聚类的效果
3 因为2,所以是局部最优,不是全局最优
4 因为要计算距离,所以对噪声比较敏感
5 因为需要样本能求得出均值,所以限制了样本的数据类型得是数值型的

python使用:
kmeans = KMeans(n_clusters=k).fit(X)
kmeans.predict(test)

效果评价指标:
轮廓系数 silhouette_score(越大越好)

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)
>>> kmeans.labels_
array([1, 1, 1, 0, 0, 0])
>>> kmeans.predict([[0, 0], [12, 3]])
array([1, 0])
>>> kmeans.cluster_centers_
array([[10.,  2.],
       [ 1.,  2.]])

from sklearn.metrics import silhouette_score
from sklearn.metrics import silhouette_samples
X
y_pred
silhouette_score(X,y_pred)
silhouette_score(X,cluster_.labels_)
silhouette_samples(X,y_pred)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值