k-means聚类

2022-08-01,

这里介绍一下简单的使用欧氏距离的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

《k-means聚类.doc》

下载本文的Word格式文档,以方便收藏与打印。