初探DBSCAN聚类算法
2021/5/22 12:25:42
本文主要是介绍初探DBSCAN聚类算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
DBSCAN介绍
一种基于密度的聚类算法
他最大的优势是可以发现任意形状的聚类簇,而传统的聚类算法只能使用凸的样本聚集类
两个参数:
邻域半径R和最少点数目minpoints。
当邻域半径R内的点的个数大于最少点数目minpoints时,就是密集。
补充:根据经验计算半径R
根据得到的所有点的k-距离集合E,对集合E进行升序排序后得到k-距离集合E’,需要拟合一条排序后的E’集合中k-距离的变化曲线图,然后绘出曲线,通过观察,将急剧发生变化的位置所对应的k-距离的值,确定为半径Eps的值。
3种点的类别:核心点,边界点和噪声点。
邻域半径R内样本点的数量大于等于minpoints的点叫做核心点。不属于核心点但在某个核心点的邻域内的点叫做边界点。既不是核心点也不是边界点的是噪声点。
sklearn实例
官方文档 <---
生成样本点
import numpy as np import pandas as pd from sklearn import datasets %matplotlib inline X,_ = datasets.make_moons(500,noise = 0.1,random_state=1) df = pd.DataFrame(X,columns = ['feature1','feature2']) df.plot.scatter('feature1','feature2', s = 100,alpha = 0.6, title = 'dataset by make_moon')
调用dbscan接口完成聚类
from sklearn.cluster import dbscan # eps为邻域半径,min_samples为最少点数目 core_samples,cluster_ids = dbscan(X, eps = 0.2, min_samples=20) # cluster_ids中-1表示对应的点为噪声点 df = pd.DataFrame(np.c_[X,cluster_ids],columns = ['feature1','feature2','cluster_id']) df['cluster_id'] = df['cluster_id'].astype('i2') df.plot.scatter('feature1','feature2', s = 100, c = list(df['cluster_id']),cmap = 'rainbow',colorbar = False, alpha = 0.6,title = 'DBSCAN cluster result')
自己改的例子,比较好理解
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn import datasets %matplotlib inline #生成数据 X=np.empty((100,2)) X[:,0]=np.random.uniform(0.,100.,size=100) X[:,1]=0.75*X[:,0]+3+np.random.normal(0,10,size=100) plt.scatter(X[:,0],X[:,1]) plt.show() df=pd.DataFrame(X,columns=['feature1','feature2']) df.plot.scatter('feature1','feature2') print(df) #调用DBSCAN接口完成聚类 from sklearn.cluster import dbscan # eps为邻域半径,min_samples为最少点数目 core_samples,cluster_ids = dbscan(X, eps = 10, min_samples=3) df = pd.DataFrame(np.c_[X,cluster_ids],columns = ['feature1','feature2','cluster_id']) # df['cluster_id'] = df['cluster_id'].astype('i2') #这个有啥用啊 df.plot.scatter('feature1','feature2', s = 100, c = list(df['cluster_id']),cmap = 'rainbow',colorbar = False, alpha = 0.6,title = 'DBSCAN cluster result')
这篇关于初探DBSCAN聚类算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28pyqt 怎么打包整个项目-icode9专业技术文章分享
- 2024-09-28laravel Commands 创建带有参数的 Artisan 命令的步骤和示例-icode9专业技术文章分享
- 2024-09-28antd怎么实现渲染tiff图片-icode9专业技术文章分享
- 2024-09-28英文半角中划线和中文全角的中划线有什么区别-icode9专业技术文章分享
- 2024-09-28nvm npm 和node 他们之间有什么关系-icode9专业技术文章分享
- 2024-09-28Node Version Manager (nvm)使用教程-icode9专业技术文章分享
- 2024-09-28nvm命令太慢,是什么原因-icode9专业技术文章分享
- 2024-09-28Kotlin 如何增加、删除和修改 MutableStateFlow 中的值。-icode9专业技术文章分享
- 2024-09-28Kotlin的stateFlow.update 写法介绍-icode9专业技术文章分享
- 2024-09-28kotlin 怎么获取当前时间格式-icode9专业技术文章分享