密度聚类算法DBSCAN实战及可视化分析

目录

密度聚类算法DBSCAN实战及可视化分析

DBSCAN实战及聚类效果可视化

构建分类算法获得预测推理能力


DBSCAN实战及聚类效果可视化

DBSCAN算法将数据集定义为高密度的连续区域,下面是它的工作原理:

对于每个实例,我们计算有多少实例位于离它很小的距离内(这个区域称为-邻域)。如果一个实例在它的-邻域中有≥min_samples实例,那么它被认为是一个核心实例。核心实例是那些位于密集区域的实例。

核心实例附近的所有实例都属于同一个族群。这个邻域可能包括其他核心实例。因此,相邻核心实例的长序列形成单个集群。

任何不是核心实例且在其邻域中没有核心实例的实例都被视为异常。

如果所有簇足够密集,并且它们被低密度区域很好地分隔,DBSCAN工作得很好。

#

from sklearn.cluster import DBSCAN
from sklearn.datasets import make_moonsX, y = make_moons(n_samples=1000, noise=0.05)
X.shape, y.shape
((1000, 2), (1000,))

#

dbscan = DBSCAN(eps=0.05, min_samples=5)dbscan.fit(X)
DBSCAN(algorithm='auto', eps=0.05, leaf_size=30, metric='euclidean',metric_params=None, min_samples=5, n_jobs=None, p=None)

#获取聚类的预测标签

dbscan.labels_[:5]
array([0, 0, 1, 0, 2])

#如果样本的标签被标注为-1,那么意味着在DBSCAN算法看来该样本是一个异常样本;

# 获得核心样本的个数;

len(dbscan.core_sample_indices_)

#

# actual core instances coords
dbscan.components_
array([[ 1.97735134,  0.16746005],[ 1.73191549, -0.24587221],[ 0.04933691,  0.09386341],...,[ 0.9702814 ,  0.18676075],[-0.77970719,  0.60591176],[ 0.39840368,  0.90286737]])

#可视化DBSCAN聚类的效果

plt.figure(figsize=(12, 8))
plt.scatter(X[:, 0], X[:, 1], c=dbscan.labels_)
plt.axis('off')
plt.show()

# 增大算法的临域值重新进行可视化分析

dbscan = DBSCAN(eps=0.2, min_samples=5)dbscan.fit(X)
DBSCAN(algorithm='auto', eps=0.2, leaf_size=30, metric='euclidean',metric_params=None, min_samples=5, n_jobs=None, p=None)
plt.figure(figsize=(12, 8))
plt.scatter(X[:, 0], X[:, 1], c=dbscan.labels_)
plt.axis('off')
plt.show()

构建分类算法获得预测推理能力

# DBSCAN没有针对新实例的predict()方法,因此,我们将在训练目标上训练一个分类器来对新实例进行分类。

# 训练样本为DBSCAN聚类获得的核心实例,以及他们对应的聚类标签;

from sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier(n_neighbors=50)knn.fit(dbscan.components_, dbscan.labels_[dbscan.core_sample_indices_])
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',metric_params=None, n_jobs=None, n_neighbors=50, p=2,weights='uniform')
X_new = np.array([[-0.5, 0.], [0, 0.5], [1, -0.1], [2, 1]])knn.predict(X_new)knn.predict_proba(X_new)
array([1, 0, 1, 0])
array([[0.22, 0.78],[1.  , 0.  ],[0.18, 0.82],[1.  , 0.  ]])

注意,我们只在核心实例上训练分类器,但我们也可以选择在所有实例上训练分类器,或者在异常之外的所有实例上训练分类器。这取决于最后的任务。

因为我们没有在异常上训练我们的分类器,所以任何新的实例都将被放入我们的已知的聚类簇中。

引入一个最大距离是相当简单的,在这种情况下,远离两个簇的那两个实例就会被归类为异常样本。

y_dist, y_pred_idx = knn.kneighbors(X_new, n_neighbors=1)y_pred = dbscan.labels_[dbscan.core_sample_indices_][y_pred_idx]y_pred[y_dist > 0.2] = -1y_pred.ravel()
array([-1,  0,  1, -1])

简而言之,DBSCAN是一个非常简单但强大的算法,能够识别任意形状的任意数目的集群。它对离群点具有鲁棒性,并且只有两个超参数(eps和min_samples)。

如果聚类簇之间的密度差异很大,那么它就不可能正确地捕捉所有的聚类簇。

Its computational complexity is roughly 

密度聚类算法DBSCAN实战及可视化分析相关推荐

  1. python网管系统_IT外包网管服务,Python密度聚类算法-DBSCAN实践

    蓝盟 IT小贴士,来喽! 可以看出,a点附近的点密度大,红色的圆按照一定的规则在这里滚动,最终收纳a点附近的5点,标记为红色是同一个簇. 其他没有收纳的东西,按照相同的规则进行集群化. 从图像上来看, ...

  2. 【机器学习】聚类算法DBSCAN、K-means、Mean Shift对比分析及具体代码实现

    [机器学习]聚类算法DBSCAN.K-means.Mean Shift对比分析及具体代码实现 一.DBSCAN算法(具有噪声的基于密度的聚类方法) 1.算法原理 基于数据分布密度不同对数据进行聚类,把 ...

  3. 机器学习实战——密度聚类算法

    机器学习实战--密度聚类算法 1 密度聚类 2 sklearn中的实现 1 密度聚类 密度聚类假设聚类结构能够通过样本分布的密集程度确定,通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连接 ...

  4. 高斯混合模型图像聚类、图像生成、可视化分析实战

    高斯混合模型图像聚类.图像生成.可视化分析实战 目录 高斯混合模型图像聚类.图像生成.可视化分析实战 PCA图像数据降维

  5. 密度聚类之DBSCAN算法原理

    DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-M ...

  6. R密度聚类之DBSCAN模型

    R密度聚类之DBSCAN模型 目录 R密度聚类之DBSCAN模型 密度聚类DBSCAN 模型构建及分析

  7. 基于密度聚类算法的改进

    基于密度算法的改进 本篇博客来自我的github小项目,如果对您有帮助,希望您前去点星 ! 使用基于密度的聚类算法,进行高维特征的聚类分析,从高维数据中提取出类似的有用信息,从而简化了特征数量,并且去 ...

  8. 机器学习之密度聚类算法

    基于密度的聚类算法假设聚类结构能够通过样本分布的紧密程度确定,以数据集在空间分布上的稠密程度为依据进行聚类,即只要一个区域中的样本密度大于某个阈值,就把它划入与之相近的簇中. 密度聚类从样本密度的角度 ...

  9. 唐宇迪学习笔记20:聚类算法——DBSCAN

    目录 一.DBSCAN聚类算法 (Density-Based Spatial Clustering of Applications with Noise) 二.DBSCAN工作流程 工作流程 参数选择 ...

最新文章

  1. 胖子哥的大数据之路(10)- 基于Hive构建数据仓库实例
  2. 模拟图书管理系统的完整代码
  3. 云服务器怎么打开_香港云服务器怎么样?
  4. QT学习:多线程控制
  5. 【python】numpy库linspace相同间隔采样 详解
  6. boost 容器tuple 信号signal2测试
  7. APP软件半成品测试技巧
  8. 【VSLAM学习记录2】初识cmake
  9. 推荐软件——total commander(善用佳软)
  10. tlwn726n无线网卡Linux驱动,tl-wn726n无线网卡驱动下载
  11. Android一行代码去掉百度导航的底部工具箱菜单
  12. 设计一个高性能三维渲染服务器,最强大脑-CATIA飞机协同设计制造工作站配置方案2016...
  13. 详解CPU的主频、核心、线程、缓存、架构
  14. windows10升级windows11后微信等软件无法连接网络
  15. 执行rm -rf /效果
  16. 复杂表格巧拆分(转)
  17. UIView 绘制渲染机制
  18. oracle中把一个表中的数据更新到新表中
  19. hyper-v虚拟机常用命令
  20. 不要讨要共享单车押金了,没用

热门文章

  1. JavaScript的语言标准
  2. 使用python3 实现将网页或者文件导出至pdf 文件
  3. ci持续集成工程师前景_持续集成CI---失败原因
  4. 为什么重新new两个线程线程号相同_C++ 20中的新线程(jthread)功能
  5. 天线3db波束宽度_天线的主瓣波束宽度越窄天线增益越高.PPT
  6. 3D 人体姿态估计简述
  7. 一种实时轻量级3D人脸对齐方法
  8. 清华教授透漏:博士生6年不毕业或将影响信用记录,并将影响贷款
  9. Python的学习过程中not enough values to unpack (expected 2, got 1)解决方案
  10. CVPR2021 | 实现图像的“无限放大”,超详细局部隐式图像函数(LIIF)解读