監督學習之KNN算法(分類和迴歸,面試理解程度)

1.1 KNN算法作分類(常見)

1.1 簡述KNN算法

  • 核心思想:
    給定一個訓練數據集,對新的輸入實例,在訓練數據集中找到與該實例最領近的k個實例,這k個實例的多數屬於某個類,則就把該輸入實例分成這個類。
  • 算法:
    輸入:訓練數據集(帶標籤)
    輸出:新的輸入實例 x 所屬的類y
  • KNN模型有何特點:
    當訓練集、距離度量、k值、決策規則確定下來後,對於任何一個新的實例,它所屬的類唯一確定。所以說該算法的主要因素是:距離度量、k值、決策規則。
  • 三要素
    距離度量:一般採用歐氏距離(2範數)
    k值如何確定:k值選擇很小時,就意味着模型比較複雜,容易產生過擬合(例如鄰近的點恰好是噪點,預測就會出錯);k值選擇較大時,意味着模型較爲簡單,就容易產生欠擬合。
    一般先選擇較小的k值,然後使用交叉驗證法來選擇最優的k值
    決策規則:一般爲多數表決,多數表決從某種程度上來說爲經驗風險最小化

1.2簡述KNN算法的優缺點:

優點:
1.思想簡單,理論成熟,既可以用來做分類也可以用來做迴歸。
2.訓練時間複雜度爲O(logN),如果採用kd-tree的話。
3.準確度高,對數據沒有假設,對離羣值不敏感。
缺點:
1.計算量大
2.樣本不平衡問題(即有些類別的樣本數量很多,而其他樣本的數量很少)
3.需要大量內存。

1.3 不平衡樣本可以給KNN預測結果造成哪些問題,有沒有什麼好的解決方式?

可能造成大數量的樣本佔多數,但是這類樣本不接近目標樣本。而數量小的這類樣本很靠近目標樣本。KNN不關心這個問題,他只關心哪類樣本的數量最多,而不去把距離遠近考慮在內。
改進方法:和該樣本距離小的鄰居權值大,遠的權值小,有次講距離遠近因素也考慮在內,避免一個樣本過大導致誤判的情況。

1.4 爲了解決KNN算法計算量過大問題,可以使用分組方式進行計算,簡述一下該方法原理。

將樣本集按近鄰關係分解成組,給出每組的質心得位置,以質心作爲代表點,和位置樣本計算距離,選出距離最近的一個或若干個組,再在組的範圍內應用一般KNN算法,由於並不是將位置樣本與所有樣本計算距離,故該計算可減少計算量,但不能減少存儲量。

1.5 什麼時曼哈頓距離和歐式距離?

不說了,沒意思(L1範數和L2的別稱)

1.6 爲什麼用歐式不用曼哈頓?

我們不用曼哈頓距離,因爲它只計算水平或垂直距離,有維度的限制。另一方面,歐氏距離可用於任何空間的距離計算問題。因爲,數據點可以存在於任何空間,歐氏距離是更可行的選擇。例如:想象一下國際象棋棋盤,象或車所做的移動是由曼哈頓距離計算的,因爲它們是在各自的水平和垂直方向做的運動。

1.7 簡述kd-tree的構造和搜索過程

參考《李航統計學方法》,同時注意一下:

  • 選擇的特徵與樹的深度有關

  • 時間複雜度爲O(logN)

  • 樹的深度和數據的分佈密切相關。

  • 具體的構造及搜索過程在這裏不說了,好好看看書 ,想看博客的話我就貼個連接吧(其實李航書上講的很清楚了,面試前多看兩遍就好了)
    kd-tree

  • 最後,我想說:kd樹適用於訓練實例數遠大於空間維度的數據搜索,當訓練實例小於或接近特徵向量的維度時,算法時間複雜度會變成近似線性。

2. KNN來做迴歸

  • 其實就是將k個鄰居加起來求平均然後輸出,這樣輸出就是連續值了。

參考文獻

參考鏈接

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