Introduction
- 非監督學習:dataset只有特徵值,沒有真實標籤(目標值)
- PCA降維算是無監督學習的一種
- 把具有相近特徵的數據歸為一個類別,稱為聚類(物以類聚,人以群分)
- 聚類演算法又叫做無監督分類
- 聚類通常在分類之前進行,才進行分類(預測類別)
- 聚類演算法又稱為無監督分類
- 可用於降維(decomposistion)
- 可用於矢量量化(vector quantization)
- 將高維特徵壓縮到一列當中
- 再不改變特徵數目及樣本數目的情況下,壓縮數據上的信息量大小
- 用於壓縮圖像、聲音、視頻等非結構化數據
主要方法:k-means
將一組N個樣本的特徵矩陣X劃分為K個無交集的簇(cluster),直觀上來看是一組一組聚在一起的數據
- 在一個簇中的數據就認為是同一類,簇就是聚類的結果表現
- 簇中所有數據的均值$u_{ij}$通常稱為這個簇的質心(centroids)
K:把數據劃分成多少個類別
- 為kmeans演算法的核心
- 知道類別的個數則設定K值後fit
- 不知道類別的個數時,則K為超參數
流程
前提:在知道為k個類別的情況下
- 隨機在數據當中抽取k個樣本當作k個類別的中心點
- 計算其餘的點到k個中心點的距離
- 其餘的每一個點都會存著k個與中心點之間的距離
- 從中選出距離最近的一個點作為自己類別的標記,形成k個族群
- 分別計算這k個族群的平均值
- 得到平均值點有可能不再數據類別中
- 把k個族群的平均值點 與 k個舊中心點進行比較
- 比較結果相同:兩點重合,結束聚類
- 比較結果不同:把這k個平均值點當作新的中心點,從第2步開始執行
sklearn中的聚類演算法
- 聚類算法都位於
sklearn.cluster
中 - 聚類算法中有各種類(class)及函數(function)的調用方法
- 類 在調用的時候有預設值,可直接使用
- 函數 最少有一個參數必須輸入,才可進行聚類
sklearn中k-means API
- 使用
sklearn.cluster.KMeans
KMeans(n_cluster=8, init=’k-means++’)
- n_clusters : 開始聚類的中心數量
- 將全部樣本分為多少個類別
Example
1 | from sklearn.cluster import KMeans |
Result
1 | [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
Kmeans性能評估標準
理想聚類目的效果如下圖所示
- 族群與族群之間的距離最大
- 族群內部各個樣本之間越相似越好
輪廓係數
使用輪廓係數作為Kmeans性能評估標準
- 每一個樣本都有自己的輪廓係數
對於每個點$i$為已聚類數據中的樣本
- $b_i$為$i$到 其他族群的所有樣本的距離最小值
- $a_i$為$i$到 本身簇其他點的距離之平均值
$sc_i$值介於$1$~$-1$之間
- $b_i$ >> $a_i$ : 會使$sc_i$趨近於1,聚類效果最好(分離度和內聚度相對較優)
- 通常超過0或是0.1以上聚類效果已經非常好
- $b_i$ << $a_i$ : 會使$sc_i$趨近於-1,聚類效果不好
- $b_i$ >> $a_i$ : 會使$sc_i$趨近於1,聚類效果最好(分離度和內聚度相對較優)
Kmeans性能評估指標API
使用sklearn.metrics.silhouette_score
silhouette_score(X, labels)
計算所有樣本的平均輪廓係數
- X:特徵值
- labels: 被聚類標記的目標值
Example
1 | from sklearn.cluster import KMeans |
Result
1 | [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
tips
在不知道類別數目(n_clusters)的情況下,
可使用silhouette_score評估,並把n_clusters作為超參數,
進行多次驗證查看哪個輪廓係數最高
總結
特點分析
採用迭代算法,直觀易懂並且非常實用
缺點
容易收斂到局部最優解,需多次隨機聚類找出最優解(API以內建)