機器學習之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、算法流程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM