作爲一個過渡,這一節記錄關於knn的知識。
這篇博客不貼關於knn的具體細節了,knn是十分容易理解的,關於knn可參考的博客一大堆,貼一個講的好的吧一隻兔子理解knn
KNN
選擇樣本數據集中與待預測值前k個最相似的樣本,取其中最多的作爲該待預測值的類
如果希望knn不給出所述的類,給出可能所述類的概率也是可行的。
很多人會疑惑k應該如何選取,一般來說,k靠經驗,或者一個個試。也有個通俗的經驗就是k取樣本數的平方根。
下面講維度災難時會提到關於k的選取問題。
距離
關於具體的選擇標準可能比k更重要。
一般來說選擇歐式距離(本節不討論距離,抽時間好好總結下距離)就可以了。即,
然而在實際中,有選擇的尺度選擇的標準不一樣,這回影響到具體數值的大小。
比如
因此我們需要做歸一化,即將同屬性除以該屬性的最大值與最小值之差。
兩個樣本
即做好了歸一化處理。
維度災難
最後詳細講解爲什麼knn會引起維度災難。
同樣,貼一篇文章分類中的維度災難
該文章詳細解釋了爲什麼會有維度災難。在關於數據爲何增多卻沒有詳細說明。
假設樣本點取n維,樣本選取的標準是爲了覆蓋總體20%的範圍特徵。
我們假設樣本點每個維度都有10個可能的取值。
1. 當n爲1時
則總體數量爲10,只需要2個樣本就能覆蓋總體的20%
2. 當n取2時
有兩個維度,這時總體的數量變爲100(10*10),那麼就需要20只了。
3. 當取n時
共有
注意,這與我們平時理解的總體不一樣。
因爲總體的數量從一開始就是固定的,比如,全世界有1億隻蒼蠅,如果只需要拿紅眼和白眼來作爲區分,那麼可能取5只就夠了,但如果增加屬性的維度,比如在增加翅膀長度,個體大小,年齡,那麼需要的果蠅數量將呈指數級增長。這是導致維度災難的主要原因。
從這個意義上說,不僅是knn,其他分類算法都會遇到維度災難的問題。
距離與維度災難
knn的基礎是距離。維度災難在使用距離的比較時問題尤甚。
會導致這個問題是因爲,當維度增大時,距離某個樣本點單位距離內的其他樣本點數量的比值會減少,這會導致我們尋找更遠的距離才能找到臨近的值。
注意,雖然看起來對於knn選擇的k個樣本點並沒有影響,但問題是選擇的樣本點隨着維度的增高,距離該樣本是越來越遠的,因此沒有那麼有參考價值了。
這是維度災難對於knn影響特別大的地方。
另一個問題在於,knn每次需要遍歷整個樣本,這會導致大量計算。