首页IT科技python kmeans代码(Python K-means算法的计算步骤)

python kmeans代码(Python K-means算法的计算步骤)

时间2025-09-17 14:45:52分类IT科技浏览5364
导读:步骤说明...

步骤说明

1               、确定K值               。

决定数据聚为几类               ,K值是K-Means算法中唯一的参数                        。

2                        、从原始数据集中随机选择K个点作为初始均值点        。

3        、依次从原始数据集中取出数据           。

每取出一个数据就和K个均值点分别计算距离(默认计算点间的欧氏距离)                        ,和谁更近就归为这个均值点所在的簇;

4           、分别计算各簇当前的均值点                       。

即求该簇中所有点的平均值

5                       、比较当前的均值点和上一步得到的均值点是否相同            。

如果相同        ,则K-Means算法结束           ,否则                       ,将当前的均值点替换掉之前的均值点            ,然后重新划分族        ,重复步骤三        。

实例

importnumpyasnp importmatplotlib.pyplotasplt 标志位统计递归运行次数 flag=0 欧式距离 defecludDist(x,y): returnnp.sqrt(sum(np.square(np.array(x)-np.array(y)))) 曼哈顿距离 defmanhattanDist(x,y): returnnp.sum(np.abs(x-y)) 夹角余弦 defcos(x,y): returnnp.dot(x,y)/(np.linalg.norm(x)*np.linalg.norm(y)) 计算簇的均值点 defclusterMean(dataset): returnsum(np.array(dataset))/len(dataset) 生成随机均值点 defrandCenter(dataset,k): temp=[] whilelen(temp)<k: index=np.random.randint(0,len(dataset)-1) ifindexnotintemp: temp.append(index) returnnp.array([dataset[i]foriintemp]) 以数据集的前k个点为均值点 deforderCenter(dataset,k): returnnp.array([dataset[i]foriinrange(k)]) 聚类 defkMeans(dataset,dist,center,k): globalflag #all_kinds用于存放中间计算结果 all_kinds=[] for_inrange(k): temp=[] all_kinds.append(temp) #计算每个点到各均值点的距离 foriindataset: temp=[] forjincenter: temp.append(dist(i,j)) all_kinds[temp.index(min(temp))].append(i) #打印中间结果 foriinrange(k): print(+str(i)+组:,all_kinds[i],end=\n) flag+=1 print(************************迭代+str(flag)+次***************************) #更新均值点 center_=np.array([clusterMean(i)foriinall_kinds]) if(center_==center).all(): print(结束) foriinrange(k): print(+str(i)+组均值点:,center_[i],end=\n) plt.scatter([j[0]forjinall_kinds[i]],[j[1]forjinall_kinds[i]],marker=*) plt.grid() plt.show() else: #递归调用kMeans函数 center=center_ kMeans(dataset,dist,center,k) defmain(k): 生成随机点 x=[np.random.randint(0,50)for_inrange(50)] y=[np.random.randint(0,50)for_inrange(50)] points=[[i,j]fori,jinzip(x,y)] plt.plot(x,y,b.) plt.show() initial_center=randCenter(dataset=points,k=k) kMeans(dataset=points,dist=ecludDist,center=initial_center,k=k) if__name__==__main__: main(3)

以上就是Python K-means算法的计算步骤                       ,希望对大家有所帮助                       。更多Python学习指路:Python基础教程

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
我想听芒果这首歌(芒果TV超美UI听书苹果CMSV10模版类似喜马拉雅听书网电影主题-OK源码破解) python pandas dataframe 遍历行(python中如何按行遍历Dataframe)