9.1.6 DBSCAN聚類演算法————機器學習實戰第二版
一、工作原理
- 對於每個例項,該演算法都會計算在它一小段距離內 ε \varepsilon ε 內有多少個例項。該區域稱為例項的 ε − \varepsilon- ε− 鄰域。
- 如果一個例項在其 ε \varepsilon ε 鄰域內至少包含 min_samples 個例項(包含自身),則該例項為核心例項。
- 核心例項附近的所有例項都屬於同一叢集。這個鄰域可能包括其他核心例項。因此,一長串相鄰的核心例項形成一個叢集。
- 任何不是核心例項且鄰居中沒有核心例項的例項都被視為異常
二、引數
sklearn中引數詳解:詳解
兩個重要引數:
- eps: ε \varepsilon ε 的大小
- min_samples : 核心例項中至少包含的例項個數
三、變數
sklearn.dataset中的make_moons()函式:連結
make_circles()函式與make_moons()函式相似
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons,make_circles
X,y = make_moons(n_samples = 1000,noise = 0.05)
make_moons()生成資料為:
make_circles()生成資料為:
DBSCAN物件的變數:
- labels_ : 每個例項的叢集標籤。異常例項的叢集標籤為-1
- core_sample_indices_ : 包含每個例項的索引
- components_ : 可以得到核心例項本身
X,y = make_moons(n_samples = 100 ,noise = 0.1)
dbscan = DBSCAN(eps = 0.2,min_samples =2).fit(X)
labels_ = dbscan.labels_
print("標籤為:{}".format(labels_))
len_ = len(dbscan.core_sample_indices_)
print("核心例項個數為:{}".format(len_))
data = dbscan.components_
print("核心例項:{}".format(data))
結果為:
四、程式碼
1.難點
- matplotlib折線圖:詳解
1. 導包
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons,make_circles
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
2. 資料集
X,y = make_moons(n_samples = 1000 ,noise = 0.1)
X2,y2 = make_circles(n_samples = 1000,noise = 0.025)
3. 函式
#引數:eps_為鄰域大小,min_sample_為核心例項鄰域中最小例項數目,X_為資料集;本次用了兩個資料集
def DBscan(eps_,min_sample_,X_):
#建立模型並訓練
dbscan = DBSCAN(eps = eps_,min_samples =min_sample_).fit(X_)
#繪製散點圖時的c引數,大小和點的個數一樣,即dbscan的變數core_sample_indices的len:len(dbscan.core_sample_indices_)
mask = np.arange(len(dbscan.core_sample_indices_))
#mask內為每個非異常例項的叢集索引,異常例項的叢集索引為-1;
#在dbscan的core_sample_indices和components變數中並沒有出現異常例項,直接被演算法過濾掉了。
for idx,i in enumerate(dbscan.core_sample_indices_):
mask[idx] = dbscan.labels_[i]
#畫散點圖
plt.scatter(dbscan.components_[:,0],dbscan.components_[:,1],c = mask)
#標題
plt.title("eps = {},min_samples = {}".format(eps_,min_sample_))
4. 呼叫函式
對每個資料集分別除錯兩組引數,第二組引數效果較好,也就是第三列
plt.figure(figsize = (12,8))
plt.subplot(231)
plt.scatter(X[:,0],X[:,1],c = y)
plt.title("Original data")
plt.subplot(232)
DBscan(0.05,5,X)
plt.subplot(233)
DBscan(0.1,5,X)
plt.subplot(234)
plt.scatter(X2[:,0],X2[:,1],c = y2)
plt.title("Original data2")
plt.subplot(235)
DBscan(0.05,7,X2)
plt.subplot(236)
DBscan(0.07,7,X2)
plt.show()
結果為:
相關文章
- 【Python機器學習實戰】聚類演算法(2)——層次聚類(HAC)和DBSCANPython機器學習聚類演算法
- 機器學習——dbscan密度聚類機器學習聚類
- 機器學習-聚類分析之DBSCAN機器學習聚類
- 初探DBSCAN聚類演算法聚類演算法
- DBSCAN密度聚類演算法聚類演算法
- 聚類之dbscan演算法聚類演算法
- 深度解讀DBSCAN聚類演算法:技術與實戰全解析聚類演算法
- 【Python機器學習實戰】聚類演算法(1)——K-Means聚類Python機器學習聚類演算法
- MVO優化DBSCAN實現聚類優化聚類
- 聚類演算法——DBSCAN演算法原理及公式聚類演算法公式
- 《機器學習實戰》kMeans演算法(K均值聚類演算法)機器學習演算法聚類
- 20分鐘學會DBSCAN聚類演算法聚類演算法
- 【無監督學習】2:DBSCAN聚類演算法原理聚類演算法
- 演算法金 | K-均值、層次、DBSCAN聚類方法解析演算法聚類
- 用scikit-learn學習DBSCAN聚類聚類
- DBSCAN聚類演算法(Density-Based Spatial Clustering of Applications with Noise)聚類演算法APP
- Python+sklearn使用DBSCAN聚類演算法案例一則Python聚類演算法
- 《機器學習實戰》二分-kMeans演算法(二分K均值聚類)機器學習演算法聚類
- 機器學習Sklearn系列:(五)聚類演算法機器學習聚類演算法
- 程式設計實現DBSCAN密度聚類演算法,並以西瓜資料集4.0為例進行聚類效果分析程式設計聚類演算法
- 機器學習演算法實戰:使用聚類演算法統計美國國會不同議員的投票主張機器學習演算法聚類
- 機器學習演算法筆記之8:聚類演算法機器學習演算法筆記聚類
- 機器學習之k-means聚類演算法(python實現)機器學習聚類演算法Python
- 機器學習(8)——其他聚類機器學習聚類
- 《資料分析實戰-托馬茲.卓巴斯》讀書筆記第4章-聚類技巧(K均值、BIRCH、DBSCAN)筆記聚類
- 機器學習 之 層次聚類機器學習聚類
- 機器學習入門|聚類(二)機器學習聚類
- 用Spark和DBSCAN對地理定位資料進行聚類Spark聚類
- 聚類演算法聚類演算法
- 【機器學習】:Kmeans均值聚類演算法原理(附帶Python程式碼實現)機器學習聚類演算法Python
- 01-kNN演算法實戰-(機器學習實戰)KNN演算法機器學習
- 聚類之K均值聚類和EM演算法聚類演算法
- 聚類(part3)--高階聚類演算法聚類演算法
- 機器學習中的聚類演算法演變及學習筆記機器學習聚類演算法筆記
- 機器學習—聚類5-1(K-Means演算法+瑞士捲)機器學習聚類演算法
- 【機器學習】K-means聚類分析機器學習聚類
- 機器學習實戰6(SMO演算法)機器學習演算法
- kmeans聚類演算法matlab實現聚類演算法Matlab