本篇文章是在闭卷之下据我个人的理解一个字一个字写出来,恐有错漏,请谨慎参考。
一、算法类型
无监督的聚类算法
二、算法原理
将样本划分为不同簇(拼音:cu)数,直观上,簇内样本较为聚集,簇间样本较为分开。每个样本到本簇质心的距离,小于到其他簇质心的距离。
三、算法流程
第一步:准备已处理好的样本集Data(N个样本,M个特征),指定聚类k簇,迭代次数max_iter;
第二步:随机选取k个样本作为第一代质心集C,表示为:c0,c1…ck-1(这里下标索引将作为聚类标签);
第三步:计算每个样本到每个质心的距离,得到距离集D(N行,K列);
第四步:比较每个样本到质心集的k个距离,选取最小距离对应的质心及其索引,该索引值作为该样本的聚类标签,从而得到所有样本的聚类标签;
第五步:计算SSE和轮廓系数silhouette_score(辅助选取最优K值);
第六步:计算第四步中不同标签下的所有样本的M个特征的算术均值,从而得到第二代质心集C
第七步:循环第三、四、五步骤,迭代max_iter次后停止。
四、手写Python实现
(脱稿手写出来,好开心,请给我点赞O(∩_∩)O)
def kmeans(X,k=3,max_iter=100):
'