機器學習常用算法(1)最小二乘和k-means聚類

最近複習算法準備校招,順便寫一寫算作補上以前欠的債。


1.最小二乘法


有一堆數據點(Xi,Yi),其中i從0到n,那麼我現在用一個超平面去擬合這些數據點,這個超平面的方程形式?whatever,在最小二乘裏這不是重點,你可以是線性也可以是非線性,方程就記作y=f(x),其中有參數Bi,假設有k個。

好我們的環境已經配好了,然後是方法的應用。這個方法是一個參數估計方法,損失函數是誤差的平方和,估計的方法是求偏導。結束了。

這個比較基礎,就懶得寫公式了。。


2.k-means

算法的步驟如下:

  1. 隨機在特徵空間裏取K個種子點(初始點)。
  2. 然後對圖中的所有點求到這K個種子點的距離,假如點Pi離種子點Si最近,那麼Pi屬於Si點羣。
  3. 接下來,根據點羣中所有點的座標更新中心的座標,更新公式後面介紹。
  4. 然後重複第2)和第3)步,直到,種子點沒有移動。
在這給出三種計算距離的公式:

1)Minkowski Distance公式——λ可以隨意取值,可以是負數,也可以是正數,或是無窮大。

2)Euclidean Distance公式——也就是第一個公式λ=2的情況

3)CityBlock Distance公式——也就是第一個公式λ=1的情況


然後這個算法的缺點有兩個:

  • 聚類中心的個數K 需要事先給定,但在實際中這個 K 值的選定是非常難以估計的,很多時候,事先並不知道給定的數據集應該分成多少個類別才最合適(這個可以去驗證集試出來,比較麻煩)
  • Kmeans需要人爲地確定初始聚類中心,不同的初始聚類中心可能導致完全不同的聚類結果。(可以使用Kmeans++算法來解決)
然後介紹下k-means++算法,他的主要思想是我選取的初始中心點相互距離要儘可能遠。詳細如下:

  1. 從輸入的數據點集合中隨機選擇一個點作爲第一個聚類中心
  2. 對於數據集中的每一個點x,計算它與最近聚類中心(指已選擇的聚類中心)的距離D(x)
  3. 選擇一個新的數據點作爲新的聚類中心,選擇的原則是:D(x)較大的點,被選取作爲聚類中心的概率較大
  4. 重複2和3直到k個聚類中心被選出來
  5. 利用這k個初始的聚類中心來運行標準的k-means算法
然後關鍵就是怎麼把D(x)對應到點選取的概率上去,有一種算法是這樣做:

  1. 先從我們的數據庫隨機挑個隨機點當“種子點”
  2. 對於每個點,我們都計算其和最近的一個“種子點”的距離D(x)並保存在一個數組裏,然後把這些距離加起來得到Sum(D(x))。
  3. 然後,再取一個隨機值,用權重的方式來取計算下一個“種子點”。這個算法的實現是,先取一個能落在Sum(D(x))中的隨機值Random,然後用Random -= D(x),直到其<=0,此時的點就是下一個“種子點”。
  4. 重複2和3直到k個聚類中心被選出來
  5. 利用這k個初始的聚類中心來運行標準的k-means算法
原理就是點均勻地落在一塊分段的區間內,那麼落在較大段上的概率就大。

可以看到算法的第三步選取新中心的方法,這樣就能保證距離D(x)較大的點,會被選出來作爲聚類中心了。至於爲什麼原因很簡單,如下圖 所示:  

                                                

      假設A、B、C、D的D(x)如上圖所示,當算法取值Sum(D(x))*random時,該值會以較大的概率落入D(x)較大的區間內,所以對應的點會以較大的概率被選中作爲新的聚類中心。

參考資料:

http://blog.csdn.net/b_h_l/article/details/12751675

發佈了18 篇原創文章 · 獲贊 15 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章