python实现k-means聚类算法,计算k个中心分类后的结果

实现k-means聚类算法,导入了python自带的数据库鸢尾花的数据作为实验数据,计算k个中心分类后的结果,结果用图像显示。


前言

这里就不详细解释什么是K-means算法了,直接上代码 ,用的是python来实现,比较简单


一、全部代码

python实现,导入的是python自带鸢尾花库

1.引入库

from sklearn.datasets import load_iris
import copy
import matplotlib.pyplot as plt

2.其他代码

iris = load_iris()  # 导入鸢尾花数据
print("请输入你想要分为几类:")
k = eval(input())
# center = [[5, 3.5], [6, 3], [6.5, 3.5]] 测试中心点数据
color=["red","blue","pink","orange","yellow"]
marker=[".","+","*","s","<"]
center=[]
x=[]
y=[]
print("请输入你的起始点中心坐标:")
for i in range(k):
    a=list(map(float,(input().split(","))))
    center.append(a)

for i in range(len(iris.data)):
    x.append(iris.data[i][0])
    y.append(iris.data[i][1])

while 1:
    ol=copy.deepcopy(center)
    lx=[]
    ly=[]
    sum_x = []
    sum_y = []
    for i in range(k):
        lx.append([])
        ly.append([])
        sum_x.append(0)
        sum_y.append(0)
    for i in range(len(x)):
        ld=[]
        for j in range(k):
            d=((x[i]-center[j][0])**2+(y[i]-center[j][1])**2)**0.5
            ld.append(d)
        min_d=ld.index(min(ld))
        lx[min_d].append(x[i])
        ly[min_d].append(y[i])
        sum_x[min_d]=sum_x[min_d]+x[i]
        sum_y[min_d]=sum_y[min_d]+y[i]
    for j in range(k):
        center[j][0]=sum_x[j]/len(lx[j])
        center[j][1] = sum_y[j] / len(ly[j])
    #比较中心点是否变化,若没变化则停止循环
    if center==ol:
        break
for i in range(k):
    plt.scatter(lx[i],ly[i],c=color[i],marker=marker[i])
    plt.scatter(center[i][0],center[i][1],c="black",)
plt.show()

二、结果

1.输入

输入部分

2.输出

输出部分


总结

总的来说比较好理解,但是感觉好像不太严谨哈哈哈哈,要是有错误,提出来我改正!!谢谢

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值