目錄
1.KNN簡介
2.KNN算法步驟
3.決策邊界
4.K的選擇
5.要注意的問題
6.小結
1.KNN簡介
KNN(K-NearestNeighbor)是機器學習入門級的分類算法,非常非常簡單。
上一篇我們講過Kmeans,初學者常常把這兩者搞混,雖然KNN是有監督算法,Kmeans是無監督算法,但KNN和Kmeans確實有相同之處:
- 兩者都有“近朱者赤近墨者黑”的思想,將距離近的樣本點劃為同一類別;
雖然兩者名稱中都有“K”,但是:
- KNN中的K指的是近鄰個數,也就是最近的K個點 ;
- Kmeans中的K指的是最終聚類的個數,也就是要將所有點分成K類。
2.KNN算法步驟
我們有一堆樣本點,類別已知,如下圖左,藍色為一類,黃色為另一類?,F在有個新樣本點,也就是圖中黑色的叉叉,需要判斷它屬于哪一類。
KNN做的就是選出距離目標點黑叉叉距離最近的k個點,看這k個點的大多數顏色是什么顏色。這里的距離怎么定義?當然還是可以用我們的老朋友——歐氏距離來度量。
給定兩個樣本
與
,其中n表示特征數 ,X和Y兩個向量間的歐氏距離(Euclidean Distance)表示為:
當我們設定k=1時,距離目標點最近的點是黃色,就認為目標點屬于黃色那類。當k設為3時,我們可以看到距離最近的三個點,有兩個是藍色,一個是黃色,因此認為目標點屬于藍色的一類。
所以,K的選擇不同,得到的結果也會不同,那么最佳的K要怎么確定呢?
3.決策邊界
為了理解K對模型的影響,要先說說決策邊界這個概念。
還記之前講的SVM中的線性分類器嗎?WX+b=0就是SVM中的決策邊界。在二分類問題中,決策邊界就把空間劃為兩部分,兩邊就對應著兩類。
KNN的決策邊界一般不是線性的,也就是說KNN是一種非線性分類器,如下圖。
K越小越容易過擬合,當K=1時,這時只根據單個近鄰進行預測,如果離目標點最近的一個點是噪聲,就會出錯,此時模型復雜度高,穩健性低,決策邊界崎嶇。
但是如果K取的過大,這時與目標點較遠的樣本點也會對預測起作用,就會導致欠擬合,此時模型變得簡單,決策邊界變平滑。
如果K=N的時候,那么就是取全部的樣本點,這樣預測新點時,最終結果都是取所有樣本點中某分類下最多的點,分類模型就完全失效了。
上圖綠線展示的是隨著K減小,測試誤差值(之前介紹過,回歸問題中誤差值一般用均方誤差,分類問題中誤差值指的就是錯判率)的變化,我們的目標就是找到測試誤差最小時對應的K值。
4.K的選擇
找合適的K的過程,也就是“調參”的過程,比較經典的方法是N折交叉驗證。
上圖展示的是5折交叉驗證,也就是將已知樣本集等分為5份,其中4份作為訓練集,1份為驗證集,做出5個模型。
具體來說:
- 把樣本集分成5個小的子集,編號為set1、set2、set3、set4、set5;
- 先用set1、set2、set3、set4建模,得到model1,并在set5上計算誤差error1;
- 在用set1、set2、set3、set5建模,得到model2,并在set4上計算誤差error2;
- 重復以上步驟,建立5個模型,將5個誤差值相加后除以5得到平均誤差。
了解完交叉驗證是什么,我們就可以從k=1開始嘗試,計算K=1時的平均誤差值,每次K增加2,最終能選到產生最小誤差值的K(因為隨著K變大,誤差值會先變小后變大嘛)。
為什么是每次增加2?因為K最好取奇數。還是用最開始那個例子,如果K取4,最近的4個點有2個藍色,2個黃色,這時打成了平手,就不好判斷目標點屬于哪一類了。
5.要注意的問題
第一個要注意的點——標準化!標準化!標準化!
假設我們有兩個樣本點,有兩個特征值,X=(1,200),Y=(2,300),如果不做標準化,他們的歐式距離就是。這樣計算的距離就會受第二個特征的影響特別大,因為第一個特征的量級與第二個相比太小了。
既可以用極差法消除量級:
也可以采用標準差標準化:
第二個要點,KNN實際上是沒有訓練過程的,因此也沒有模型參數(訓練數據時就在學習這個參數)。KNN在驗證過程中計算驗證樣本點和已知樣本點的距離,這時在學習超參數K,超參數是模型外面的參數。
最后一點,前面我們說的都是用KNN算法解決分類問題,但它同樣可以用來處理回歸問題,思路也一樣,根據K個鄰居的Y的平均值(或眾數)求未知樣本的Y,就將分類問題就轉換成了回歸問題了。
6.小結
KNN的優點在于原理簡單,容易實現,對于邊界不規則數據的分類效果好于線性分類器。
當然,也有一些缺點:
- 要保存全部數據集,需要大量的存儲空間;
- 需要計算每個未知點到全部已知點的距離,非常耗時;
- 對于不平衡數據效果不好,需要進行改進;
- 不適用于特征空間維度高的情況。
文中圖片的水印網址為本人CSDN博客地址:BeSimple