最近複習算法準備校招,順便寫一寫算作補上以前欠的債。
1.最小二乘法
有一堆數據點(Xi,Yi),其中i從0到n,那麼我現在用一個超平面去擬合這些數據點,這個超平面的方程形式?whatever,在最小二乘裏這不是重點,你可以是線性也可以是非線性,方程就記作y=f(x),其中有參數Bi,假設有k個。
好我們的環境已經配好了,然後是方法的應用。這個方法是一個參數估計方法,損失函數是誤差的平方和,估計的方法是求偏導。結束了。
這個比較基礎,就懶得寫公式了。。
2.k-means
算法的步驟如下:
- 隨機在特徵空間裏取K個種子點(初始點)。
- 然後對圖中的所有點求到這K個種子點的距離,假如點Pi離種子點Si最近,那麼Pi屬於Si點羣。
- 接下來,根據點羣中所有點的座標更新中心的座標,更新公式後面介紹。
- 然後重複第2)和第3)步,直到,種子點沒有移動。
1)Minkowski Distance公式——λ可以隨意取值,可以是負數,也可以是正數,或是無窮大。
2)Euclidean Distance公式——也就是第一個公式λ=2的情況
3)CityBlock Distance公式——也就是第一個公式λ=1的情況
然後這個算法的缺點有兩個:
- 聚類中心的個數K 需要事先給定,但在實際中這個 K 值的選定是非常難以估計的,很多時候,事先並不知道給定的數據集應該分成多少個類別才最合適(這個可以去驗證集試出來,比較麻煩)
- Kmeans需要人爲地確定初始聚類中心,不同的初始聚類中心可能導致完全不同的聚類結果。(可以使用Kmeans++算法來解決)
- 從輸入的數據點集合中隨機選擇一個點作爲第一個聚類中心
- 對於數據集中的每一個點x,計算它與最近聚類中心(指已選擇的聚類中心)的距離D(x)
- 選擇一個新的數據點作爲新的聚類中心,選擇的原則是:D(x)較大的點,被選取作爲聚類中心的概率較大
- 重複2和3直到k個聚類中心被選出來
- 利用這k個初始的聚類中心來運行標準的k-means算法
- 先從我們的數據庫隨機挑個隨機點當“種子點”
- 對於每個點,我們都計算其和最近的一個“種子點”的距離D(x)並保存在一個數組裏,然後把這些距離加起來得到Sum(D(x))。
- 然後,再取一個隨機值,用權重的方式來取計算下一個“種子點”。這個算法的實現是,先取一個能落在Sum(D(x))中的隨機值Random,然後用Random -= D(x),直到其<=0,此時的點就是下一個“種子點”。
- 重複2和3直到k個聚類中心被選出來
- 利用這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