python K-Means算法从头实现

网友投稿 387 2022-08-26

python K-Means算法从头实现

最近看了K-means算法的原理,想用python实现一下,发现网上大部分教程都是调包,我对算法原理比较感兴趣,所以特地从头实现了一下,我把代码分享出来

import pandas as pdimport numpy as npclass K_Means: def __init__(self, k=2, tol=0.001, max_iter=300): self.k = k self.tol = tol self.max_iter = max_iter def fit(self,data): self.centroids = {} idx = np.random.choice(len(data), self.k, replace=False) # print(idx) for i,val in enumerate(idx): self.centroids[i] = data[val] print(self.centroids) for i in range(self.max_iter): self.classifications = {} for i in range(self.k): self.classifications[i] = [] for featureset in data: distances = [np.linalg.norm(featureset-self.centroids[centroid]) for centroid in self.centroids] classification = distances.index(min(distances)) self.classifications[classification].append(featureset) prev_centroids = dict(self.centroids) for classification in self.classifications: self.centroids[classification] = np.average(self.classifications[classification],axis=0)if __name__ == "__main__": X = np.array([[1, 2], [1.5, 1.8], [5, 8 ], [8, 8], [1, 0.6], [9,11]]) kmeans=K_Means() kmeans.fit(X) print(kmeans.centroids) # Data = {'x': [25,34,22,27,33,33,31,22,35,34,67,54,57,43,50,57,59,52,65,47,49,48,35,33,44,45,38,43,51,46], # 'y': [79,51,53,78,59,74,73,57,69,75,51,32,40,47,53,36,35,58,59,50,25,20,14,12,20,5,29,27,8,7] # } # df = pd.DataFrame(Data,columns=['x','y'])

我实现了随机选择k个点,然后计算欧式距离,重新计算质心等等,当然还有不完善的地方,对于理解原理应该差不多了。

参考文献

[1].Example of K-Means Clustering in Python. [2].K-Means from Scratch in Python. https://pythonprogramming.net/k-means-from-scratch-machine-learning-tutorial/

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C++:用两个栈来实现一个队列,完成队列的Push和Pop操作
下一篇:pytorch transformers从头开始实现情感分析模型
相关文章

 发表评论

暂时没有评论,来抢沙发吧~