当前位置:网站首页>简单说说K均值聚类
简单说说K均值聚类
2022-07-29 19:43:00 【Cyril-KI】
聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程,聚类就是一种发现这种内在结构的技术,聚类技术经常被称为无监督学习。k均值聚类是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的。给定一个数据点集合和需要的聚类数目k,k由用户指定,k均值算法根据某个距离函数反复把数据分入k个聚类中。
假设对基本的二维平面上的点进行K均值聚类,其实现基本步骤是:
1.事先选定好K个聚类中心(假设要分为K类)。2.算出每一个点到这K个聚类中心的距离,然后把该点分配给距离它最近的一个聚类中心。3.更新聚类中心。算出每一个类别里面所有点的平均值,作为新的聚类中心。4.给定迭代此次数,不断重复步骤2和步骤3,达到该迭代次数后自动停止。
思想很简单,实现起来也很简单,附上代码:
import numpy as np
import matplotlib.pyplot as plt
#np.random.seed(300)
x=np.random.rand(200)*15 #产生要聚类的数据点,(0,15)之间
y=np.random.rand(200)*15
center_x=[] #存放聚类中心坐标
center_y=[]
result_x=[] #存放每次迭代后每一小类的坐标
result_y=[]
number_cluster=4 #簇数
time=50 #迭代次数
color=['red','blue','black','orange']
for i in range(number_cluster): # 随机生成中心
result_x.append([]) #顺便初始化存放聚类结果的列表
result_y.append([])
x1 = np.random.choice(x) #为了避免出现聚类后有的簇一个点也没有,
y1 = np.random.choice(y) #干脆就以某一个数据点为中心
if x1 not in center_x and y1 not in center_y:
center_x.append(x1)
center_y.append(y1)
plt.scatter(x,y) #画出数据图
plt.title('init plot')
plt.show()
def K_means():
for t in range(time):
for i in range(len(x)):
distance = [] #存放每个点到各中心的距离
for j in range(len(center_x)):
k = (center_x[j] - x[i]) ** 2 + (center_y[j] - y[i]) ** 2 #距离
distance.append([k])
result_x[distance.index(min(distance))].append(x[i]) #聚类
result_y[distance.index(min(distance))].append(y[i])
plt.title('iterations:'+str(t+1))
for i in range(number_cluster):
plt.scatter(result_x[i], result_y[i], c=color[i])
plt.show()
# 更新位置
center_x.clear()
center_y.clear()
for i in range(number_cluster):
ave_x = np.mean(result_x[i])
ave_y = np.mean(result_y[i])
center_x.append(ave_x)
center_y.append(ave_y)
if __name__=='__main__':
K_means()
结果展示:
1.初始化:
2.第一次迭代:
3.第二次迭代:
4.第九次迭代(收敛):
边栏推荐
猜你喜欢

Is Apifox free?Completely free, unlimited team size, unlimited functions

论文写作全攻略|一篇学术科研论文该怎么写

数据可视化----网页显示温湿度

《帧同步教程一》定点数原理和无损精度的实现方式

无代码开发平台角色设置入门教程

MATLAB程序设计与应用 2. 第2章 MATLAB数据及其运算 2.1 MATLAB数值数据 && 2.2 MATLAB矩阵的表示 && 2.3 变量及其操作

【目标检测】Generalized Focal Loss V2

ds1302——Bin brother 51

Private domain growth | Private domain members: 15 case collections from 9 major chain industries

如何使用TDengine Sink Connector?
随机推荐
接口测试工具之Postman详解
HbuilderX打包app,Hbuilder怎么打包app,H5打包成app,H5怎么打包成app「建议收藏」
PostgreSQL语句大全
Test push | Ali Fliggy, Baidu, 58 (recruitment), Zhihu, Huanxin Network, Baiguoyuan, Ali (Lazada), Shenzhicheng, Yuanrong Qixing are recruiting
如何使用TDengine Sink Connector?
并发编程学习笔记 之 常用并发容器的概念及使用方法
DJI MID 360
正则表达式
MySQL 中的反斜杠 \\,怎么能这么坑?
Is it safe to use the MD5 encrypted string to store the password?Hash algorithm you have to know
手势密码解锁微信小程序项目源码
【AutoSAR 八 OS】
Chrome - Plugin Recommendations
Expert advice | How to formulate a growth strategy for survival in an economic downturn
mnist有多少张图片(怎么读取图片文字)
全渠道电商 | 国内知名的药妆要如何抓住风口实现快速增长?
【体系结构 四 存储结构】
Apifox免费吗?完全免费,不限团队人数,不限功能
【Autosar vLinkGen 链接器脚本生成器】
通过观测云监控器监控基础资源,自动报警