DAY21聚类演算法(DBSCAN)

昨天介绍完DBSCAN演算法,今天就要来写DBSCAN程序:
首先利用昨天创建好资料
https://ithelp.ithome.com.tw/upload/images/20211005/20141654ZJOF55Lv3W.png
首先先设置r = 10(半径) ;m=3(最小群数)
首先先创建距离函数:
程序如下:

#两笔data之间距离
def x_y_dist(data1,data2):
	return np.sqrt((data1[0]-data2[0])**2+(data1[1]-data2[1])**2)

接下来创建分类函数:
程序如下:

import copy

def check_data(data_index,check_index,z1=[]):
	L1=[]
	#在范围内资料就添加(不含自己)
	for j in data_index: 
		k=x_y_dist([label_data_x[check_index],label_data_y[check_index]],[label_data_x[j],label_data_y[j]])
		if k<=r and check_index!=j:
			L1.append(j)
	#若没有就说明范围内除了他和已排除点没有其他
	if len(L1)==0:
		return {check_index}
	#如果有就要看范围内其他点是否包含其他点
	else:
		z1.extend(L1)
		z1.append(check_index)
		L2=copy.deepcopy(L1)
		data_index_no=[i for i in data_index if i not in L2]
		for i in L2:
			#其他点带回来这个函数
			check_data(data_index_no,i,z1)
		return set(z1) 

创建好,之後就针对全部点去寻找,程序如下:

#针对所有点去分类
data_index_use=[i for i in range(len(label_data))]
label_set=[]
for i in range(len(label_data)):
	label_check=check_data(data_index_use,i,z1=[])
	#不要添加重复组
	if label_check not in label_set:
		label_set.append(label_check)
print(label_set)

所以就会得到结果:

[{0, 1, 7, 8, 17}, {9, 2, 10, 12}, {16, 3}, {11, 4, 5}, {15, 13, 6, 14}]

所以总共是分五组(原本照m=3)规则,即使{16,3}为一组也只能算局外点
(不过,因为就一组,所以还是帮他们上色-->实务在做,是不成一组都同一颜色)
接下来,就是绘图,程序如下:

color_used=[]
#创建随机颜色
for k in range(len(label_set)):
	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
for i in range(len(label_set)):
	#每一组资料颜色分类
	for j in label_set[i]:
		plt.scatter(label_data_x[j],label_data_y[j],color=color_used[i])
plt.show()

所以图如下:
https://ithelp.ithome.com.tw/upload/images/20211005/20141654aMn6NZOdHy.png
这下了分类就完成,好,今天完成了DBSCAN,明天就来研究神经网路

狐狸起身往男孩右方走去,男子往左方走去,对男孩形成包夹之势,然後慢慢靠近男孩,慢慢靠近…,突然两人同时冲向男孩,只是娃娃一抬手,两人飞了出去,但狐狸在空中一个扭身,又瞬间冲向男孩,娃娃来不急抬手,被狐狸的爪子给打飞了出去,男子接住了飞过来的娃娃,随即娃娃全身着火,但娃娃看起来像是没事,而男孩却身体开始着火并痛苦的倒下

           --|一起感受火烧的痛苦以及余烬的感觉|--  MC.SM

<<:  成为海贼王的试炼就此展开

>>:  第20车厢-你知道slick.js轮播套件可以这样用?

安装开发环境-Visual Studio Code

开发环境可以使用的有很多,选择一个适合自己,能够让自己方便、习惯使用的就好。 由於去年开始写line...

[DAY07] 开始用 Designer 在 Azure Machine Learning 做 AI

DAY07 开始用 Designer 在 Azure Machine Learning 做 AI 我...

Day24 - 铁人付外挂实作付款类别(三)- 接收回传资料

完成付款请求之後,接下来是准备好接收金流商回传资讯的 Response 类别,目前外挂的资料夹结构如...

Day35:HTML(32)响应式网站(2)

响应文字大小 可以使用“ vw”单位设置文本大小,即“视口宽度”。 这样,文本大小将遵循浏览器窗口的...

网路的小技巧-3

//兴趣记录一下~希望退休以後可以回味,各位别嫌弃,感谢各位!! /// //三家分公司互连 图(一...