• 机器学习入门-DBSCAN聚类算法


    DBSCAN 聚类算法又称为密度聚类,是一种不断发张下线而不断扩张的算法,主要的参数是半径r和k值

    DBSCAN的几个概念:

    核心对象:某个点的密度达到算法设定的阈值则其为核心点,核心点的意思就是一个点在半径r的范围内,如果存在k个值,那么这个点就成为核心对象

    直接密度可达:若点p在q的邻域内,且q是核心,则p-q称为直接密度可达

    密度可达:若有q1, q2...qk,对任意qi与qi-1是直接密度可达,从q1和qk则是密度可达

    边界点: 属于一个类的非核心点,不能再发展下线

    噪声点: 不属于任意一类簇的点,从一个核心点出发是密度不可达

    工作流程

    参数D:数据数据集

    参数R:指定半径

    Minpts:密度阈值

    停止条件:所有的点都遍历结束后停止,即所有的点都不是核心点

    第一步:标记所有的对象为未遍历的点

    第二步:随机选择一个初始点

    第三步:如果R的领域内,有k个点的话,就创建一个新簇,将p添加到这个簇里C

    第四步:遍历这个簇里的p个点,如果p为unvisited标记为visited,把这些对象添加到N,如果p不是任何簇的成员,把p添加到C

    第五步:如果存在任意点不属于任何一个簇,即为噪声点

    第六步:直到遍历完所有的点

    这是一种不断遍历和发展下线的过程

    优势:

          不需要指定簇的个数

           可以发现任意形状的簇

           擅长找到离群点

           两个参数就够了

    劣势:

           高维数据有些困难(可以做降维)

           参数难以选择(参数对结果的影响很大)

            sklearn效率很慢(数据削减策略),由于数据量很大,我们可以去除一部分相似的数据

     代码:使用sklearn中的DBSCAN进行计算,使用scatter_matrix进行画图

    第一步:数据导入

    第二步:特征提取

    第三步:模型训练和测试

    第四步:使用轮廓系数进行评估

    第五步:使用scatter_matrix画出两两变量的散点图

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 第一步导入数据
    data = pd.read_csv('data.txt', sep=' ')
    # 第二步提取特征
    X = data[['calories', 'sodium', 'alcohol', 'cost']]
    
    # 设置颜色列表
    colors = np.array(['red', 'blue', 'green', 'black'])
    from sklearn.cluster import DBSCAN
    from pandas.tools.plotting import scatter_matrix
    from sklearn.metrics import silhouette_score
    
    # 3.模型训练和测试
    labels = DBSCAN(eps=10, min_samples=2).fit(X).labels_
    # 4. 输出轮廓系数得分
    score = silhouette_score(X, labels)
    # 5. 画scatter_matrix图
    scatter_matrix(X, c=colors[labels], s=50, figsize=(10, 10))
    plt.show()

          

  • 相关阅读:
    java 自定义异常输出信息(使用构造器)
    idea 项目java版本选项位置
    编译、安装rdesktop 1.8.3
    ubuntu下编译源码 make 出现 make: 'Makefile' is up to date.
    ubuntu 图形化界面 gui 桌面版 root登录 sorry,that didn't work.please try again! 抱歉,认证失败。请重试
    MIUI 10 已连接 但无法访问互联网 的解决方案
    idea中 和outline相似的功能
    idea web项目debug模式实时更新按钮不生效原因
    javaweb学习总结二(静态导入、自动拆装箱、增强for与可变参数)
    javaweb学习总结一(eclipse常用快捷键、debug调试以及junit测试框架)
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/10297564.html
Copyright © 2020-2023  润新知