一、算法图解
- 首先,图a & 图b:指定cluster的个数。上图设k=2(初始点为从图b开始出现的“+”号);
- 其次,图c:把每个数据样本划到到最近的中心点那一cluster;
- 再次,图d & 图e:指第一轮化cluster之后,更新中心点(一般是把该cluster的所有数据座标加起来取平均值);
- 重复划类和中心点更新,一直到满足指定的迭代次数,或者中心点的移动距离小于给定值,或者中心点不再移动,图f;
二、sklearn官方文档链接
sklearn.cluster.KMeans(
n_clusters=8, # 设定要聚类的个数,默认8;
init='k-means++', # 设定选择初始中心点的方法,默认是“k-means++”(一种可以加速聚类收敛的方法),还可以是“random”(随机选择初始点),或者是shape为[n_clusters, n_features]的数组,即自己指定初始点;
n_init=10, # 设定中心点的批数,最终输出效果最好的那批中心点产生的cluster。默认是10批;
max_iter=300, # 设定对于每批中心点,最大的迭代次数。默认300;
tol=0.0001, # 设定可接受的中心点最小移动距离,默认是1e-4
precompute_distances='auto', #
verbose=0,
random-state=None,
copy_x=True, # 是否copy样本x。默认True,False即跟新样本x;
n_jobs=None,
algorithm='auto' # 指定kmeans的算法。默认是“autor”,即对于密集的样本用“elkan”算法,离散的样本用“full”算法;可自行指定“elkan”或“full”2种中的一个;
)
三、优缺点
- 对离群点敏感(因为对均值的影响大)
- 不能对环形&漩涡形正确聚类;