iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0

昨天介紹完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

上一篇
DAY20聚類演算法(DBSCAN)
下一篇
DAY22神經網路
系列文
數據分析方法研究和理解演算法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言