[五]機器學習之聚類
阿新 • • 發佈:2018-11-11
5.1 實驗概要
通過K-Mean,譜聚類,DBSCAN三種演算法解決基本的聚類問題,使用sklearn提供的聚類模組和鳶尾花資料集,對聚類效果進行橫向比較。
5.2 實驗輸入描述
資料集:鳶尾花資料集,詳情見[機器學習之迴歸]的Logistic迴歸實驗
5.3 實驗步驟
匯入資料集:
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
為每一個演算法建立預測器:
from sklearn import cluster kMeans = cluster.KMeans(n_clusters = 3) spectral = cluster.SpectralClustering(n_clusters = 3,eigen_solver = 'arpack') dbscan = cluster.DBSCAN(eps = 1.0)
其中,n_clusters表示聚類結果的個數,eigen_solver表示譜聚類演算法所採用的特徵值分解方法,這裡選用"arpack";eps表示在基於密度的聚類演算法中,屬於同一個類的任意兩個資料點之間的最大距離。
預測並評價據類:
from sklearn.metrics import * import time clustering_names = ['KMeans', 'SpectralClustering','DBSCAN'] clustering_algorithms = [kMeans, spectral, dbscan] for name,algorithm in zip(clustering_names,clustering_algorithms): t0 = time.time() algorithm.fit(X) t1 = time.time() ari = adjusted_rand_score(algorithm.labels_,y) homo = homogeneity_score(algorithm.labels_,y) compl = completeness_score(algorithm.labels_,y) print '%-12s %-12.7f %-10f %-10f %-10f' %(name,t1-t0,ari,homo,compl)
5.4 評價標準
(1)Adjusted Rand Index(ARI)
用來計算兩組標籤之間的相似性,本實驗計算了演算法聚類之後得到的標籤algorithm.label_與資料集中真實類別標籤y之間的相似性。取值範圍為-1~1,值越大相似度越高。
(2)Homogeneity(同質性)
對於聚類結果中的每一個聚類,它只包含真實類別中的一個類的資料物件,取值範圍為0-1,值越大同質性越高。
(3)Completeness(完整性)
對於真實類別中的一個類的全部資料物件,都被聚類到一個聚類中。取值範圍為0-1,值越大完整性越高。
5.5 實驗結果及分析
分析可知,DBSCAN聚類速度最快,同質性指標最高,達到了1.0,即,在DBSCAN演算法中,聚類出來的每一個聚類都只包含真實類別中的一個類的資料物件,而完整性指標值最低,這是因為DBSCAN演算法將低密度區域中的邊緣資料物件當作噪聲點拋棄,導致完整性不高。