9

我想用K-means方法做一個聚類,但我想衡量我的聚類性能。 我不是專家,但我渴望更多地瞭解羣集。Scikit K-means聚類性能測量

這裏是我的代碼:

import pandas as pd 
from sklearn import datasets 

#loading the dataset 
iris = datasets.load_iris() 
df = pd.DataFrame(iris.data) 

#K-Means 
from sklearn import cluster 
k_means = cluster.KMeans(n_clusters=3) 
k_means.fit(df) #K-means training 
y_pred = k_means.predict(df) 

#We store the K-means results in a dataframe 
pred = pd.DataFrame(y_pred) 
pred.columns = ['Species'] 

#we merge this dataframe with df 
prediction = pd.concat([df,pred], axis = 1) 

#We store the clusters 
clus0 = prediction.loc[prediction.Species == 0] 
clus1 = prediction.loc[prediction.Species == 1] 
clus2 = prediction.loc[prediction.Species == 2] 
k_list = [clus0.values, clus1.values,clus2.values] 

現在,我有我的KMEANS和我的三個集羣存儲,我試圖用Dunn Index來衡量我的集羣的性能(我們尋求更大的指數) 爲此我導入jqm_cvi包(可here

from jqmcvi import base 
base.dunn(k_list) 

我的問題是:是否有任何集羣內部評估ALRE在Scikit Learn中存在ady(除了來自silhouette_score)?或者在另一個知名的圖書館?

謝謝您的時間

+4

你可以在這裏找到的概述:http://scikit-learn.org/stable/modules/clustering.html(2.3.9聚類性能評估)從鏈接 –

+0

大多數性能上面的算法但是依賴, ,在「地面真相」標籤上。 Scikit Learn上唯一可用的內部評估算法是silhouette_score和Calinski-Harabaz索引,對嗎? –

+1

http://scikit-learn.org/stable/modules/clustering.html#clustering-performance-evaluation中給出了許多性能評估策略 –

回答

1

通常情況下,集羣被認爲是一種無監督的方法,從而很難建立良好的性能指標(如前面的評論也建議)。

儘管如此,可以從這些算法中推斷出很多有用的信息(例如k-均值)。問題是如何爲每個集羣分配語義,從而衡量算法的「性能」。在很多情況下,一個好的方法是通過可視化您的羣集。顯然,如果你的數據具有高維度特徵,就像在許多情況下發生的那樣,可視化並不那麼容易。讓我建議兩條路,使用k-means和另一個聚類算法。

  • K均值:在這種情況下,您可以通過使用例如PCA降低數據的維度。使用這種算法,您可以將數據繪製在二維圖中,然後可視化您的羣集。但是,您在該圖中看到的是數據2D空間中的投影,因此可能不太準確,但仍可以讓您瞭解羣集的分佈情況。

  • 自組織映射這是基於其創建訓練樣本的輸入空間的離散表示神經網絡,聚類算法,稱爲地圖,並且因此,要做到降維的方法( SOM)。你可以找到一個非常好的Python程序包somoclu,它已經實現了這個算法,並且可以簡單地顯示結果。這個算法對聚類非常有用,因爲它不需要事先選擇簇的數量(在k-意思是你需要選擇k,這裏不是)。