機器學習(五):KNN與維度災難

作爲一個過渡,這一節記錄關於knn的知識。
這篇博客不貼關於knn的具體細節了,knn是十分容易理解的,關於knn可參考的博客一大堆,貼一個講的好的吧一隻兔子理解knn

KNN

選擇樣本數據集中與待預測值前k個最相似的樣本,取其中最多的作爲該待預測值的類

如果希望knn不給出所述的類,給出可能所述類的概率也是可行的。
很多人會疑惑k應該如何選取,一般來說,k靠經驗,或者一個個試。也有個通俗的經驗就是k取樣本數的平方根。
下面講維度災難時會提到關於k的選取問題。

距離

關於具體的選擇標準可能比k更重要。
一般來說選擇歐式距離(本節不討論距離,抽時間好好總結下距離)就可以了。即,x=(x1,x2,...,xn),y=(y1,y2,...,yn) ,則該兩個樣本的距離如下:

d=i=1n(xiyi)2

然而在實際中,有選擇的尺度選擇的標準不一樣,這回影響到具體數值的大小。
比如x=(1.74cm,60kg),y=(1,80cm,90kg) .
因此我們需要做歸一化,即將同屬性除以該屬性的最大值與最小值之差。
兩個樣本ijxi=(xi1,xi2,...,xin),xj=(xj1,xj2,...,xjn) .總樣本數爲m。則樣本i和樣本j的距離如下:
dij=k=1n(xikxjk)2max1lmxlkmin1lmxlk

即做好了歸一化處理。

維度災難

最後詳細講解爲什麼knn會引起維度災難。
同樣,貼一篇文章分類中的維度災難
該文章詳細解釋了爲什麼會有維度災難。在關於數據爲何增多卻沒有詳細說明。
假設樣本點取n維,樣本選取的標準是爲了覆蓋總體20%的範圍特徵。
我們假設樣本點每個維度都有10個可能的取值。
1. 當n爲1時
則總體數量爲10,只需要2個樣本就能覆蓋總體的20%
2. 當n取2時
有兩個維度,這時總體的數量變爲100(10*10),那麼就需要20只了。
3. 當取n時
共有10n 個數量,樣本應取10n0.2 個。
注意,這與我們平時理解的總體不一樣。
因爲總體的數量從一開始就是固定的,比如,全世界有1億隻蒼蠅,如果只需要拿紅眼和白眼來作爲區分,那麼可能取5只就夠了,但如果增加屬性的維度,比如在增加翅膀長度,個體大小,年齡,那麼需要的果蠅數量將呈指數級增長。這是導致維度災難的主要原因。
從這個意義上說,不僅是knn,其他分類算法都會遇到維度災難的問題。

距離與維度災難

knn的基礎是距離。維度災難在使用距離的比較時問題尤甚。
會導致這個問題是因爲,當維度增大時,距離某個樣本點單位距離內的其他樣本點數量的比值會減少,這會導致我們尋找更遠的距離才能找到臨近的值。
注意,雖然看起來對於knn選擇的k個樣本點並沒有影響,但問題是選擇的樣本點隨着維度的增高,距離該樣本是越來越遠的,因此沒有那麼有參考價值了。
這是維度災難對於knn影響特別大的地方。

另一個問題在於,knn每次需要遍歷整個樣本,這會導致大量計算。

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