k-means聚类
程序员文章站
2023-04-03 20:52:10
这里介绍一下简单的使用欧氏距离的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
推荐阅读
-
iOS开发中使用NSURLConnection类处理网络请求的方法
-
【转载】 C#中ArrayList集合类的使用
-
木卯先生的笔记---Object类
-
iOS开发中音频工具类的封装以及音乐播放器的细节控制
-
【转载】C#中ArrayList集合类使用Add方法添加元素
-
Mybaits 源码解析 (八)----- 全网最详细,没有之一:结果集 ResultSet 自动映射成实体类对象(上篇)
-
c++ 模板类,方法返回值类型是typedef出来的,或者是auto,那么此方法在类外面如何定义?
-
Java类加载机制详解
-
Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析
-
虚拟机类加载机制