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

C language learning books (improvement)
![[数学基础]线性代数相关概念学习](/img/4c/d43fb47ff5b99998660a679b20699c.png)
[数学基础]线性代数相关概念学习

敏捷组织 | 企业克服数字化浪潮冲击的路径

updatexml, extractvalue and floor error injection principle

【Autosar vLinkGen 链接器脚本生成器】

error TS1219: Experimental support for decorators解决

【AutoSAR 十一 通信相关机制】

Monitoring basic resources through observation cloud monitor, automatic alarm

leetcode:952. 按公因数计算最大组件大小【并查集】

EasyExce template filling generation of Excel of actual operation, many processing sheet page
随机推荐
Chrome——插件推荐
Detailed explanation of design ideas of webUI test framework
腾讯安全发布 Tencent Cloud EdgeOne,为企业出海打造安全加速一体化服务
无知大V秀智商!台积电南京厂扩产28nm将击垮大陆晶圆代工业?无稽之谈!
etcd implements large-scale service governance application combat
2022暑假 动态规划总结
搭建自己的以图搜图系统 (一):10 行代码以图搜图
【AutoSAR 四 BSW概述】
并发编程学习笔记 之 常用并发容器的概念及使用方法
webUI测试框架设计思路详解
ESP8266-Arduino programming example-LittleFS and data upload
error TS1219: Experimental support for decorators解决
Xcode如何利用预览(Preview)让SwiftUI视图快速适配不同尺寸的设备
ds1302——斌哥51
12437字,带你深入探究RPC通讯原理
无代码开发平台权限设置入门教程
峰会(暑假每日一题 8)
ESP8266-Arduino programming example-EEPROM read and write
ESP8266-Arduino programming example-I2C device address scan
正则表达式