DAY20聚类演算法(DBSCAN)

昨天介绍完kmeans演算法程序,今天就要介绍DBSCAN演算法:
基本上他是根据资料点的密度进行聚类, 演算法会把附近的点分成一组(有很多相邻点的点)并找出局外点,把他剃除,而他有一个好处,就是他一开始不用告知要分几类,而是从资料来判断是否为同一类,基本上演算法如下:
由数值点为半径划出的圆型区域,然後看这个区域是是否有包含其他点(数量如果超过最低点)-->就称他们为同一类别
https://ithelp.ithome.com.tw/upload/images/20211004/20141654mPOcHlyite.png
(图片来源: https://www.itread01.com/content/1544121185.html)
演算法如下:
1.先设定好一个点半径R和高密度点最少要M个点(也就是设定R和M)
https://ithelp.ithome.com.tw/upload/images/20211004/20141654JbxOewOwpI.png
2.先随机选一点P,然後对其画出一个圆,然後看他范围内是否满足M个点(包含自己)-->如果有则建立新聚类,没有就找寻下一个非聚类点
3.如果有新聚类产生,要针对他P点聚类范围内所有点,在画出一个圆,然後看有没有点被添加(如果有,新的点也要画出一个圆,然後看里面有没有再被添加,重复这个过程,直到范围内没有其他点),及视为一个聚类
4.重复2,3直到点全部分割完,遗留下来点,就称为局外点
好了演算法就写到这,明天再想想该如何去写这个演算法:
先写好之前程序绘图(拿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/20211004/20141654cfa4jvbCif.png

男孩看着娃娃,又看了狐狸一眼,只见狐狸茫然坐到地上,下一秒,狐狸突然开始不断往男孩方向冲刺,只是每当他想撞过来时,都被娃娃伸手弹开,狐狸露出牙齿对着娃娃低吼,娃娃只是面无表情看着他,这时男子优雅往狐狸方向走过去,并对牠伸出了手,狐狸怒瞪了男子一眼,但随即伸出手握住了男子
              --|我不容许背叛/我容许合作|--  MS.CM/CS.MM

<<:  [火锅吃到饱-12] 温野菜日本涮涮锅专门店 Taiwan On-Yasai @秀泰-台中站前店

>>:  [Day19] 与问题成员对话-案例一: 正弦哥

Day 30 - [结論] 总整理与建议

台湾老年人口的比例越来越高,随之而来的便是民众对长照的需求。政府提出了长照 2.0 的计画,资源与服...

Day 12 CSS <圆角边框、盒子阴影>

圆角边框 使用border-radius圆角边框样式,可以修改盒子边框变成圆角 语法: border...

资安入门

资讯安全是透过安全管制措施来保护资讯资产免於受到危害,以达到机密性、完整性和可用性(即常听到的CI...

Day11. 活用 Ruby Class

Class 是Ruby很重要的观念,要学习 Ruby 的一定要学会class & 物件。我们...

[Day15] Flutter with GetX Wrap & Chip

Wrap & Chip 原生的Widget, 对於之前接触iOS的人来说一开始看到有惊讶一下...