当前位置:网站首页>简单说说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.第九次迭代(收敛):
边栏推荐
- Test push | Ali Fliggy, Baidu, 58 (recruitment), Zhihu, Huanxin Network, Baiguoyuan, Ali (Lazada), Shenzhicheng, Yuanrong Qixing are recruiting
- 2022暑假 动态规划总结
- 【AutoSAR 八 OS】
- Is Apifox free?Completely free, unlimited team size, unlimited functions
- 无偏估计和最小方差无偏估计简介
- C语言学习书籍 零基础入门篇
- 使用MD5加密后的字符串存密码安全吗?你不得不了解的Hash算法
- EasyExce template filling generation of Excel of actual operation, many processing sheet page
- 敏捷组织 | 企业克服数字化浪潮冲击的路径
- 使用IDEA连接mysql
猜你喜欢

Kubernetes: (4) Common commands

转行软件测试,你关心的都在这

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

Expert advice | How to formulate a growth strategy for survival in an economic downturn

updatexml、extractvalue和floor报错注入原理

C语言学习书籍 零基础入门篇

C language advanced enumeration and joint
![[数学]线性代数复习总结](/img/21/daebbfc5b4fe99046eaded673f76a7.png)
[数学]线性代数复习总结
![[GXYCTF2019] ban dolls](/img/91/3f64bebd13a8b13fbb387c2acf8618.png)
[GXYCTF2019] ban dolls

ACM学习书籍简介
随机推荐
【AutoSAR 六 描述文件】
[GXYCTF2019] ban dolls
ESP8266-Arduino编程实例-EEPROM读写
函数指针与block[通俗易懂]
无代码开发平台角色设置入门教程
C#_OpenCV使用相机
Kubernetes:(四)常用命令
LeetCode_474_一和零
程序员如何提升自己写代码的能力?
[数学基础]线性代数相关概念学习
LeetCode 1047 Remove all adjacent duplicates in a string
[mathematical foundation] probability and mathematical statistics related concept learning
【AutoSAR 一 概述】
Summary of scratch learning related materials
LeetCode #88.合并两个有序数组
并发编程学习笔记 之 常用并发容器的概念及使用方法
JMeter使用教程(一)
[数学]考研数学公式定理大总结
【AutoSAR 七 工具链简介】
scratch学习相关资料汇总