2016-12-25 56 views
0

這是我第一次嘗試使用Python和Sci-Kit Learn進行K-Means聚類,並且我不知道如何對最終聚類圖做出什麼或者如何微調我的K均值聚類算法。當我只是獲取行集羣時,如何優化K意味着集羣?

我的最終目標是找到劃分一些有趣或有用的行爲特徵的用戶類別的聚類。

未遂1:

輸入:性別,年齡範圍,國家(全一熱編碼,因爲數據是分類),和帳戶年齡(以周齡數值)

enter image description here

代碼:

# Convert DataFrame to matrix 
mat2 = all_dummy.as_matrix() 
# Using sklearn 
km2 = sklearn.cluster.KMeans(n_clusters=6) 
km2.fit(mat2) 
# Get cluster assignment labels 
labels2 = km2.labels_ 
# Format results as a DataFrame 
results2 = pd.DataFrame([all_dummy.index,labels2]).T 

plot_x2 = results2[0].tolist() 
plot_y2 = results2[1].tolist() 
pyplot.scatter(plot_x2,plot_y2) 
pyplot.show() 

簡介:

enter image description here

具體的問題:

  1. 這是什麼圖形的X軸和Y軸?
  2. 這張圖甚至告訴我什麼?
  3. 爲什麼只有3個集羣出現時,我把6個集羣作爲輸入? (通過第一條評論和更新的代碼和圖形回答)
  4. 如果我不知道我在找什麼樣的關係是什麼,我該如何微調這個圖表來告訴我更多,並向我展示一種有用的關係?

回答

1
  1. 根據你的代碼中,X軸對應於對樣品的指數(看到你的圖,我想你有大約10個000用戶的話),和Y軸對應於每個標籤樣品。

  2. 您可能沒有6個羣集作爲輸入。事實上,當您將結果格式化爲數據框時,將使用標籤變量,而實際上它是labels2,其中包含計算的羣集分配。我不知道你的標籤來自哪裏,但我懷疑這是你獲得這些結果的原因。因此,關於問題2,該圖可能是沒有顯示任何相關的內容。

  3. 您首先可以使用其他可視化來更好地理解您的數據如何被羣集。 Sklearn的文檔提供了許多可用於獲取靈感的示例(1,2,3)。

希望它有幫助!

4

閱讀k-means的侷限性。

特別是,要知道,

  1. 你必須刪除所有標識列

  2. K-均值爲規模非常敏感。所有屬性都需要根據其值範圍,分佈和重要性仔細縮放。預處理至關重要!

  3. k-均值假設連續變量。對分類數據的使用,即使是單熱編碼,也是有問題的。它有時工作「好」,但幾乎沒有工作過「好」。