日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【机器学习入门】图解超经典的KNN算法

發(fā)布時(shí)間:2025/3/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习入门】图解超经典的KNN算法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

出品: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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。