c语言sscanf函数的用法是什么
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~