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