k means演算法擴充套件

2021-09-01 11:32:24 字數 957 閱讀 6610

k-means是機器學習中最基本的聚類演算法,但同樣也有很多缺點:

一是k選擇是隨機的,可能會得到區域性最優解

二是k的個數的選擇是預估計的,很多時候並不知道樣本被聚為幾類最合適

同樣,k-measns僅能實現對連續型數值的樣本操作,當資料量過於龐大時,時間複雜度較高(每次計算簇的中心來選取新的中心點)

k-means++

為了解決k的隨機性,k-means++演算法與k-means演算法原理基本類似,他的做法是,如果將樣本聚為k類,則在資料集中隨機選取乙個中心點(隨機種子),迴圈遍歷所有的點與中心點的距離存放在d(m)中,其中d(m)=[d1,d2,d3,...,dm]。在d(m)中選擇再選取最大的di作為第二個中心點,如此反覆,直至選取好了所有的k點,再進行k-means的過程。

k-means++的基本思想就是,在初始選取中心點時,中心點k之間的距離盡可能的大

k-modes

如果說所要聚類的樣本資料集都是離散型的數值,比如我要在電腦購買記錄中去聚類相似特徵的人群,其中只有性別、學歷、薪資等級等特徵,此時無法用k-means的歐式距離去衡量各樣本的距離。k-modes衡量距離的做法是漢明距離

比如樣本 1,0,1,1,1,0,1與樣本1,0,0,1,0,0,1之間的漢明距離為2(異或操作),且k-modes在更新中心點的時候採用的是各個簇的眾數而非均值。

k-prototype

如果說聚類樣本之間既有離散型變數又有連續型變數,即度量樣本間混合屬性的距離,那麼k-prototype演算法能解決這一問題。

k-prototype原理就是用k-means取得連續型變數之間的歐式距離p1,k-modes度量連續型變數之間的漢明距離p2,那麼度量此類樣本之間的距離d = p1+a*p2,a可隨機賦予,如果離散型變數的屬性比較重要則增大a,否則減小a,a=0時,只有連續型變數的屬性。

k means演算法不足

a.k 不確定 對於初始條件和聚類的個數 k 並沒有乙個標準的方法來給定。初始條件不同會對結果產生比較大的影響,因為有時演算法會跳入區域性最優。所以解決方法之一,就是多次執行演算法,隨機分割,比較結果之間的差異。b.區域性最優 如果要達到全域性最優,需要用到其他一些技術,比如模擬退火或者遺傳演算法等...

Kmeans演算法實現

include opencv2 highgui highgui.hpp include opencv2 core core.hpp include using namespace cv using namespace std static void help int main int argc ch...

K means演算法上

在資料探勘中,k means演算法是一種cluster analysis的演算法,其主要是來計算資料聚集的演算法,主要通過不斷地取離種子點最近均值的演算法。問題k means演算法主要解決的問題如下圖所示。我們可以看到,在圖的左邊有一些點,我們用肉眼可以看出來有四個點群,但是我們怎麼通過電腦程式找出...