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

2021-08-09 05:13:28 字數 1905 閱讀 4329

作為乙個過渡,這一節記錄關於knn的知識。

這篇部落格不貼關於knn的具體細節了,knn是十分容易理解的,關於knn可參考的部落格一大堆,貼乙個講的好的吧乙隻兔子理解knn

選擇樣本資料集中與待**值前k個最相似的樣本,取其中最多的作為該待**值的類

如果希望knn不給出所述的類,給出可能所述類的概率也是可行的。

很多人會疑惑k應該如何選取,一般來說,k靠經驗,或者乙個個試。也有個通俗的經驗就是k採樣本數的平方根。

下面講維度災難時會提到關於k的選取問題。

關於具體的選擇標準可能比k更重要。

一般來說選擇歐式距離(本節不討論距離,抽時間好好總結下距離)就可以了。即,x=

(x1,

x2,.

..,x

n),y

=(y1

,y2,

...,

yn) ,則該兩個樣本的距離如下: d=

∑i=1

n(xi

−yi)

2−−−

−−−−

−−−√

然而在實際中,有選擇的尺度選擇的標準不一樣,這回影響到具體數值的大小。 比如x

=(1.74cm

,60kg

),y=

(1,80

cm,90

kg) .

因此我們需要做歸一化,即將同屬性除以該屬性的最大值與最小值之差。

兩個樣本樣本

i和樣本

j,xi

=(xi

1,xi

2,..

.,xi

n),x

j=(x

j1,x

j2,.

..,x

jn) .總樣本數為m。則樣本i和樣本j的距離如下: di

j=∑k

=1n(

xik−

xjk)

2max1≤

l≤mx

lk−min1≤

l≤mx

lk−−

−−−−

−−−−

−−−−

−−−−

−⎷

 即做好了歸一化處理。

最後詳細講解為什麼knn會引起維度災難。

同樣,貼一篇文章分類中的維度災難

該文章詳細解釋了為什麼會有維度災難。在關於資料為何增多卻沒有詳細說明。

假設樣本點取n維,樣本選取的標準是為了覆蓋總體20%的範圍特徵。

我們假設樣本點每個維度都有10個可能的取值。

1. 當n為1時

則總體數量為10,只需要2個樣本就能覆蓋總體的20%

2. 當n取2時

有兩個維度,這時總體的數量變為100(10*10),那麼就需要20只了。

3. 當取n時

共有10

n 個數量,樣本應取10n

∗0.2

個。 注意,這與我們平時理解的總體不一樣。

因為總體的數量從一開始就是固定的,比如,全世界有1億隻蒼蠅,如果只需要拿紅眼和白眼來作為區分,那麼可能取5只就夠了,但如果增加屬性的維度,比如在增加翅膀長度,個體大小,年齡,那麼需要的果蠅數量將呈指數級增長。這是導致維度災難的主要原因。

從這個意義上說,不僅是knn,其他分類演算法都會遇到維度災難的問題。

knn的基礎是距離。維度災難在使用距離的比較時問題尤甚。

會導致這個問題是因為,當維度增大時,距離某個樣本點單位距離內的其他樣本點數量的比值會減少,這會導致我們尋找更遠的距離才能找到臨近的值。

注意,雖然看起來對於knn選擇的k個樣本點並沒有影響,但問題是選擇的樣本點隨著維度的增高,距離該樣本是越來越遠的,因此沒有那麼有參考價值了。

這是維度災難對於knn影響特別大的地方。

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

機器學習中的維度災難(一)

作為乙個挖掘小白,好不容易有了資料,第一步就死在高維度上了,本以為直接上來 資料缺失值 資料分布等,但是上千維度腫麼看,在網上搜尋看到了這篇好文章,感謝原文作者的翻譯 一.引言 這裡我們將要討論所謂的 維數災難 同時結合過擬合現象來解釋它在分類器學習中的重要性。舉乙個分類應用的簡單例子,假設我們有一...

機器學習五 KNN

手寫識別 32x32 from numpy import import operator import time from os import listdir def classify inputpoint,dataset,labels,k datasetsize dataset.shape 0 已...

如何避免維度災難與過擬合

簡而言之,當訓練樣本數量不變,分類器效能會隨著選取的特徵維度的增大先增大後減小,也就是說只有在特徵維度數量和樣本數量穩定在一定範圍內,分類器效能才會最優,但目前沒有什麼固定的方法去計算二者之間的關係。過擬合就是當訓練樣本數量不變,分類器效能隨著特徵維度增大而減小,直觀的體現就是測試訓練樣本分數很高,...