色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過簡單的暴力求解的方式實(shí)現(xiàn)KNN算法

電子工程師 ? 來源:lq ? 2019-02-04 10:29 ? 次閱讀

一、KNN回顧

k 近鄰學(xué)習(xí)是一種常用的監(jiān)督學(xué)習(xí)方法,比如:判斷一個人的人品,只需要觀察與他來往最密切的幾個人的人品好壞就可以得出,即“近朱者赤,近墨者黑”。

理論/原理:“物以類聚,人以群分”

相同/近似樣本在樣本空間中是比較接近的,所以可以使用和當(dāng)前樣本比較近的其他樣本的目標(biāo)屬性值作為當(dāng)前樣本的預(yù)測值。

k 近鄰法的工作機(jī)制很簡單:

給定測試樣本,基于某種距離度量(一般使用歐幾里德距離)找出訓(xùn)練集中與其最靠近的k個訓(xùn)練樣本,然后基于這k個“鄰居”的信息來進(jìn)行預(yù)測。

二、KNN三要素

1、K值的選擇

對于K值的選擇,一般根據(jù)樣本分布選擇一個較小的值,然后通過交叉驗(yàn)證來選擇一個比較合適的最終值;

當(dāng)選擇比較小的K值的時(shí)候,表示使用較小領(lǐng)域中的樣本進(jìn)行預(yù)測,訓(xùn)練誤差會減小,但是會導(dǎo)致模型變得復(fù)雜,容易導(dǎo)致過擬合;

當(dāng)選擇較大的K值的時(shí)候,表示使用較大領(lǐng)域中的樣本進(jìn)行預(yù)測,訓(xùn)練誤差會增大,同時(shí)會使模型變得簡單,容易導(dǎo)致欠擬合;

2、距離度量

一般使用歐幾里德距離

關(guān)于距離度量,還有其他方式

3、決策規(guī)則

KNN在做回歸和分類的主要區(qū)別在于最后做預(yù)測時(shí)的決策方式不同:

(1)分類預(yù)測規(guī)則:一般采用多數(shù)表決法或者加權(quán)多數(shù)表決法

假設(shè)圖中 “?”表示待預(yù)測樣本,紅色圓表示一類,藍(lán)色方塊表示一類,2和3表示到待預(yù)測樣本的距離

1. 多數(shù)表決法:

每個鄰近樣本的權(quán)重是一樣的,也就是說最終預(yù)測的結(jié)果為出現(xiàn)類別最多的那個類;

如圖,待預(yù)測樣本被預(yù)測為紅色圓

2. 加權(quán)多數(shù)表決法:

每個鄰近樣本的權(quán)重是不一樣的,一般情況下采用權(quán)重和距離成反比的方式來計(jì)算,也就是說最終預(yù)測結(jié)果是出現(xiàn)權(quán)重最大的那個類別;

如圖,紅色圓到待預(yù)測樣本的距離為3,藍(lán)色方塊到待預(yù)測樣本的距離為2,權(quán)重與距離成反比,所以藍(lán)色的權(quán)重比較大,待預(yù)測樣本被預(yù)測為藍(lán)色方塊。

(2)回歸預(yù)測規(guī)則:一般采用平均值法或者加權(quán)平均值法

假設(shè)上圖中的2和3表示鄰近樣本的目標(biāo)屬性值(標(biāo)簽值),此時(shí)沒有類別,只有屬性值

1、平均值法

每個鄰近樣本的權(quán)重是一樣的,也就是說最終預(yù)測的結(jié)果為所有鄰近樣本的目標(biāo)屬性值的均值;

如圖,均值為(3+3+3+2+2)/5=2.6

2、加權(quán)平均值法

圖中,雙箭頭線上的數(shù)表示到待預(yù)測樣本的距離

每個鄰近樣本的權(quán)重是不一樣的,一般情況下采用權(quán)重和距離成反比的方式來計(jì)算,也就是說在計(jì)算均值的時(shí)候進(jìn)行加權(quán)操作;

如圖,權(quán)重分別為(各自距離反比占距離反比總和的比例):

屬性值為3的權(quán)重:

屬性值為2的權(quán)重:

待預(yù)測樣本的加權(quán)平均值為:

三、手寫 k 近鄰算法

實(shí)現(xiàn)kNN分類算法的偽代碼:

對未知類別屬性的數(shù)據(jù)集中的每個點(diǎn)依次執(zhí)行一下操作:

(1)計(jì)算已知類別數(shù)據(jù)集中的點(diǎn)與當(dāng)前點(diǎn)之間的距離

(2)按照距離遞增次序排序

(3)選取與當(dāng)前點(diǎn)距離最小的k個點(diǎn)

(4)確定前k個點(diǎn)所在類別的出現(xiàn)頻數(shù)

(5)返回當(dāng)前k個點(diǎn)出現(xiàn)頻數(shù)最高的類別作為當(dāng)前點(diǎn)的預(yù)測分類

歐氏距離公式:

例如求點(diǎn)(1,0,0,1) (1,0,0,1)(1,0,0,1)和(7,6,9,4) (7,6,9,4)(7,6,9,4)之間的距離:

檢測分類器效果:

可以使用已知類別的數(shù)據(jù)(當(dāng)然不告訴分類器),檢驗(yàn)分類器給出的結(jié)果是否與已知類別相同,通過大量的測試數(shù)據(jù),我們可以計(jì)算出分類器的錯誤率。

以上算法的實(shí)現(xiàn)是用于分類的,決策規(guī)則使用了多數(shù)表決法;此算法通過改變決策規(guī)則,同樣可以用于回歸。

源代碼可見:https://github.com/Daycym/Machine_Learning/tree/master/03_KNN;01_k近鄰算法.py

四、使用手寫k kk 近鄰算法的案例

1、案例1:約會網(wǎng)站的配對效果

樣本包括3種特征:

每年獲得的飛行常客里程數(shù)

視頻游戲所耗時(shí)間百分比

每周消費(fèi)的冰淇淋公升數(shù)

樣本包括3種標(biāo)簽:

不喜歡的人

魅力一般的人

極具魅力的人

部分?jǐn)?shù)據(jù)格式為:

代碼可見:02_約會網(wǎng)站的配對效果.py

2、案例2:手寫數(shù)字識別系統(tǒng)

數(shù)據(jù)集包括訓(xùn)練集和測試集

數(shù)據(jù)是32*32的二進(jìn)制文本文件

需要將文本數(shù)據(jù)轉(zhuǎn)換為Numpy數(shù)組

如下是0的一種表示:

100000000000001100000000000000000 200000000000011111100000000000000 300000000000111111111000000000000 400000000011111111111000000000000 500000001111111111111100000000000 600000000111111100011110000000000 700000001111110000001110000000000 800000001111110000001110000000000 90000001111110000000111000000000010000000111111000000011110000000001100000011111100000000011100000000120000001111110000000001110000000013000000111110000000000011100000001400000011111000000000001110000000150000000111110000000000011100000016000000011111000000000001110000001700000001111100000000000111000000180000001111100000000000011100000019000000111110000000000001110000002000000000111100000000000011100000210000000011110000000000011110000022000000001111000000000001111000002300000000111100000000001111100000240000000001111000000000011111000025000000000111110000000011111000002600000000011111000000011111100000270000000001111100000011111100000028000000000111111000111111110000002900000000000111111111111110000000300000000000011111111111110000000031000000000000111111111100000000003200000000000000111110000000000000

預(yù)測錯誤的總數(shù)為:10

手寫數(shù)字識別系統(tǒng)的錯誤率為:0.010571

代碼可見:03_手寫數(shù)字識別系統(tǒng).py

五、KD樹

KNN算法的重點(diǎn)在于找出K個最鄰近的點(diǎn),主要方法如下:

1、蠻力實(shí)現(xiàn)(brute)

計(jì)算出待預(yù)測樣本到所有訓(xùn)練樣本的訓(xùn)練數(shù)據(jù),然后選擇最小的K個距離即可得到K個最鄰近點(diǎn);

當(dāng)特征數(shù)比較多,樣本數(shù)比較多的時(shí)候,算法的執(zhí)行效率比較低。

2、KD樹(KD_Tree)

KD_Tree算法中,首先是對訓(xùn)練數(shù)據(jù)進(jìn)行建模,構(gòu)建KD樹,然后再根據(jù)構(gòu)建好的模型來獲取鄰近樣本數(shù)據(jù)

KD_Tree是KNN算法中用于計(jì)算最近鄰的快速、便捷構(gòu)建方式

除此之外,還有一些從KD_Tree修改后的求解最鄰近點(diǎn)的算法,比如:Ball Tree、BBF Tree、MVP Tree等

當(dāng)樣本數(shù)據(jù)量少的時(shí)候,我們可以使用brute這種暴力的方式進(jìn)行求解最近鄰,即計(jì)算到所有樣本的距離。

當(dāng)樣本量比較大的時(shí)候,直接計(jì)算所有樣本的距離,工作量有點(diǎn)大,所以在這種情況下,我們可以使用kd tree來快速的計(jì)算。

(1)KD數(shù)的構(gòu)建

KD樹采用從m個樣本的n維特征中,分別計(jì)算n個特征取值的方差,用方差最大的第 k 維特征作為根節(jié)點(diǎn)。對于這個特征,選擇取值的中位數(shù)作為樣本的劃分點(diǎn),對于小于該值的樣本劃分到左子樹,對于大于等于該值的樣本劃分到右子樹,對左右子樹采用同樣的方式找方差最大的特征作為根節(jié)點(diǎn),遞歸即可產(chǎn)生KD樹。

假設(shè)二維樣本為:{(2, 3), (5, 4), (9, 6), (4, 7), (8, 1), (7, 2)},下面我們來構(gòu)建KD樹:

1、計(jì)算每個特征的方差,取方差最大的作為根節(jié)點(diǎn)

方差表示數(shù)據(jù)的離散程度,離散程度越大,值越大。因此,選擇第1維特征x1作為根節(jié)點(diǎn)。

2、選取中位數(shù)作為劃分點(diǎn)

x1取值為2,4,5,7,8,9 2,4,5,7,8,92,4,5,7,8,9中位數(shù)取7來劃分,小于該值的放在左子樹,大于該值的放在右子樹

3、特征空間劃分:

(2)KD tree查找最近鄰

當(dāng)我們生成KD樹以后,就可以取預(yù)測測試集里面的樣本目標(biāo)點(diǎn)了。

對于一個目標(biāo)點(diǎn),我們首先在KD樹里面尋找包含目標(biāo)點(diǎn)的葉子節(jié)點(diǎn);

以目標(biāo)點(diǎn)為圓心,以目標(biāo)點(diǎn)到葉子節(jié)點(diǎn)樣本實(shí)例的距離為半徑,得到一個超球體,最近鄰的點(diǎn)一定在這個超球體內(nèi)部;

然后返回葉子節(jié)點(diǎn)的父節(jié)點(diǎn),檢查另一個子節(jié)點(diǎn)包含的超矩形體是否和超球體相交,如果相交就到這個子節(jié)點(diǎn)尋找是否有更加近的近鄰,有點(diǎn)話就更新最近鄰;如果不相交那就直接返回父節(jié)點(diǎn)的父節(jié)點(diǎn),在另一個子樹繼續(xù)搜索最近鄰;

當(dāng)回溯到根節(jié)點(diǎn)時(shí),算法就結(jié)束了,保存最近鄰節(jié)點(diǎn)就是最終的最近鄰。

假設(shè)要尋找點(diǎn)(2,2.5) (2,2.5)(2,2.5)的最近鄰點(diǎn):

六、KNN案例

1、鳶尾花數(shù)據(jù)分類

使用Logistic算法和KNN算法對鳶尾花數(shù)據(jù)進(jìn)行分類,比較結(jié)果;

具體內(nèi)容在代碼的注釋中有介紹;

畫出下面兩張圖,需要將代碼整合起來,才能畫出來。

代碼可見:https://github.com/Daycym/Machine_Learning;02_Logistic回歸下05_鳶尾花數(shù)據(jù)分類.py,以及03_KNN目錄下04_鳶尾花數(shù)據(jù)分類.py。

2、信貸審批

具體內(nèi)容將在代碼中介紹

代碼可見:https://github.com/Daycym/Machine_Learning;02_Logistic回歸下03_信貸審批.py,以及03_KNN目錄下05_信貸審批.py。

七、總結(jié)

本篇主要通過簡單的暴力求解的方式實(shí)現(xiàn)KNN算法,有助于理解KNN算法

后面又介紹了KD樹找K個最近鄰,此算法是最快捷的

最后通過sklearn庫下的KNeighborsClassifier實(shí)現(xiàn)了兩個案例,來屬性KNN模型的構(gòu)建

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    802

    瀏覽量

    41877
  • KNN
    KNN
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    10885
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1212

    瀏覽量

    25004

原文標(biāo)題:一文搞懂K近鄰算法(KNN),附帶多個實(shí)現(xiàn)案例

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于kNN算法可以診斷乳腺癌

    kNN算法診斷乳腺癌
    發(fā)表于 06-21 09:31

    Java的KNN算法

    3在Java中使用K最近鄰(KNN)分類器
    發(fā)表于 09-10 13:48

    KNN算法原理

    KNN(K近鄰算法
    發(fā)表于 11-01 09:14

    KNN分類算法及python代碼實(shí)現(xiàn)

    kNN分類算法的Python實(shí)現(xiàn)
    發(fā)表于 06-05 12:02

    使用KNN進(jìn)行分類和回歸

    一般情況下k-Nearest Neighbor (KNN)都是用來解決分類的問題,其實(shí)KNN是一種可以應(yīng)用于數(shù)據(jù)分類和預(yù)測的簡單算法,本文中我們將它與
    發(fā)表于 10-28 14:44

    利用KNN算法實(shí)現(xiàn)基于系統(tǒng)調(diào)用的入侵檢測技術(shù)

    算法來自一種文本分類算法-KNN 算法,文中給出了用該算法實(shí)現(xiàn)的入侵檢測系統(tǒng)模型.利用該
    發(fā)表于 06-13 11:01 ?18次下載

    結(jié)合SVM和KNN實(shí)現(xiàn)求解大規(guī)模復(fù)雜問題的分治算法

    針對于使用支持向量機(jī)求解大規(guī)模復(fù)雜問題存在訓(xùn)練時(shí)間過長和分類精度不高等困難,本文提出了一種結(jié)合支持向量機(jī)(SVM)和K-最近鄰(KNN)分類的分治算法。首先對支持向量機(jī)分類
    發(fā)表于 01-15 16:12 ?17次下載

    蟻群算法實(shí)現(xiàn)求解TSP問題_郝春梅

    蟻群算法實(shí)現(xiàn)求解TSP問題_郝春梅
    發(fā)表于 03-19 11:45 ?0次下載

    結(jié)合LSH的KNN數(shù)據(jù)填補(bǔ)算法

    K近鄰(kNN算法是缺失數(shù)據(jù)填補(bǔ)的常用算法,但由于需要逐個計(jì)算所有記錄對之間的相似度,因此其填補(bǔ)耗時(shí)較高。為提高算法效率,提出結(jié)合局部敏感哈希( LSH)的
    發(fā)表于 12-23 10:57 ?0次下載

    人工智能機(jī)器學(xué)習(xí)之K近鄰算法KNN

    K近鄰KNN(k-Nearest Neighbor)算法,也叫K最近鄰算法,1968年由 Cover 和 Hart 提出,是機(jī)器學(xué)習(xí)算法中比較成熟的
    發(fā)表于 05-29 06:53 ?2965次閱讀

    詳解機(jī)器學(xué)習(xí)分類算法KNN

    本文主要介紹一個被廣泛使用的機(jī)器學(xué)習(xí)分類算法,K-nearest neighbors(KNN),中文叫K近鄰算法
    的頭像 發(fā)表于 10-31 17:18 ?6263次閱讀

    數(shù)據(jù)科學(xué)經(jīng)典算法 KNN 已被嫌慢,ANN 比它快 380 倍

    - 近鄰算法非常簡單而有效,它的模型表示就是整個訓(xùn)練數(shù)據(jù)集。就原理而言,對新數(shù)據(jù)點(diǎn)的預(yù)測結(jié)果是通過在整個訓(xùn)練集上搜索與該數(shù)據(jù)點(diǎn)最相似的 K 個實(shí)例(近鄰)并且總結(jié)這 K 個實(shí)例的輸出變量而得出的。
    的頭像 發(fā)表于 01-02 09:08 ?8149次閱讀

    如何使用Arduino KNN庫進(jìn)行簡單的機(jī)器學(xué)習(xí)?

    除了像TensorFlow for Arduino這樣強(qiáng)大的深度學(xué)習(xí)架構(gòu)外,還有一些經(jīng)典的ML方法適用于嵌入式設(shè)備上的較小數(shù)據(jù)集,這些方法有用且易于理解-最簡單的方法之一就是KNNKNN的一個
    的頭像 發(fā)表于 04-01 10:07 ?3680次閱讀
    如何使用Arduino <b class='flag-5'>KNN</b>庫進(jìn)行<b class='flag-5'>簡單</b>的機(jī)器學(xué)習(xí)?

    通過Python腳本實(shí)現(xiàn)WIFI密碼的暴力破解

    本文將記錄學(xué)習(xí)下如何通過 Python 腳本實(shí)現(xiàn) WIFI 密碼的暴力破解。
    的頭像 發(fā)表于 09-19 09:55 ?6904次閱讀

    【每天學(xué)點(diǎn)AI】KNN算法簡單有效的機(jī)器學(xué)習(xí)分類器

    過程,其實(shí)就是一個簡單的分類問題,而KNN(K-NearestNeighbors)算法正是模仿這種人類決策過程的機(jī)器學(xué)習(xí)算法。|什么是KNN
    的頭像 發(fā)表于 10-31 14:09 ?493次閱讀
    【每天學(xué)點(diǎn)AI】<b class='flag-5'>KNN</b><b class='flag-5'>算法</b>:<b class='flag-5'>簡單</b>有效的機(jī)器學(xué)習(xí)分類器
    主站蜘蛛池模板: 人妻少妇偷人精品无码洋洋AV | 一个人HD高清在线观看免费视频 | 无限资源在线观看播放 | 国产精品你懂的在线播放 | 99热这里只有精品视频2 | 99久久久久亚洲AV无码 | chinese帅哥gv在线看 | 亚洲精品久久午夜麻豆 | 樱花草在线影视WWW日本动漫 | 性色少妇AV蜜臀人妻无码 | 色视频色露露永久免费观看 | 伊人国产在线观看 | 国产精品久久久久秋霞影视 | 国产女合集小岁9三部 | 国产亚洲色婷婷久久精品99 | 久久精品国产99欧美精品亚洲 | 97超在线视频| 国产精品18久久久久久白浆. | 日韩高清在线亚洲专区 | 蜜饯1V1高H- 秘密影院久久综合亚洲综合 | 吻嘴胸全身好爽床大全 | 国产成人精品久久一区二区三区 | 亚洲乱码高清午夜理论电影 | 男生J桶进女人P又色又爽又黄 | 国产精品18久久久久久欧美 | 国语92电影网午夜福利 | 老师洗澡让我吃她胸的视频 | 久久精品视在线观看85 | 亚洲欧美精品无码大片在线观看 | 亚洲熟伦熟女专区 | 她也色在线视频站 | 日本xxxx19| 一抽一出BGM免费50分动漫 | 久见久热 这里只有精品 | 伊人网综合网 | 再插深点嗯好大好爽 | 狠狠躁天天躁小说 | 91嫩草国产在线观看免费 | 99久久综合精品免费 | 国产一区二区三区内射高清 | 朝鲜女人性猛交 |