logo
Loading...

Day56 選定k值與silhouette_score的關係[kmeans]? - Cupoy

之前我有問過相同的問題:選定k值的時候要選擇:                a. average ...

Day56 選定k值與silhouette_score的關係[kmeans]?

2020/05/25 08:54 AM
機器學習新手論壇
Nick
觀看數:0
回答數:5
收藏數:3

之前我有問過相同的問題:

選定k值的時候要選擇:

                a. average silhouette_score最高的k值

                b. average silhouette_score比下一個分群值的分數大很多的k值


我得到的回答是選項a.


但我想問Day56中的範例程式碼最後的分析討論提到:

觀察輸出值 : silhouette_score, 如果是一個適合的分群值, 應該要比下一個分群值的分數大很多
由結果可以看出 : 2, 3, 5 都是不錯的分群值(因為比 3, 4, 6的分數都高很多), 相形之下, 4, 6, 7 作為分群的效果就不明顯

Day56的範例程式碼的正確k值應該是3,但是最高的average silhouette_score是k=2。

所以我想針對這個問題在提問一下,謝謝


----------------------------------------------------------5/29更新-------------------------------------------------------------------------------

# 載入 iris 資料集
iris = datasets.load_iris()
= iris.data
= iris.target

# 設定需要計算的 K 值集合
range_n_clusters = [2, 3, 4, 5, 6, 7, 8]
for n_clusters in range_n_clusters:
    # 宣告 KMean 分群器, 對 X 訓練並預測
    clusterer = KMeans(n_clusters=n_clusters, random_state=10)
    cluster_labels = clusterer.fit_predict(X)

    # 計算所有點的 silhouette_score 平均
    silhouette_avg = silhouette_score(X, cluster_labels)
    silhouette_avg_list.append(silhouette_avg)
    print("For n_clusters =", n_clusters,
          "The average silhouette_score is :", silhouette_avg)

    # 計算所有樣本的 The silhouette_score
    sample_silhouette_values = silhouette_samples(X, cluster_labels)


程式碼結果:

For n_clusters = 2 The average silhouette_score is : 0.681046169211746

For n_clusters = 3 The average silhouette_score is : 0.5528190123564091

For n_clusters = 4 The average silhouette_score is : 0.4980505049972867 

For n_clusters = 5 The average silhouette_score is : 0.4887488870931048 

For n_clusters = 6 The average silhouette_score is : 0.3648340039670018 

For n_clusters = 7 The average silhouette_score is : 0.35445799253167404 

For n_clusters = 8 The average silhouette_score is : 0.34873453772193763 


k值對average silhouette_score作圖: