[機器學習][理論知識][實踐]KNN算法

1KNN算法原理

  • K近鄰(K-nearst neighbors, KNN)是一種基本的機器學習算法,所謂k近鄰,就 是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。 比如:判斷一個人的人品,只需要觀察與他來往最密切的幾個人的人品好壞就可 以得出,即“近朱者赤,近墨者黑”;KNN算法既可以應用於分類應用中,也可 以應用在迴歸應用中。
  • KNN在做迴歸和分類的主要區別在於最後做預測的時候的決策方式不同。KNN 在分類預測時,一般採用多數表決法;而在做迴歸預測時,一般採用平均值法。
  1. 從訓練集合中獲取K個離待預測樣本距離最近的樣本數據;
  2. 根據獲取得到的K個樣本數據來預測當前待預測樣本的目標屬性值。

2KNN三要素

  • K值的選擇:對於K值的選擇,一般根據樣本分佈選擇一個較小的值,然後通過交叉 驗證來選擇一個比較合適的最終值;當選擇比較小的K值的時候,表示使用較小領域 中的樣本進行預測,訓練誤差會減小,但是會導致模型變得複雜,容易過擬合;當 選擇較大的K值的時候,表示使用較大領域中的樣本進行預測,訓練誤差會增大,同 時會使模型變得簡單,容易導致欠擬合;
  • 距離的度量:一般使用歐氏距離(歐幾里得距離);
  • 決策規則:在分類模型中,主要使用多數表決法或者加權多數表決法;在迴歸模型 中,主要使用平均值法或者加權平均值法。

3KNN分類預測規則

  • 在KNN分類應用中,一般採用多數表決法或者加權多數表決法。
  • 多數表決法:每個鄰近樣本的權重是一樣的,也就是說最終預 測的結果爲出現類別最多的那個類
  • 加權多數表決法:每個鄰近樣本的權重是不一樣的,一般情況 下采用權重和距離成反比的方式來計算,也就是說最終預測結 果是出現權重最大的那個類別

在KNN迴歸應用中,一般採用平均值法或者加權平均值法。

  • 平均值法:每個鄰近樣本的權重是一樣的,也就是說最終預測 的結果爲所有鄰近樣本的目標屬性值的均值;比如右圖中,藍 色圓圈的最終預測值爲:2.6;
  • 加權平均值法:每個鄰近樣本的權重是不一樣的,一般情況下 採用權重和距離成反比的方式來計算,也就是說在計算均值的 時候進行加權操作;比如右圖中,假設上面三個點到待預測樣 本點的距離均爲2,下面兩個點到待預測樣本點距離爲1,那麼 藍色圓圈的最終預測值爲:2.43。(權重分別爲: 1/7和2/7)
    在這裏插入圖片描述

4KNN算法實現方式

  • 蠻力實現(brute):計算預測樣本到所有訓練集樣本的距離,然後選擇最小的k個距 離即可得到K個最鄰近點。缺點在於當特徵數比較多、樣本數比較多的時候,算法的 執行效率比較低;
  • KD樹(kd_tree):KD樹算法中,首先是對訓練數據進行建模,構建KD樹,然後再 根據建好的模型來獲取鄰近樣本數據。

4.1KD Tree

  • KD Tree是KNN算法中用於計算最近鄰的快速、便捷構建方式。
  • 當樣本數據量少的時候,我們可以使用brute這種暴力的方式進行求解最近鄰, 即計算到所有樣本的距離。但是當樣本量比較大的時候,直接計算所有樣本的距 離,工作量有點大,所以在這種情況下,我們可以使用kd tree來快速的計算。

4.2KD Tree構建方式

KD樹採用從m個樣本的n維特徵中,分別計算n個特徵取值的方差,用方差最大 的第k維特徵nkn_k作爲根節點。對於這個特徵,選擇取值的中位數nkvn_{kv}作爲樣本的劃 分點,對於小於該值的樣本劃分到左子樹,對於大於等於該值的樣本劃分到右子 樹,對左右子樹採用同樣的方式找方差最大的特徵作爲根節點,遞歸即可產生 KD樹。

4.3KD tree查找最近鄰

當我們生成KD樹以後,就可以去預測測試集裏面的樣本目標點了。對於一個目 標點,我們首先在KD樹裏面找到包含目標點的葉子節點。以目標點爲圓心,以 目標點到葉子節點樣本實例的距離爲半徑,得到一個超球體,最近鄰的點一定在 這個超球體內部。然後返回葉子節點的父節點,檢查另一個子節點包含的超矩形 體是否和超球體相交,如果相交就到這個子節點尋找是否有更加近的近鄰,有的話 就更新最近鄰。如果不相交那就簡單了,我們直接返回父節點的父節點,在另一 個子樹繼續搜索最近鄰。當回溯到根節點時,算法結束,此時保存的最近鄰節點 就是最終的最近鄰。
在這裏插入圖片描述

5KNN參數說明

參數 KNeighborsClassifier ----- KNeighborsRegressor
weights 樣本權重,可選參數: uniform(等權重)、distance(權重和距離成反比,越近影響越強);默認爲uniform
n_neighbors 鄰近數目,默認爲5
algorithm 計算方式,默認爲auto,可選參數: auto、ball_tree、kd_tree、brute;推薦選擇kd_tree
leaf_size 在使用KD_Tree的時候,葉子數量,默認爲30
metric 樣本之間距離度量公式,默認爲minkowski(閔可夫斯基);當參數p爲2的時候,其實就是歐幾里得距離
p 給定minkowski距離中的p值,默認爲2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章