數學建模學習筆記之評價問題聚類分析法
物以類聚、人以羣分。
聚類分析是一個很大的概念,顯然根據分類的依據不同會出現很多很多聚類的方法。例如K-Means 、Sequential Leader、Model Based Methods、Density Based Methods、Hierarchical Methods、EM、蟻羣算法等等。各類算法之間並沒有優劣之分,只存在選擇是否恰當問題。數學建模主要注重結論,所以這裏就重點講解其中比較有名的K-Means聚類和它在SPSS軟件上的實現。
聚類:把各不相同的個體分割爲有更多相似性子集合,產生的子集叫做簇
應用領域:客戶價值分析、文本分類、數據處理等
K-Means聚類(K-均值)分析
算法步驟
- 隨機選取K個樣本作爲類中心
- 計算各樣本與各類之間的距離
- 將各樣本歸於最近的類中心點
- 求各類樣本的均值,作爲新的類中心
- 判定:若類中心不再發生變動或到達迭代次數,算法結束,否則返回第二步。
聚類指標
外部指標:將聚類結果與參考模型進行比較
a:集合SS包含在聚類結果中屬於相同簇在參考模性中也屬於相同簇的樣本對。
b:集合SD包含在聚類結果中屬於相同簇在參考模性中屬於不同簇的樣本對。
c:集合DS包含在聚類結果中屬於不同簇在參考模性中屬於相同簇的樣本對。
d:集合DD包含在聚類結果中屬於不同簇在參考模性中屬於不同簇的樣本對。
Jaccard係數
FM指數
Rand指數
上述指標在[0,1]區間內越大越好。
內部指標:不依賴於任何參考模型,直接考察聚類結果
avg©:簇C內樣本間平均距離
diam©:簇C間樣本間的最遠距離
dmin:簇Ci與Cj最近樣本間的距離
dcem:簇Ci與Cj中心點間的距離
DB指數越小越好:
緊密性(CP):各樣本到聚類中心的距離
間隔性(SP):各類中心間平均距離
代碼實現
MATLAB中關於聚類的函數有很多,k-means應該是其中比較簡單一種
x = [1 2 6 8 13]'; % 原始數據
opts = statset('Display','final'); % 顯示每次聚類的最終結果
% startset產生一個複雜的struct,參數‘display’可選有off/iter/final
idx = kmeans(x,3,'Distance','city','Replicates',5,'Options',opts)
% 將原始的5個點聚爲3類,距離採用絕對值距離,重複聚類5次
%Distance’:聚類距離的度量方式 Start’:迭代初始點的選取方式
%‘Replicates’:選取不同的初始點進行計算的次數,默認值爲1
%‘Options’:迭代的方式,需要創建一個statset變量
%****************************繪製聚類輪廓圖*********************************
[S, H] = silhouette(x,idx) % 繪製輪廓圖,並返回輪廓值向量S和圖形句柄H
SPSS使用
案例·對下表中10個省份進行聚類
第一步:打開spss>文件>打開>數據
第二步:分析>分類>K-平均值聚類>把依據的指標值導入變量,地區導入標註個案,填寫聚類數,勾選迭代與分類
第三步:選項>勾選要查看的結果/迭代選擇最大迭代次數
點確定,就結束了。參考結果如下:
總結
K-Means 聚類是一種比較典型的劃分聚類方法,其代碼簡單步驟也比較容易懂。但由於其可選地方不多,而使用系統聚類也就是層次聚類的方法,通過畫出的樹狀圖來判斷聚類就更加方便。具體SPSS方法和k-means差不多,MATLAB實現代碼和教學視頻我整理了下手邊資料,有興趣可以下載