k近鄰算法——總結

一、序

  k近鄰法(k-nearest neighbor, kNN)是一種基本的分類與迴歸方法。KNN做迴歸和分類的主要區別在於最後做預測時候的決策方式不同。KNN做分類預測時,一般是選擇多數表決法,即訓練集裏和預測的樣本特徵最近的K個樣本,預測爲裏面有最多類別數的類別。而KNN做迴歸時,一般是選擇平均法,即最近的K個樣本的樣本輸出的平均值作爲迴歸預測值。
  簡言之,k近鄰法算法簡單、直觀:給定一個訓練集,在訓練數據集中找到與該實例最鄰近的k個實例;這k個實例的多數屬於某個類,就把該輸入實例分爲這個類,此爲分類;求出這k個實例的平均值,就把該平均值記做該實例的預測值,此爲迴歸。

二、KNN算法三要素

  對於固定的訓練集,只要k值的選取距離度量的方式決策規則這三點確定了,算法的預測方式也就確定了。

1、k值的選擇

  KNN中的K值選取對K近鄰算法的結果會產生重大影響,在實際應用中,K值一般取一個比較小的數值,然後通過交叉驗證選擇一個合適的k值。

  選擇較小的k值,就相當於用較小的領域中的訓練實例進行預測,訓練誤差會減小,只有與輸入實例較近或相似的訓練實例纔會對預測結果起作用,與此同時帶來的問題是泛化誤差會增大,換句話說,K值的減小就意味着整體模型變得複雜,容易發生過擬合
  選擇較大的k值,就相當於用較大領域中的訓練實例進行預測,其優點是可以減少泛化誤差,但缺點是訓練誤差會增大。這時候,與輸入實例較遠(不相似的)訓練實例也會對預測器作用,使預測發生錯誤,且K值的增大就意味着整體的模型變得簡單
  一個極端是k等於樣本數m,則完全沒有分類,此時無論輸入實例是什麼,都只是簡單的預測它屬於在訓練實例中最多的類,模型過於簡單。

2、距離度量的方式

  對於距離的度量,我們有很多的距離度量方式,大多數情況下,歐式距離便可滿足我們的需求;即對於兩個n維向量x和y,兩者的歐式距離定義爲:
D(x,y)=(x1y1)2+(x2y2)2+...+(xnyn)2=i=1N(xii1)2D(x,y)=\sqrt{(x_1−y_1)^2+(x_2−y_2)^2+...+(x_n−y_n)^2}=\sqrt{\sum_{i=1}^N(x_i−i_1)^2}

3、決策規則

  對於分類問題:一般都是使用前面提到的多數表決法
  對於迴歸問題:一般都是使用前面提到的求平均值

三、knn算法實現

  此處說的算法亦可指KNeighborsClassifier中algorithm的參數選擇,分別是:暴力搜索(brute)、kd樹(kd_tree)、球樹(ball_tree)。

  暴力搜索:需要計算預測樣本和所有訓練集中的樣本的距離,然後計算出最小的k個距離即可,接着多數表決,很容易做出預測。這個方法的確簡單直接,在樣本量少,樣本特徵少的時候有效。但是在實際運用中很多時候用不上,爲什麼呢?因爲我們經常碰到樣本的特徵數有上千以上,樣本量有幾十萬以上,如果我們這要去預測少量的測試集樣本,算法的時間效率很成問題。因此,這個方法我們一般稱之爲蠻力實現。比較適合於少量樣本的簡單模型的時候用。在機器學習實戰_K近鄰算法 —— 電影分類採用的就是暴力搜索方式。

  kd樹:KD樹算法沒有一開始就嘗試對測試樣本分類,而是先對訓練集建模,建立的模型就是KD樹,建好了模型再對測試集做預測。所謂的KD樹就是K個特徵維度的樹,注意這裏的K和KNN中的K的意思不同。KNN中的K代表最近的K個樣本,KD樹中的K代表樣本特徵的維數

  球樹:球樹,顧名思義,就是每個分割塊都是超球體,而不是KD樹裏面的超矩形體。

附:距離度量擴展

閔氏距離(Minkowski distance )定義了標準向量空間中兩點之間的距離。
    在這裏插入圖片描述
定義如下:
    在這裏插入圖片描述
當p=1時,稱爲曼哈頓距離;當p=2時,稱爲歐式距離。下圖是p取不同值時,閔氏距離的變化

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章