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