誰來用最通俗易懂的語言跟我講一下k平均演算法(k means clustering)??
我的理解就是資料庫n個點隨機抽出k個點,然後作為初始簇的均值中心點,
然後步驟1:根據WCSS最小的原則,把資料庫剩下的n-k個點分配到這k個簇步驟2:再重新算一次這個簇的均值中心點,重複步驟1ok那問題是,什麼時候可以停,不用再重複步驟1?還有這個方法和正態分布最大期望有什麼區別?如果一開始隨機那k個數不同,會影響結果嘛?
- 關於終止迭代的條件,你事先設置一個迭代次數例如10次,如果迭代次數之內,比如第七次和第六次求得中心點不變,那就停止迭代.如果到第10次也終止.
- 不太清楚你說的正態分布最大期望指的是什麼方法,是Mixture of Gaussians (MoG) clustering么?k-means 和 MoG最大的區別在於前者聚類出來都是"球形的",這很容易理解;後者可以找到任意形狀的的聚類.但是他倆都有一個共同的缺點,那就是都需要你預先設定聚類的數量k,有時候你根本不知道k如何是好.
- 初始點的選擇會影響最後你的聚類結果,因此你需要多次計算,對比一下結果
- k-means 和 MoG本質上都是EM期望最大化的特列
非計算機專業的學生表示,這篇文章挺通俗易懂的:K-Means 演算法
這個回答下 @歪square 給的那篇教程【1】就非常好,感謝。(知乎怎麼引用別人的答案。。。)
理解了原始的 k means 以後,可以看看這篇【2】講 mini-batch k-means的,就是隨機取一部分數據來更新質心。可以讓演算法更快的收斂,而且運算量更小,因為原始kmeans每次迭代要遍歷整個數據集,現在只是遍歷一個採樣就能更新,而且效果還差不多當然就更快了。那演算法里說的那麼拽,我理解好像就是對當前屬於某個質心的所有點求個平均值來當新質心,不知道說的對不對望指正。
這個項目有個用tensorflow的 mini-batch kmeans的例子,可以參考一下。【3】
【1】K-Means 演算法 | | 酷 殼 - CoolShell
【2】https://www.eecs.tufts.edu/~dsculley/papers/fastkmeans.pdf
【3】https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/kmeans.py
有四個牧師去郊區佈道,一開始牧師們隨意選了幾個佈道點,並且把這幾個佈道點的情況公告給了郊區所有的居民,於是每個居民到離自己家最近的佈道點去聽課。聽課之後,大家覺得距離太遠了,於是每個牧師統計了一下自己的課上所有的居民的地址,搬到了所有地址的中心地帶,並且在海報上更新了自己的佈道點的位置。牧師每一次移動不可能離所有人都更近,有的人發現A牧師移動以後自己還不如去B牧師處聽課更近,於是每個居民又去了離自己最近的佈道點……就這樣,牧師每個禮拜更新自己的位置,居民根據自己的情況選擇佈道點,最終穩定了下來。
參考
1, 算score,下降小於閾值就可以停了。同時做cross validation, 畫出來看看。
2,kmean無法給出幾率,GMM可以,kmeam是個正圓,GMM是個橢圓,呵呵
3,當然,同1
推薦閱讀:
※R實戰案例:利用演算法識別糖尿病患者(R語言實現)
※紅包都送不出去了?教你看懂數據,不再懷疑人生
※我們只談自己,不談友商
※NLP自然語言處理從入門到迷茫
※數據挖掘過程中的離散方法