【Python-ML】SKlearn库密度聚类DBSCAN模型
生活随笔
收集整理的這篇文章主要介紹了
【Python-ML】SKlearn库密度聚类DBSCAN模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# -*- coding: utf-8 -*-
'''
Created on 2018年1月25日
@author: Jason.F
@summary: 無監督聚類學習-基于密度 空間的聚類算法(Density-based Spatial Clustering of Application with Noise,DBSCAN)
密度:半徑范圍內樣本點的數量
核心點:如果在一個點周邊的指定半徑內,其他樣本點的數量不小于指定數量(MinPts),則該樣本點為核心點
邊界點:在指定半徑內,如果一個點的鄰居點少于MinPts個,但卻包含一個核心點,則為邊界點
噪聲點:除核心點和邊界點外的樣本點都是噪聲點
DBSCAN的簇空間不一定是球狀的,可識別和移除噪聲點,因此不一定會將所有的樣本點都劃分到某一簇中
如果數據集中的密度差異相對較大,則找到半徑和MinPts較為困難。
'''
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import KMeans,AgglomerativeClustering,DBSCAN
X,y = make_moons(n_samples=200,noise=0.05,random_state=0)#創建半月形數據
plt.scatter(X[:,0],X[:,1])
plt.show()
f,(ax1,ax2) = plt.subplots(1,2,figsize=(8,3))
#原型聚類KMeans模型
km=KMeans(n_clusters=2,random_state=0)
y_km = km.fit_predict(X)
ax1.scatter(X[y_km==0,0],X[y_km==0,1],c='lightblue',marker='o',s=40,label='cluster 1')
ax1.scatter(X[y_km==1,0],X[y_km==1,1],c='red',marker='s',s=40,label='cluster 2')
ax1.set_title('K-means clustering')
#層次聚類凝聚模型
ac=AgglomerativeClustering(n_clusters=2,affinity='euclidean',linkage='complete')#全連接,歐式距離計算聯合矩陣
y_ac= ac.fit_predict(X)
ax2.scatter(X[y_ac==0,0],X[y_ac==0,1],c='lightblue',marker='o',s=40,label='cluster 1')
ax2.scatter(X[y_ac==1,0],X[y_ac==1,1],c='red',marker='s',s=40,label='cluster 2')
ax2.set_title('Agglomerative clustering')
plt.legend()
plt.show()
#密度聚類DBSCAN,成功對半月形數據進行分類
db =DBSCAN(eps=0.2,min_samples=5,metric='euclidean')#歐式距離,樣本點數量5,半徑0.2
y_db = db.fit_predict(X)
plt.scatter(X[y_db==0,0],X[y_db==0,1],c='lightblue',marker='o',s=40,label='cluster 1')
plt.scatter(X[y_db==1,0],X[y_db==1,1],c='red',marker='s',s=40,label='cluster 2')
plt.legend()
plt.show()'''
1、三種最基本的聚類方法:KMeans基于原型的聚類、凝聚層次聚類、使用DBSCAN基于密度的聚類。
2、其他方法:圖聚類(最突出方法使譜聚類算法),使用基于相似矩陣的特征向量來獲得簇間關系,參考:http://arxiv.org/pdf/0711.0189v1.pdf <A Tutorial on Spectral Clustering.Statistics and computing>
3、聚類算法取決于三個要素,算法、參數以及距離度量,而距離度量很容易面臨維度災難(curse of dimensionality)
'''
結果:
總結
以上是生活随笔為你收集整理的【Python-ML】SKlearn库密度聚类DBSCAN模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python-ML】SKlearn库层
- 下一篇: 【Python-ML】神经网络-多层感知