Kmeans如何確定聚類個數K
序
在面試過程中經常問到K值如何確定,很多人說需要嘗試,的確沒錯,但是更多地需要講出來對每次嘗試的結果是如何進行評價的。
肘部法則
實際上,一開始是很難確定聚類數的,下圖的兩種聚類數似乎都是可行的:
但是,也存在一種稱之為肘部法則(Elbow Method)的方法來選定適當的K值:
上圖曲線類似於人的手肘,“肘關節”部分對應的 K 值就是最恰當的 K 值,但是並不是所有代價函式曲線都存在明顯的“肘關節”,例如下面的曲線:
一般來說,K-Means 得到的聚類結果是服務於我們的後續目的(如通過聚類進行市場分析),所以不能脫離實際而單純以數學方法來選擇 K 值。在下面這個例子中,假定我們的衣服想要是分為 S,M,L 三個尺碼,就設定 K=3 ,如果我們想要 XS、S、M、L、XL 5 個衣服的尺碼,就設定 K=5 :
輪廓係數
輪廓係數:
是評判聚類好壞的標準,結合類內聚合度以及類間分離度兩種指標來計算得到。-
計算方法:
a. 計算樣本 i 到同簇內其他樣本的平均距離 ,該值越小,說明樣本 i 越應該被聚類到該簇中,可以將 稱作樣本的簇內不相似度。
b. 簇 C 中所有樣本的 均值被稱作是簇C的簇不相似度。
計算樣本 i 到其他簇 中所有樣本的平均距離 稱作是樣本 i 與簇 的不相似度。定義樣本 i 的簇間不相似度為: = min(bi1, bi2…bik)
c. 越大說明樣本 i 越不屬於其他簇。
根據樣本 i 的簇內不相似度 和簇間不相似度 ,定義樣本 i 的輪廓係數: -
判斷方法
□ s_i 越接近1, 則說明樣本 i 聚類合理。
□ s_i 越接近-1,說明樣本 i 更適合聚到其他類
□ s_i越接近0,則說明樣本 i 在兩個簇的邊界上○ 根據輪廓係數選取k
我們可以在固定的k值上多次執行,求取輪廓係數的均值,再依據上述判斷準則選出合理的k值。
相關文章
- Kmeans如何初始化聚類中心聚類
- 如何唯一確定一個 Java 類?Java
- KMeans演算法與GMM混合高斯聚類演算法聚類
- 移除K個數字
- 求最小k個數
- 如何確定一個 Go 變數會被分配在哪裡?Go變數
- 利用python的KMeans和PCA包實現聚類演算法PythonPCA聚類演算法
- ML.NET技術研究系列-2聚類演算法KMeans聚類演算法
- 聚類kmeans演算法在yolov3中的應用聚類演算法YOLO
- JZ-029-最小的 K 個數
- 機器學習——KMeans機器學習
- 如何實現跨數百個K8s叢集的管理?K8S
- Java如何正確比較浮點數Java
- 如何正確統計文章的字數
- joda.time之如何獲取到兩個時間的差值(正確的使用Period類)
- 每日一練(21):最小的k個數
- leetcode:確實的第一個整數(java)LeetCodeJava
- python Kmeans演算法解析Python演算法
- 吳恩達《Machine Learning》精煉筆記 8:聚類 KMeans 及其 Python實現吳恩達Mac筆記聚類Python
- Day30--類的個數
- 引數如何在python中明確型別?Python型別
- 「數倉面試」如何確定主題域?面試
- 劍指Offer-31-最小的K個數
- 連結串列倒數第k個結點
- k-means聚類聚類
- 劍指offer:輸入n個整數,找出其中最小的K個數。
- Kmeans演算法優缺點演算法
- 如何判斷一個類是從另一個類繼承繼承
- 淺談如何確定伺服器的數量伺服器
- jvm如何載入一個類JVM
- 分治與遞迴-找k個臨近中位數的數遞迴
- 求陣列中k個數的所有組合陣列
- Leetcode 劍指 Offer 40. 最小的k個數LeetCode
- 找到無序陣列中最小的k個數陣列
- 如何確定Kafka的分割槽數、key和consumer執行緒數Kafka執行緒
- 效能測試中如何確定TPS和併發數
- 一個隨機數的類c++隨機C++
- [譯] 不用 Class,如何寫一個類