泛統計理論初探——KNN

數據挖掘-knn

KNN算法

KNN算法是機器學習裏較爲簡單和初級的算法,也稱爲最近鄰算法。可以算的上是學習數據挖掘的入門算法,在大賽中,該算法一般用來作爲插值來用,一般不會直接使用該算法來進行預測。
衆所周知,對於KNN算法可以這樣理解,該算法是基於一種現有的數據分佈來作爲判別依據,當一條數據進來時,通過之前確定的參數k去統計,距離這個點最近的k個點的類別,選擇次數最多的類別作爲新數據的類別。
對於這種算法,下述圖片能很好的說明:
knn的k值選取示意圖
在上述的圖片中,A、B、C、D爲已有數據的類型,當新數據x進入時,如果用戶將k定爲4,那麼將統計最近4個點的類別,即藍圈內的類別,出現次數最高的是A,那麼新數據x的類別將被判定爲A。如果用戶將k定爲8,那麼將統計最近8個點的類別,即紅圈內的類別,出現次數最高的是B,那麼新數據x的類別將被判定爲B。

所以對於k的選取是非常重要的,而根據實際的數據集,選取的k是不一樣的。從某種意義來說,k的值不是越大越好,應該取某個範圍內,建議k取值爲2~10。
從另一個方面來說,如何衡量距離當前點最近的標準也是非常重要的。因爲距離的計算公式將直接決定哪些點是最近的。距離的公式有很大,比如曼哈頓距離(絕對值之差)、平方距離、三次方距離、幾何平均距離等。這些距離本質上是1-範數、2-範數、3-範數、p-範數。一般比賽採用曼哈頓距離和平方距離較多,因爲計算量較小且較爲穩定。

在這個基礎上,我們發現其實對於新數據類別的判定是一種基於策略的結果。即k的選取和距離公式會最終影響新數據的類別,一般會把這兩者進行結合。現在從更高的角度去看這個問題,統計次數是一種簡單的計數,是把最近的k個點對於新數據的影響一視同仁。而如果我們對於更近的點賦予更高的權重,更遠的點賦予更小的權重,從某種意義上來說,可以更爲準確的決定新數據的類別。在python自帶的knn方法中,就有這個參數,用戶可以把這個參數設置爲distance,即基於距離的倒數去決定該權重。距離越近的權重越大,距離越遠的權重越小。這也是比較合乎邏輯的優化方法。
KNN方法本質上來說是不需要進行訓練的,即無法通過訓練數據直接得到參數,只能憑藉數據的實際情況去決定k值等參數。並且該方法計算量非常大,當數據本身角度且特徵非常多時,計算量很大,得到的結果往往會被數據本身所影響。下面從兩個角度說明:
(1)數據量很大,且每個特徵的值範圍差距很大。
比如當前班裏40人,新來一個學生,不知道對方性別。現在用全班同學的身高、體重去預測新學生的性別,那麼由於體重的數值和身高的範圍不在一個數量級,很容易會導致體重大的人影響最終的判斷。
在這種情況下,可以對數據進行標準化,將數據轉化爲同一個範圍的數值,再使用KNN算法會得到較爲信服的結果。
(2)數據維度很高
比如當前班裏40人,新來一個學生,不知道對方性別。現在用全班同學的身高、體重、腳長、臂展、胸圍、腰圍、手指長度去預測新學生的性別,那麼由於數據的維度較高,涉及的變量較多,如果直接進行KNN預測,那麼會導致預測的結果不準確。
在這種情況下,可以對變量進行篩選或降維,可以基於用戶經驗對變量進行篩選或使用主成分分析進行數據降維,再使用KNN算法會得到較好的結果。

總的來說,KNN算法是比較簡單的方法,並且對於數據的要求較高,如果數據的維度很高、數據量很大、數據類別的容量不平衡等情況下,不建議直接使用KNN算法。並且直接通過距離對各個變量一視同仁的時候,很難找出究竟是哪一個變量較爲顯著的影響了最終的類別。因此在寫論文或比賽時,可以把這種方法當作一種簡單的嘗試,但不能作爲最終的直接解決方法,儘量結合其他機器學習算法一起構造模型解決問題。

發佈了29 篇原創文章 · 獲贊 30 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章