無監督分類算法—K-Means


無監督學習(unsupervised learning)

沒有已知標簽的訓練集,只給一堆數據集,通過學習去發現數據內在的性質及規律。

K-Means聚類算法步驟

  1. 隨機取k個樣本作為初始均值向量(或者采用別的方式獲取初始均值向量);
  2. 根據每個樣本與均值向量的距離來判斷各個樣本所屬的蔟。
  3. 根據分好的蔟再次計算新的均值向量,根據新的均值向量再對每個樣本進行划分。
  4. 循環步驟2,3,直到分類結果相同或者在我們規定的誤差范圍內時中止。

如何選擇合適的k(即應當把數據聚成幾類?)

K-means 算法需要你先確定把數據分成幾類,當你面對一個龐大的多維數據集時,你也不知道應該將數據分成幾類比較好,這個時候就需要有一些適當的方法來進行判斷。

1. Elbow method

一般得到的曲線拐點不是很明顯,較難確定最佳的k值。

2. Average silhouette method

計算聚成不同的類時的輪廓系數(silhouette score),系數越大說明聚類的效果越好。

from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

K = range(1,15)
KM = [KMeans(n_clusters=k).fit(normalized_features) for k in K]   # clustering

# Average silhouette method
s = []
for k_means in KM[1:]:
    
    labels = k_means.labels_
    centroids = k_means.cluster_centers_

    # calculate silhouette_score
    s.append(silhouette_score(normalized_features, labels, metric='euclidean'))  

K-means 算法優缺點

K-means 算法優點

  • 算法框架清晰,簡單,容易理解。
  • 本算法確定的k個划分到達平方誤差最小。當聚類是密集的,且類與類之間區別明顯時,效果較好。
  • 對於處理大數據集,這個算法是相對可伸縮和高效的,計算的復雜度為O(NKt),其中N是數據對象的數目,t是迭代的次數。一般來說,K<<N,t<<N 。

K-means 算法缺點

  • K-means算法中k是事先給定的,這個k值的選定是非常難以估計的。
  • 算法的時間開銷是非常大的。
  • K-means算法對異常數據很敏感。在計算質心的過程中,如果某個數據很異常,在計算均值的時候,會對結果影響非常大。

參考資料

  1. http://blog.csdn.net/jwh_bupt/article/details/7654120
  2. http://www.jianshu.com/p/6c097c4d376b
  3. https://en.wikipedia.org/wiki/K-means_clustering


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM