昨天介绍完DBSCAN演算法,今天就要来写DBSCAN程序:
首先利用昨天创建好资料
首先先设置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()
所以图如下:
这下了分类就完成,好,今天完成了DBSCAN,明天就来研究神经网路
狐狸起身往男孩右方走去,男子往左方走去,对男孩形成包夹之势,然後慢慢靠近男孩,慢慢靠近…,突然两人同时冲向男孩,只是娃娃一抬手,两人飞了出去,但狐狸在空中一个扭身,又瞬间冲向男孩,娃娃来不急抬手,被狐狸的爪子给打飞了出去,男子接住了飞过来的娃娃,随即娃娃全身着火,但娃娃看起来像是没事,而男孩却身体开始着火并痛苦的倒下
--|一起感受火烧的痛苦以及余烬的感觉|-- MC.SM
>>: 第20车厢-你知道slick.js轮播套件可以这样用?
开发环境可以使用的有很多,选择一个适合自己,能够让自己方便、习惯使用的就好。 由於去年开始写line...
DAY07 开始用 Designer 在 Azure Machine Learning 做 AI 我...
完成付款请求之後,接下来是准备好接收金流商回传资讯的 Response 类别,目前外挂的资料夹结构如...
响应文字大小 可以使用“ vw”单位设置文本大小,即“视口宽度”。 这样,文本大小将遵循浏览器窗口的...
//兴趣记录一下~希望退休以後可以回味,各位别嫌弃,感谢各位!! /// //三家分公司互连 图(一...