無監督學習(unsupervised learning)
沒有已知標簽的訓練集,只給一堆數據集,通過學習去發現數據內在的性質及規律。
K-Means聚類算法步驟
- 隨機取k個樣本作為初始均值向量(或者采用別的方式獲取初始均值向量);
- 根據每個樣本與均值向量的距離來判斷各個樣本所屬的蔟。
- 根據分好的蔟再次計算新的均值向量,根據新的均值向量再對每個樣本進行划分。
- 循環步驟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算法對異常數據很敏感。在計算質心的過程中,如果某個數據很異常,在計算均值的時候,會對結果影響非常大。
