1. 程式人生 > >[五]機器學習之聚類

[五]機器學習之聚類

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演算法將低密度區域中的邊緣資料物件當作噪聲點拋棄,導致完整性不高。