当前位置: 移动技术网 > IT编程>脚本编程>Python > k-means聚类

k-means聚类

2020年07月22日  | 移动技术网IT编程  | 我要评论
这里介绍一下简单的使用欧氏距离的kmeans思路: 1、确定n个中心点 2、计算每个点与中心点的距离 3、然后对每一个点的与n个中心点的距离进行比较,将点划分到距离最短的那个中心点簇中 4、此时以n个中心点形成n个簇 5、然后取这些簇中各个点的特征值的均值为新的中心点 6、重复2、3、4,迭代对应的次数,输出结果代码:#引入包,数据使用的是sklearn包中带的鸾尾花数据import numpy ...

这里介绍一下简单的使用欧氏距离的kmeans


思路:

       1、确定n个中心点

       2、计算每个点与中心点的距离

       3、然后对每一个点的与n个中心点的距离进行比较,将点划分到距离最短的那个中心点簇中

       4、此时以n个中心点形成n个簇

       5、然后取这些簇中各个点的特征值的均值为新的中心点

       6、重复2、3、4,迭代对应的次数,输出结果

代码:

#引入包,数据使用的是sklearn包中带的鸾尾花数据
import numpy as np
from matplotlib import pyplot as plt
from sklearn import datasets
from random import shuffle

#导入数据,data是花的特征数据,target是花的类型数据
data=datasets.load_iris().data
target=datasets.load_iris().target

#数据量
x=data.shape[0]
#特征值数
y=data.shape[1]
#打乱原始数据
index=np.arange(x)
shuffle(index)
data=data[index]
target=target[index]
#迭代次数
iter_num=10
#由于事先知道有3类,所以聚类中心数设置为3
centor_num=3
#取打乱后的数据的前3个作为初始聚类中心
centor_cd=data[:3,:]
#初始化距离矩阵,因为有x个点,3个聚类中心
dist=np.zeros((x,3))

#迭代次数
for i in range(iter_num):
    
    #循环遍历鸾尾花的特征数据
    for j in range(x):
        #获取距离
        distance=(data[j]-centor_cd)**2
        distance=np.sum(distance,axis=1)
        distance=np.sqrt(distance)
        #更新距离矩阵
        dist[j] = distance
    #获取算法结果
    cluster_id=np.argmin(dist , axis=1)
    #聚类错误的数量
    losess=np.sum(cluster_id != target)
    
    #更新聚类中心,采用每一次迭代生成簇的特征值的均值
    for k in range(centor_num):
        d=data[cluster_id==k]
        centor_cd[k]=np.mean(d,axis=0)

print("聚类成功")
print(cluster_id)

 

本文地址:https://blog.csdn.net/csefrfvdv/article/details/107490184

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网