【机器学习入门】图解超经典的KNN算法
出品:Python數(shù)據(jù)之道(ID:PyDataLab)
作者:Peter,來(lái)自讀者投稿
編輯:Lemon
圖解超經(jīng)典的KNN算法
本文中介紹的機(jī)器學(xué)習(xí)算法中的一種監(jiān)督學(xué)習(xí)的算法:KNN 算法,全稱(chēng)是 K-Nearest Neighbor,中文稱(chēng)之為 K 近鄰算法。
它是機(jī)器學(xué)習(xí)可以說(shuō)是最簡(jiǎn)單的分類(lèi)算法之一,同時(shí)也是最常用的分類(lèi)算法之一。在接下來(lái)的內(nèi)容中,將通過(guò)以下的幾個(gè)方面的內(nèi)容對(duì)該算法進(jìn)行詳細(xì)的講解:
1、算法思想
思想
首先對(duì) KNN 算法的思想進(jìn)行簡(jiǎn)單的描述:
KNN 算法是一個(gè)基本的分類(lèi)和回歸的算法,它是屬于監(jiān)督學(xué)習(xí)中分類(lèi)方法的一種。其大致思想表述為:
給定一個(gè)訓(xùn)練集合 M 和一個(gè)測(cè)試對(duì)象 n ,其中該對(duì)象是由一個(gè)屬性值和未知的類(lèi)別標(biāo)簽組成的向量。
計(jì)算對(duì)象 m 和訓(xùn)練集中每個(gè)對(duì)象之間的距離(一般是歐式距離)或者相似度(一般是余弦相似度),確定最近鄰的列表
將最近鄰列表中數(shù)量占據(jù)最多的類(lèi)別判給測(cè)試對(duì)象 z 。
一般來(lái)說(shuō),我們只選擇訓(xùn)練樣本中前 K 個(gè)最相似的數(shù)據(jù),這便是 k-近鄰算法中 k 的出處。
用一句俗語(yǔ)來(lái)總結(jié) KNN 算法的思想:物以類(lèi)聚,人以群分
說(shuō)明
所謂的監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí),指的是訓(xùn)練數(shù)據(jù)是否有類(lèi)別標(biāo)簽,如果有則是監(jiān)督學(xué)習(xí),否則是非監(jiān)督學(xué)習(xí)
在監(jiān)督學(xué)習(xí)中,輸入變量和輸出變量可以連續(xù)或者離散的。如果輸入輸出變量都是連續(xù)型變量,則稱(chēng)為回歸問(wèn)題(房?jī)r(jià)預(yù)測(cè));如果輸出是離散型變量,則稱(chēng)之為分類(lèi)問(wèn)題(判斷患者是否屬于患病)
在無(wú)監(jiān)督學(xué)習(xí)中,數(shù)據(jù)是沒(méi)有任何標(biāo)簽的,主要是各種聚類(lèi)算法(以后學(xué)習(xí))
2、算法步驟
KNN 算法的步驟非常簡(jiǎn)單:
計(jì)算未知實(shí)例到所有已知實(shí)例的距離;
選擇參數(shù) K(下面會(huì)具體講解K值的相關(guān)問(wèn)題)
根據(jù)多數(shù)表決( Majority-Voting )規(guī)則,將未知實(shí)例歸類(lèi)為樣本中最多數(shù)的類(lèi)別
3、圖解 KNN 算法
K 值影響
下面通過(guò)一組圖形來(lái)解釋下 KNN 算法的思想。我們的目的是:判斷藍(lán)色的點(diǎn)屬于哪個(gè)類(lèi)別
我們通過(guò)變化 K 的取值來(lái)進(jìn)行判斷。在該算法中K的取值一般是奇數(shù),防止兩個(gè)類(lèi)別的個(gè)數(shù)相同,無(wú)法判斷對(duì)象的類(lèi)別
K=1、3、5、7…….
首先如果 K=1:會(huì)是什么的情況?
根據(jù)圖形判斷:藍(lán)色圖形應(yīng)該是屬于三角形
K=3 的情形
從圖中可以看出來(lái):藍(lán)色部分還是屬于三角形
K=5 的情形:
此時(shí)我們觀察到藍(lán)色部分屬于正方形了
K=7 的情形:
這個(gè)時(shí)候藍(lán)色部分又變成了三角形
小結(jié)
當(dāng) K 取值不同的時(shí)候,判別的結(jié)果是不同的。所以該算法中K值如何選擇將非常重要,因?yàn)樗鼤?huì)影響到我們最終的結(jié)果。
4、K 值選取
交叉驗(yàn)證
上面的一系列圖形中已經(jīng)說(shuō)明了該算法中K值對(duì)結(jié)果的影響。那么 K 值到底該如何選擇呢?謎底揭曉:交叉驗(yàn)證
K 值一般是通過(guò)交叉驗(yàn)證來(lái)確定的;經(jīng)驗(yàn)規(guī)則來(lái)說(shuō),一般 k 是低于訓(xùn)練樣本數(shù)的平方根。
所謂交叉驗(yàn)證就是通過(guò)將原始數(shù)據(jù)按照一定的比例,比如 6/4 ,拆分成訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集,K 值從一個(gè)較小的值開(kāi)始選取,逐漸增大,然后計(jì)算整個(gè)集合的方差,從而確定一個(gè)合適的 K 值。
經(jīng)過(guò)使用交叉驗(yàn)證,我們會(huì)得到類(lèi)似如下的圖形,從圖形中可以明顯的:
當(dāng) K 先不斷增大的時(shí)候,誤差率會(huì)先進(jìn)行降低。因?yàn)閿?shù)據(jù)會(huì)包含更多的樣本可以使用,從而分類(lèi)效果會(huì)更好;
當(dāng) K=10 的附近,出現(xiàn)誤差率的變化,建議 K=9 或者 11 ;
當(dāng) K 不斷增大的時(shí)候,誤差率將會(huì)不斷增加。此時(shí),KNN 算法將會(huì)變得沒(méi)有意義。比如有 50 個(gè)樣本,當(dāng) K 增加到 45 的時(shí)候,算法沒(méi)有意義,幾乎使用了全部樣本數(shù)據(jù),沒(méi)有體現(xiàn)出最近鄰的思想。
K 值過(guò)小
k值太小:容易受到噪聲點(diǎn)的影響
用較小的鄰域中的實(shí)例進(jìn)行預(yù)測(cè);
近似誤差減小,估計(jì)誤差增大;
預(yù)測(cè)結(jié)果對(duì)近鄰的實(shí)例點(diǎn)非常敏感;如果近鄰點(diǎn)恰好是噪聲,預(yù)測(cè)出錯(cuò)。
K 值過(guò)大
k 值太大:分類(lèi)太多,太細(xì),導(dǎo)致包含太多其他類(lèi)別的點(diǎn)
用較大的鄰域中的實(shí)例點(diǎn)進(jìn)行預(yù)測(cè);
減少學(xué)習(xí)的估計(jì)誤差,但是近似誤差增大;
與輸入實(shí)例較遠(yuǎn)的點(diǎn)的訓(xùn)練實(shí)例也會(huì)起預(yù)測(cè)作用;
k 值增大意味著整個(gè)模型變得簡(jiǎn)單。
5、距離問(wèn)題
常見(jiàn)距離
在上面的算法原理中提到,需要計(jì)算測(cè)試對(duì)象和訓(xùn)練集合中每個(gè)對(duì)象距離。在機(jī)器學(xué)習(xí)中,兩個(gè)對(duì)象之間的距離包含:
常用的距離有以下幾種:
歐式距離
曼哈頓距離
切比雪夫距離
閔可夫斯基距離
標(biāo)準(zhǔn)歐式距離
馬氏距離
漢明距離
夾角余弦
杰卡德相似系數(shù)
在 KNN 算法中我們一般采用的是歐式距離(常用)或者曼哈頓距離
歐式距離
N維空間的距離:
當(dāng) n=2 時(shí)候,稱(chēng)之為歐式距離:
其中 X 稱(chēng)之為到原點(diǎn)的歐式距離
曼哈頓距離
曼哈頓距離是閔可夫斯基距離的一種特殊情形。閔可夫斯基距離指的是:
當(dāng) p=2,變成歐式距離;
當(dāng) p=1,變成曼哈頓距離;
當(dāng) p 區(qū)域無(wú)窮,變成切比雪夫距離;
6、算法優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
簡(jiǎn)單易用,而且非常容易弄懂基本原理,KNN 算法可以說(shuō)是機(jī)器算法中最簡(jiǎn)單易懂的算法。即使初學(xué)者沒(méi)有太多的基礎(chǔ),相信也能明白它的原理。
算法是惰性的,模型訓(xùn)練時(shí)間快。KNN 算法沒(méi)有明確的數(shù)據(jù)訓(xùn)練過(guò)程,或者說(shuō)它根本不需要進(jìn)行數(shù)據(jù)的訓(xùn)練,直接可以對(duì)測(cè)試對(duì)象進(jìn)行判斷。
適合用于多分類(lèi)問(wèn)題(對(duì)象具有多個(gè)標(biāo)簽)。
缺點(diǎn)
對(duì)計(jì)算機(jī)的內(nèi)存要求高:因?yàn)樗鎯?chǔ)了整個(gè)訓(xùn)練數(shù)據(jù),性能較低
算法的可解釋差,對(duì)結(jié)果不能給出一定的解釋規(guī)則
什么時(shí)候使用 KNN 算法?scikit-learn 官方中的一張圖給出了一個(gè)答案:
7、KNN算法實(shí)現(xiàn)
下面通過(guò)一個(gè)簡(jiǎn)單的算法來(lái)實(shí)現(xiàn) KNN 算法,主要步驟為:
創(chuàng)建數(shù)據(jù)集合和標(biāo)簽
利用歐式距離,使用 KNN 算法進(jìn)行分類(lèi)
計(jì)算歐式距離
距離的排序(從大到小)
統(tǒng)計(jì) K 個(gè)樣本中出現(xiàn)次數(shù)多的,歸屬于該類(lèi)別
作者簡(jiǎn)介
Peter,碩士畢業(yè)僧一枚,從電子專(zhuān)業(yè)自學(xué)Python入門(mén)數(shù)據(jù)行業(yè),擅長(zhǎng)數(shù)據(jù)分析及可視化。喜歡數(shù)據(jù),堅(jiān)持跑步,熱愛(ài)閱讀,樂(lè)觀生活。個(gè)人格言:不浮于世,不負(fù)于己
個(gè)人站點(diǎn):www.renpeter.cn,歡迎常來(lái)小屋逛逛
本文來(lái)自公眾號(hào)讀者投稿,歡迎各位童鞋向公號(hào)投稿,點(diǎn)擊下面圖片了解詳情!
---------End---------
往期精彩回顧適合初學(xué)者入門(mén)人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專(zhuān)輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專(zhuān)輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專(zhuān)輯獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開(kāi):
https://t.zsxq.com/y7uvZF6
本站qq群704220115。
加入微信群請(qǐng)掃碼:
總結(jié)
以上是生活随笔為你收集整理的【机器学习入门】图解超经典的KNN算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【论文解读】DCN-M:Google提出
- 下一篇: 摊牌了,我靠他实现了NLP模型使用入门