基本原理
”物以聚类,点以距离分“的思想。对于给定的样本集,根据样本之间的距离划分为K个族,让族内的点的距离尽量的小,族间的距离尽量大。
主要步骤
1.从数据中选择K个对象作为初始的距离中心
2.计算每个聚类对象到聚类中心的距离,将每个对象划分到距离自己最近的聚类中心的一类
3.在每类中重新计算聚类中心,并重复2的操作,直到到达最大迭代次数或者两次更新的聚类中心距离达到要求
4.确定最优的聚类中心
主要的缺陷
1. K个初始中心的选择:K means++
2. K值得确定,因为没有已知得分类数目,所以无法实现知道K得取值,可以采用手肘法,轮廓系数法或者Calinski-harabasz系数等方式确定K值 可以参考 https://blog.csdn.net/qq_15738501/article/details/79036255
python代码
python实现并将结果与python自带得KMeans比较,结果一致
class KMeans():
def __init__(self,n_clusters: int = 8,max_iter: int = 300,tol:float = 1e-4):
self.n_clusters = n_clusters
self.max_iter = max_iter
self.tol = tol
self.c_clusters = None
def cluster(self,lo_c,lo_x):
'''
根据聚类中心确定每个点得类别
lo_c:聚类中心位置
lo_x:数据
'''
## 得到每个点到聚类中心得距离
op = []