k近鄰法(k nearest neighbor algorithm,k-NN)是機器學習中最基本的分類算法,在訓練數據集中找到k個最近鄰的實例,類別由這k個近鄰中占最多的實例的類別來決定,當k=1時,即類別為最近鄰的實例的類別。
如上圖所示(引自wiki),當k=3時,此時紅色的個數為2,則綠色的輸入實例的類別為紅色的三角形,當k=5時,此時藍色的個數為3,輸入實例的類別為藍色的四邊形。
在分類過程中,k值通常是人為預先定義的常值,從上圖可以看出,k值的選取對會對結果有很多的影響。大的k值可以減小噪聲對分類的影響,但是和實例較遠的實類會對判決起作用,通常采用交叉驗證的方式來選取最優的k值。
通常實類間的距離通常采用歐氏距離,這主要面向的是連續的特征變量,對於文本分類問題,可以采用漢明距離(Hamming distance),定義為兩個字符串對應位置的不同字符的個數。對距離的度量很多,往往按照應用來決定。
k近鄰法的最簡單的實現就是線性掃描,當訓練集的數據很大,特征的維度很高的時候,計算量就會過於巨大,可以通過建立k-d tree進行快速搜索k近鄰。
繼續閱讀
http://blog.csdn.net/hust_core/article/details/7628177
http://www.cnblogs.com/eyeszjwang/articles/2429382.html
http://www.cnblogs.com/eyeszjwang/articles/2432465.html