本單元以鳶尾花資料集演示如何在Python裡實作基於密度的分群方式DBSCAN。文末提供程式檔案,歡迎有興趣的朋友下載練習。
(一) 引入模組及準備資料
要做DBSCAN,我們可以採用Scikit Learn裡面已經完成好的模組,在sklearn.cluster底下的DBSCAN。另外,為了視覺化我們會引入matplotlib裡面的pyplot 。今天我們會採用Scikit Learn資料集裡面所提供的的鳶尾花資料集。
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.cluster import DBSCAN
為了視覺化,今天我們僅採用花瓣的長度及寬度當作我們的特徵資料。非常鼓勵大家採用自己的資料練習看看唷!
iris=datasets.load_iris()
X=iris.data
X=X[:,2:4]
(二)建模及分類結果
在DBSCAN的實作中,有兩個主要的參數,分別為eps與min_sample。eps代表著圓的半徑,min_samples代表著以核心點為圓心的圓裡面所需包含的最小樣本數。若eps愈小,min_sample愈大,則代表著我們對樣本密度的要求較高。反之,若取eps大,min_sample卻很小,代表著我們對樣本密度的要求較低。而這些參數的大小,應綜合考量樣本本身以及我們自身的需求而給定。
建模:clustering=DBSCAN(eps=0.3,min_samples=10).fit(X)
分群結果:clustering.labels_
因為已經把特徵調整成2維,我們可以用散佈圖簡單看一下最終分群的結果。
plt.scatter(X[:,0],X[:,1],c=clustering.labels_)
總括來說,有了前人寫好的模組,讓DBSCAN在Python中的實作變得非常容易,準備好資料後,兩個步驟即可輕易完成!拿起您手邊的資料,一起玩玩看吧!
程式檔案,歡迎於此下載。