可以看該博客: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、算法流程