學習視頻:【強烈推薦】清風:數學建模算法、編程和寫作培訓的視頻課程以及Matlab
老師講得很詳細,很受用!!!
定義
聚類就是將樣本划分為由類似的對象組成的多個類的過程。聚類后,我們可以更加准確的在每個類中單獨使用統計模型進行估計、分析或預測;也可以探究不同類之間的相關性和主要差異。
聚類和分類的區別:分類是已知類別的,聚類未知。
具體算法
K-means聚類算法
算法流程
-
指定需要划分的簇[cù]的個數K值(類的個數);
-
隨機地選擇K個數據對象作為初始的聚類中心
(不一定要是我們的樣本點); -
計算其余的各個數據對象到這K個初始聚類中心的距離,把數據對象划歸到距離它最近的那個中心所處在的簇類中;
-
調整新類並且重新計算出新類的中心;
-
五循環步驟3和4,看中心是否收斂(中心不變),如果收斂或達到迭代次數則停止循環;
-
結束。
K‐均值聚類可視化的網站: https://www.naftaliharris.com/blog/v (強烈推薦試一下)
流程圖
論文可以畫,清晰明了!
優缺點
優點:
(1)算法簡單、快速。
(2)對處理大數據集,該算法是相對高效率的。
缺點:
(1)要求用戶必須事先給出要生成的簇的數目K。
(2)嚴重依賴與初始簇中心的選擇,對初值敏感。
**(3)對於孤立點數據敏感。 **
**K‐means++算法可解決2、 3兩個缺點。 **
K-means++算法
與K‐means++算法的區別
k-means++算法選擇初始聚類中心的基本原則是: 初始的聚類中心之間的相互距離要盡可能的遠。
算法描述如下:(只對K-means算法“初始化K個聚類中心” 這一步進行了優化)
- 步驟一: 隨機選取一個樣本作為第一個聚類中心;
- 步驟二: 計算每個樣本與當前已有聚類中心的最短距離(即與最近一個聚類中心的距離),這個值越大,表示被選取作為聚類中心的概率較大;最后,用輪盤法(依據概率大小來進行抽選)選出下一個聚類中心;
- 步驟三: 重復步驟二,直到選出K個聚類中心。選出初始點后,就繼續使用標准的K-means算法了。
Spss軟件操作
K-means算法的一些討論
-
聚類的個數K值怎么定?
答:分幾類主要取決於個人的經驗與感覺,通常的做法是多嘗試幾個K值,看分成幾類的結果更好解釋(高消費與低消費,或者高消費、中消費與低消費),更符合分析目的等。 -
數據的量綱不一致怎么辦?
答:如果數據的量綱不一樣,那么算距離時就沒有意義。例如:如果X1單位是米, X2單位是噸,用距離公式計算就會出現“米的平方”加上“噸的平方”再開平方,最后算出的東西沒有數學意義,這就有問題了。具體做法:先減去均值再除以標准差
\[z_{i}=\frac{x_{i}-\overline x}{\delta _{x}} \]
系統(層次)聚類 (可以查看k值)
系統聚類的合並算法通過計算兩類數據點間的距離,對最為接近的兩類數據點進行組合,並反復迭代這一過程,直到將所有數據點合成一類,並生成聚類譜系圖。
算法流程
系統(層次)聚類的算法流程:
- 一、將每個對象看作一類,計算兩兩之間的最小距離;
- 二、將距離最小的兩個類合並成一個新類;
- 三、重新計算新類與所有類之間的距離;
- 四、重復二三兩步,直到所有類最后合並成一類;
- 五、結束。
詳細講解參考:於晶賢‐遼寧石油化工大學‐聚類分析之系統聚類法.pdf
常用距離(樣品i與樣品j)
- 絕對值距離:網狀結構的距離
- 歐氏距離:一般就用歐式距離
- Minkowski距離:
- Chebyshev距離:
- 馬氏距離:多元正太分布
常用“距離” (指標i與指標j)
類與類之間的常用距離
1.由一個樣品組成的類是最基本的類;如果每一類都由
個樣品組成,那么樣品間的距離就是類間距離。
2.如果某一類包含不止一個樣品,那么就要確定類間距
離,類間距離是基於樣品間距離定義的,大致有如下幾種
算法流程圖
聚類分析需要注意的問題
1.對於一個實際問題要根據分類的目的來選取指標,指標
選取的不同分類結果一般也不同。
2.樣品間距離定義方式的不同,聚類結果一般也不同。
3.聚類方法的不同,聚類結果一般也不同(尤其是樣品特別多的時候)。最好能通過各種方法找出其中的共性。
4.要注意指標的量綱,量綱差別太大會導致聚類結果不合
理。
5.聚類分析的結果可能不令人滿意,因為我們所做的是一個數學的處理,對於結果我們要找到一個合理的解釋。
Spss軟件操作
譜系圖
畫豎線可以看清分為多少類。
用圖形估計聚類的數量
根據圖來進行解釋:
(1)根據聚合系數折線圖可知,當類別數為5時,折線的下降趨勢趨緩,故可將類別數設定為5.
(2)從圖中可以看出, K值從1到5時,畸變程度變化最大。超過5以后,畸變程度變化顯著降低。因此肘部就是 K=5,故可將類別數設定為5.(當然,K=3也可以解釋)
確定K后保存聚類結果並畫圖
注意: 只要當指標個數為2或者3的時候才能畫圖,上面兩個圖純粹是為了演示作圖過程,實際上本例中指標個數有8個,是不可能做出這樣的圖的
DBSCAN算法
DBSCAN(Density-based spatial clustering of applications with noise)是Martin Ester, Hans-PeterKriegel等人於1996年提出的一種基於密度的聚類方法,聚類前不需要預先指定聚類的個數,生成的簇的個數不定(和數據有關)。該算法利用基於密度的聚類的概念,即要求聚類空間中的一定區域內所包含對象(點或其他空間對象)的數目不小於某一給定閾值。該方法能在具有噪聲的空間數據庫中發現任意形狀的簇,可將密度足夠大的相鄰區域連接,能有效處理異常數據。
基本概念
DBSCAN算法將數據點分為三類:
• 核心點:在半徑Eps內含有不少於MinPts數目的點
• 邊界點:在半徑Eps內點的數量小於MinPts,但是落在核心點的鄰域內
• 噪音點:既不是核心點也不是邊界點的點
在這幅圖里,MinPts = 4,點 A 和其他紅色點是核心點,因為它們的 ε-鄰域(圖中紅色圓圈)里包含最少 4 個點(包括自己),由於它們之間相互相可達,它們形成了一個聚類。點 B 和點 C 不是核心點,但它們可由 A 經其他核心點可達,所以也和A屬於同一個聚類。點 N 是局點,它既不是核心點,又不由其他點可達。
可視化
Matlab代碼
Matlab官網推薦下載的代碼:
https://ww2.mathworks.cn/matlabcentral/fileexchange/52905‐dbscan‐clustering‐algorithm
優缺點
優點:
- 基於密度定義,能處理任意形狀和大小的簇;
- 可在聚類的同時發現異常點;
- 與K-means比較起來,不需要輸入要划分的聚類個數。
缺點:
-
對輸入參數ε和Minpts敏感,確定參數困難;
-
由於DBSCAN算法中,變量ε和Minpts是全局唯一的,當聚類的密度不均勻時,聚類距離相差很大時,聚類質量差;
-
當數據量大時,計算密度單元的計算復雜度大。
我的建議:
- 只有兩個指標,且你做出散點圖后發現數據表現得很“DBSCAN”,這時候你再用DNSCAN進行聚類。其他情況下,全部使用系統聚類吧。
- K‐means也可以用,不過用了的話你論文上可寫的東西比較少。
作業
完成一篇論文作業,“各國森林、草原資源聚類.doc”,提示:指標共三個,量綱不同哦,論文中要交代清楚K的選擇,當然你也可以畫出你的聚類結果的三維圖。
-
把作業表格復制到excel,用spss軟件直接打開即可。
-
歸一化變量
-
使用系統聚類和肘部法則確定聚類個數
在spss復制一下聚類系數
復制到ECXCEL表里面去。
通過對圖像的觀察分析,可以得出當聚類中心個數為4時,其聚合系數變化較大,所以選取聚類中心個數K=4。
-
真正的開始系統聚類(kmeans也行)
5.做散點圖