• 基于密度的聚类DBSCAN(机器学习)


    目录

    一、实验内容

    二、实验过程

    1、算法思想

    2、算法原理

    3、算法分析

    三、源程序代码

    四、运行结果及分析

    五、实验总结 


     

    一、实验内容


    1. 掌握基于密度的聚类方法的基本思想;
    2. 掌握DBSCAN算法的原理;
    3. 掌握DBSCAN算法的设计及Python实现。

    二、实验过程


    1、算法思想


            DBSCAN采用居于中心的密度定义,居于密度的聚类算法是根据密度而不是距离来计算样本相似度,将样本中的高密度区域划分为簇。

    2、算法原理


            DBSCAN算法根据密度可达关系求出所有密度相连样本的最大集合,将这些样本点作为同一个簇。

    3、算法分析


    (1)从样本中选择一点,给定半径epsilon和圆内的最小近邻点数min_points。

    (2)如果该点满足在其半径为epsilon的邻域圆内至少有min_points个近邻点,则将圆心转移到下一样本点。

    (3)若一样本点不满足上述条件,则重新选择样本点。按照设定的半径epsilon和min_points进行迭代聚类。

    三、源程序代码


    1. # -*- coding: utf-8 -*-
    2. """
    3. ===================================
    4. Demo of DBSCAN clustering algorithm
    5. ===================================
    6. Finds core samples of high density and expands clusters from them.
    7. """
    8. print(__doc__)
    9. import numpy as np
    10. from sklearn.cluster import DBSCAN
    11. from sklearn import metrics
    12. #from sklearn.datasets.samples_generator import make_blobs
    13. from sklearn.datasets import make_blobs
    14. from sklearn.preprocessing import StandardScaler
    15. import matplotlib.pyplot as plt
    16. plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    17. plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    18. # #############################################################################
    19. # Generate sample data
    20. centers = [[1, 1], [-1, -1], [1, -1]]
    21. X, labels_true = make_blobs(n_samples=750, centers=centers, cluster_std=0.4, random_state=0)
    22. X = StandardScaler().fit_transform(X)
    23. # Compute DBSCAN
    24. db = DBSCAN(eps=0.3, min_samples=10).fit(X)
    25. core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
    26. core_samples_mask[db.core_sample_indices_] = True
    27. labels = db.labels_
    28. n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
    29. print('Estimated number of clusters: %d' % n_clusters_)
    30. print("Homogeneity: %0.3f" % metrics.homogeneity_score(labels_true, labels))
    31. print("Completeness: %0.3f" % metrics.completeness_score(labels_true, labels))
    32. print("V-measure: %0.3f" % metrics.v_measure_score(labels_true, labels))
    33. print("Adjusted Rand Index: %0.3f"
    34. % metrics.adjusted_rand_score(labels_true, labels))
    35. print("Adjusted Mutual Information: %0.3f"
    36. % metrics.adjusted_mutual_info_score(labels_true, labels))
    37. print("Silhouette Coefficient: %0.3f"
    38. % metrics.silhouette_score(X, labels))
    39. # #############################################################################
    40. # Black removed and is used for noise instead.
    41. unique_labels = set(labels)
    42. colors = [plt.cm.Spectral(each)
    43. for each in np.linspace(0, 1, len(unique_labels))]
    44. for k, col in zip(unique_labels, colors):
    45. if k == -1:
    46. # Black used for noise.
    47. col = [0, 0, 0, 1]
    48. class_member_mask = (labels == k)
    49. xy = X[class_member_mask & core_samples_mask]
    50. plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
    51. markeredgecolor='k', markersize=14)
    52. xy = X[class_member_mask & ~core_samples_mask]
    53. plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
    54. markeredgecolor='k', markersize=6)
    55. plt.title('估计类的数量: %d' % n_clusters_)
    56. plt.show()

    四、运行结果及分析


    五、实验总结 


            DBSCAN算法的优缺点,它的优点是可以适用非凸数据集,能够发现异常点;它的缺点体现在应对密度不均匀、样本距离相差很大的数据集效果不好;样本集规模较大时,聚类时间较长

  • 相关阅读:
    vue深入响应式原理
    Spark Streaming(二)
    【分享】小红书采集图片下载到本地
    JVM报错GC overhead limit exceeded
    linux文件输入输出的重定向
    软件测试我培训完两周了,现在只面试了一家公司,上海这边今年招测试的公司好少,好焦虑啊,怎么办?
    深度学习10——卷积神经网络
    Java(七)——集合框架---Set集合
    电阻代码的谐音助记口诀
    34岁上岸,我终于圆了自己的考研梦
  • 原文地址:https://blog.csdn.net/qq_50942093/article/details/127271018