当前位置:网站首页>简单说说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.第九次迭代(收敛):
边栏推荐
猜你喜欢

updatexml、extractvalue和floor报错注入原理

【目标检测】Generalized Focal Loss V2

sad rock
![[数学基础]线性代数相关概念学习](/img/4c/d43fb47ff5b99998660a679b20699c.png)
[数学基础]线性代数相关概念学习
【AutoSAR 五 方法论】

updatexml, extractvalue and floor error injection principle

腾讯安全发布 Tencent Cloud EdgeOne,为企业出海打造安全加速一体化服务
![[Mathematical Foundation] Learning about concepts related to linear algebra](/img/4c/d43fb47ff5b99998660a679b20699c.png)
[Mathematical Foundation] Learning about concepts related to linear algebra

PostgreSQL语句大全

Omni-channel e-commerce | How can well-known domestic cosmeceuticals seize the opportunity to achieve rapid growth?
随机推荐
"Additional price" can not exchange for safety, the death of Lexus LM, whose fault is it?
并发编程学习笔记 之 常用并发容器的概念及使用方法
C语言学习书籍(提高篇)
Private domain growth | Private domain members: 15 case collections from 9 major chain industries
shell 图形化跳板机
Typescript模块的导入导出与继承
树上启发式合并小结
解决宝塔mysql 远程root 无法连接问题
第二增长曲线 | 企业创新突破停滞困境的驱动指南
4D Summary: 38 Knowledge Points of Distributed Systems
欧盟计划斥资百亿欧元补贴,吸引台积电、英特尔、三星等赴欧盟建厂
mnist有多少张图片(怎么读取图片文字)
JSP Servlet JDBC MySQL CRUD 示例教程
笛卡尔树(暑假每日一题 9)
JMeter使用教程(二)
Is Apifox free?Completely free, unlimited team size, unlimited functions
TDengine 助力西门子轻量级数字化解决方案
easyExce模板填充生成Excel的实际操作,多sheet页处理
leetcode:952. 按公因数计算最大组件大小【并查集】
【AutoSAR 九 C/S原理架构】