机器学习之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、算法流程

原文地址:https://www.cnblogs.com/ywjfx/p/11062676.html