• 机器学习之DBSCAN聚类算法


    可以看该博客:https://www.cnblogs.com/aijianiula/p/4339960.html

    1、知识点

    """
    基本概念:
        1、核心对象:某个点的密度达到算法设定的阈值则其为核心点(即r邻域内点的数量不小于minpts)
        2、邻域的距离阈值:设定的半径r
        3、直接密度可达:某点p在点q的r邻域内,且q是核心点,则表示p-q是直接密度可达
        4、噪声点:不属于任何一个类族的点
        5、边界点:属于某一个类的非核心点,不能发展下线(即边界点没有密度可达的点)
    超参:指定的半径r,密度阈值minpts
    
    算法优势:
            1、不需要指定簇个数
            2、可以发现任意形状的簇
            3、擅长找到离群点(检测任务)
            4、两个参数就够了
        劣势:
            1、高维数据有写困难(可以使用PCA和LDA进行数据降维)
            2、参数难以选择(参数对结果的影响非常大)
            3、sklearn中效率很慢(数据削减策略)
    
    和K-Mean对比:效果比K-Mean好很多
    """

    2、代码案例

    #可以对数据进行标准化或者归一化
    
    import  pandas as pd
    from sklearn.cluster import KMeans
    
    from sklearn.cluster import DBSCAN
    
    def KMean():
        data = pd.read_csv('data.txt',sep=' ')
        X = data[["colum1","column2","column3"]]
        km1 = KMeans(n_clusters=3).fit(X)
        km1 = KMeans(n_clusters=2).fit(X)
    
        print(km1.labels_)#查看聚类的类别
        data['cluster']=km1.labels_ #添加一列
        print(data.sort_values('cluster'))#按cluster进行排序
    
        #根据cluster,计算均值
        print(data.groupby('cluster').mean())
    
    def DBSCAN():
        data = pd.read_csv('data.txt', sep=' ')
        X = data[["colum1", "column2", "column3"]]
        db = DBSCAN(eps=1.0,min_samples=2).fit(X)
        labels = db.labels_
        data['cluster'] = labels
        data.sort_values('cluster')
    
    
    if __name__ == '__main__':
        DBSCAN()

    3、算法流程

  • 相关阅读:
    答读者问(10):有关对博客的评价及个人技术发展路线等问题
    EasyUI学习之menu and button(菜单和按钮)
    二分查找
    【Android UI】色板
    很好的理解遗传算法的样例
    关于提高UDP发送效率的方法
    Log4cpp介绍及使用
    四个好看的CSS样式表格
    SpringMVC+easyUI 分页,查询 (完整的CRUD)
    [MODX] 1. Template *
  • 原文地址:https://www.cnblogs.com/ywjfx/p/11062676.html
Copyright © 2020-2023  润新知