DAY18聚类演算法(kmeans)

昨天介绍完kmeans演算法,今天就要实际写程序:
首先先创建一笔资料并绘图:
程序如下:

import numpy as np
label_data=np.array([[45,59],[52,63],[18,52],[72,24],[20,36],[12,39],[53,23],[52,70],[45,63],[24,55],[33,46],[28,30],[29,54],[55,14],[61,8],[69,7],[64,19],[51,66]])
label_data_x=[label_data[i][0] for i in range(len(label_data))]
label_data_y=[label_data[i][1] for i in range(len(label_data))]
print(label_data_x)
print(label_data_y)

import matplotlib.pyplot as plt
plt.scatter(label_data_x,label_data_y)
plt.show()

结果如下:

https://ithelp.ithome.com.tw/upload/images/20211002/20141654yUABhNYUxZ.png

之後写出起始中心点位置:(设定d=3-->分3群)

#先决定要分几群
d=3
#由於数据x,y最大值为70左右
import random
x_y_used=[]
color_used=[]
#设定种子
random.seed(150)
for i in range(d):
	#避免重复中心点
	while True:
		x=random.randint(0,70)
		y=random.randint(0,70)
		if [x,y] not in x_y_used:
			break
	x_y_used.append([x,y])
	#避免重复颜色
	while True:
		color_use = ["#"+''.join([random.choice('0123456789ABCDEF') for j in range(6)])]
		if color_use not in color_used:
			color_used.append(color_use)
			break
	plt.scatter(x,y,color=color_use)

plt.show()

结果如图:
https://ithelp.ithome.com.tw/upload/images/20211002/20141654GnM5fmxqlW.png
接下来针对这张图的中心点我们去算欧式距离:(程序码如下)

#帮资料分类
for i in range(len(label_data_x)):
	k=[]
	for j in range(d):
		#计算欧式距离
		value_k=np.sqrt((x_y_used[j][0]-label_data_x[i])**2+(x_y_used[j][1]-label_data_y[i])**2)
		k.append(value_k)
	#取最小
	tmp = min(k)
	index = k.index(tmp)
	print("第",i+1,"笔资料为第",index+1,'类')
	#画在图上
	plt.scatter(label_data_x[i],label_data_y[i],color=color_used[index])
plt.show()
第 1 笔资料为第 1 类
第 2 笔资料为第 1 类
第 3 笔资料为第 1 类
第 4 笔资料为第 2 类
第 5 笔资料为第 3 类
第 6 笔资料为第 3 类
第 7 笔资料为第 2 类
第 8 笔资料为第 1 类
第 9 笔资料为第 1 类
第 10 笔资料为第 1 类
第 11 笔资料为第 1 类
第 12 笔资料为第 3 类
第 13 笔资料为第 1 类
第 14 笔资料为第 2 类
第 15 笔资料为第 2 类
第 16 笔资料为第 2 类
第 17 笔资料为第 2 类
第 18 笔资料为第 1 类

结果如图:
https://ithelp.ithome.com.tw/upload/images/20211002/20141654MTx8Ga3Jcd.png
接下来我们就可以利用这些新的点去找中心点,然後再算距离分类,直到分类不再变动为止
好,今天讲解关於kmeans演算法程序一半,明天就要就继续後半段的程序码

狐狸抱着男子冲到了木屋里,顿时两个人都着起了火,男子不屑的冷笑,用手拨了拨身上的火焰,火焰瞬间被他吸收,因为火是他发出,它当然可以吸收,正当他得意看向狐狸却发现狐狸虽然被火焰燃烧,却像没事一般,而伤口在火烧之後结痂,不再流血,男子用一种奇怪的表情望向着狐狸,随即他弹了一个响指,火焰瞬间熄灭,只剩焦黑的木屋和对峙的两人,正当两人僵持不下时,屋外传来了歌声
		--|你相信了什麽?你忘记了什麽?|--  CS.MM

<<:  [2021铁人赛 Day17] General Skills 14

>>:  Day30-30天的心得与作者的心声

[18] [烧瓶里的部落格] 08. 撰写测试

写单元测试可以检查程序是否按预期执行,Flask 可以模拟发送请求并回传资料 应当尽可能多进行测试,...

问责制,审计和审计追踪(Accountability, Auditing, and Audit Trail)

审核跟踪通常被视为侦查控件。查看审核跟踪可以发现或发现入侵或不合规的活动。 根据ISO 14641:...

「Wordpress 外挂开发」多重roles延伸版本,你还需要自定义roles

替代user之中的roles显示 我们在昨天已经可以显示我们增加的使用,但是在检阅之中,并没有显示正...

C语言和你 SAY HELLO!!

第二天 各位点进来的朋友,你们好阿 一样废话不多说直接上内容啦~~ ----------------...

Day25-jQuery的一点小转场_会打开的搜寻栏

今天写一个简单的搜寻栏样式 有时候会在navbar上看到那种搜寻键,按下去後搜寻栏会拉开变出可以打字...