k值的選擇對於kNN演算法的結果有非常顯著的影響。下面用李航博士的《統計學習方法》一書中的敘述,來對k值的選擇加以說明。
如果選擇較小的$k$值,就相當於用較小的鄰域中的訓練例項進行預測,“學習”的近似誤差會減小,只有與輸入例項較近(相似的)訓練例項才會對預測結果起作用;但缺點是“學習”的估計誤差會增大,預測結果會對近鄰的例項點非常敏感,如果近鄰的例項點剛好是噪聲,預測就會出錯。換句話說,$k$值的減小就意味著整體模型變得複雜,容易發生過擬合。
如果選擇較大的$k$值,就相當於用較大的鄰域中的訓練例項進行預測,其優點是可以減少學習的估計誤差,但缺點是學習的近似誤差會增大。這時候,與輸入例項較遠(不相似的)訓練例項也會對預測起作用,使預測發生錯誤。對於$k=N$的極端情況(其中$N$代表所有的訓練例項的數量),那麼無論輸入例項是什麼,都會預測它屬於訓練例項中最多的類,很顯然,這樣的模型完全忽略了訓練例項中大量的有用資訊,是不可取的。
實際應用中,$k$的取值通常都比較小,可以透過交叉檢驗的方式來選擇較好的$k$值。
優點:
- 簡單有效
- 重新訓練代價低
- 適合類域交叉樣本
- 適合大樣本分類
缺點:
- 惰性學習
- 輸出的可解釋性不強
- 不擅長處理不均衡樣本
- 計算量比較大