07 非監督式學習
王元俊
Wang Yuan-Jiun
islwangyj@gmail.com
教材
• R 語言資料分析:從機器學習、資料探勘、文 字探勘到巨量資料分析 [第二版] • 作者:李仁鐘、李秋緣 • 出版社:博碩文化股份有限公司 • 書號:MP31714 • 出版日期:2017 年 6 月 2 日 • 範例檔案下載 R 語言資料分析 2本章內容
• 階層式分群法• K 平均算法
• 模糊 C 平均算法(略) • 分群指標
分群
• 分群 (Clustering) 是將一組資料依據相似度計算 公式,將其聚合或分割成為若干群。 • 目標 – 群內差異小 – 群間差異大 R 語言資料分析 4階層式分群法 (1)
• 階層式分群法將資料以階層架構,將資料層層
反覆地進行聚合或分割,產生資料的樹狀結構。
階層式分群法 (2)
• 常用方式: 1. 聚合法 (Agglomerative) 採用由下而上的處理方式,從樹狀結構的 底部開始,將資料或各分群逐次合併。 一開始將每個資料都視為一個獨立分群, 然後依據分群間相似度計算公式,不斷地 合併兩個最相似的分群,直到最後所有的 分群都合併成一個大的群集為止。 R 語言資料分析 6階層式分群法 (3)
• 常用方式: 2. 分割法 (Divisive) 採用由上而下的處理方式,從樹狀結構的 頂端開始,將大的群集逐次分割。 一開始時將所有資料視為一個大的群集, 不斷依據相似度計算公式,將大的群集分 割成較小的分群,直到分群數量達到事先 所設定的數目為止。階層式分群法 (4)
• 階層式分群法的相似度 (Similarity) 可由距離來 計算,例如兩分群 (c1, c2) 的相似度計算公式 Similarity = 1 + 𝑑𝑑 𝑐𝑐1 1, 𝑐𝑐2 其中 d(c1, c2) 為兩個分群之間的距離。 R 語言資料分析 8階層式分群法 (5)
• 分群間距離計算的方法(教材 103 頁,圖 7-2) 1. 單一聯結法 (Single Linkage):取群與群之 間最近點的距離 dmin(c1, c2) 2. 中心法 (Centroid Linkage):取群與群之間 中心點的距離 dmean(c1, c2) 3. 平均法 (Average Linkage):取群與群之間 所有點的距離平均 davg(c1, c2) 4. 完全聯結法 (Complete Linkage):取群與群 之間最遠點的距離 dmax(c1, c2),這樣可以 保證這兩個集合合併後, 任何一對的距離不 會大於 dmax(c1, c2)。階層式分群法 (6)
• 點與點之間距離計算的方法 1. 歐幾里德距離 (Euclidean Distance) 2. 皮爾森相關係數 (Pearson Correlation Coefficient) 3. 馬氏距離 (Mahalanobis Distance) R 語言資料分析 10範例 7-1 (7-1.R)
• 隨機取用 iris 資料集的 10%,共 15 筆資料,使 用 stats 套件的 hclust( ) 函數,執行階層式分群 法。
• hclust( ) 函數:Hierarchical Clustering
• dist( ) 函數:Distance Matrix Computation,預 設使用歐幾里德距離。
K 平均算法
• K 平均算法必須事先設定分群的數量 k。 • K 平均算法依照下列四個步驟進行分群: 1. 給定 k 值,將資料分割成 k 個非空白子集 合。 2. 計算現在分割群組的群(質)心,這些群 (質)心為各個群組的中心點。 3. 將每個資料歸類於最接近的群(質)心點。 4. 回到 2.,一直到每個群組資料沒有任何變 化。 R 語言資料分析 12評估分群
• 評估分群模型– 組內距離平方和 WSS (Within Cluster Sum of Squares) 越小越好
– 組間距離平方和 BSS (Between Cluster Sum of Squares) 越大越好
– 總離均差平方和 TSS (Total Cluster Sum of Squares),TSS = WSS + BSS
範例 7-2 (7-2.R) (1)
• 取用 iris 資料集,使用 stats 套件的 kmeans( ) 函數將 iris 資料分成 3 群。
• kmeans( ) 函數:K-Means Clustering
分群指標
• 由於使用非監督式的分群演算法時,需要先決 定分群的數量,所以如何決定分群的數量,就 是一個很重要的工作。 • 分群指標可評估分群的效果,協助使用者決定 分群的數量。 R 語言資料分析 16範例 7-4 (7-4.R)
• 使用 NbClust 套件 NbClust( ) 函數。 – install.packages("NbClust")
• NbClust( ) 函數:NbClust Package for determining the best number of clusters