《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模擬設(shè)計(jì) > 業(yè)界動(dòng)態(tài) > 基于Dragonboard 410c開(kāi)發(fā)板的機(jī)器學(xué)習(xí)研究(一)K-近鄰算法

基于Dragonboard 410c開(kāi)發(fā)板的機(jī)器學(xué)習(xí)研究(一)K-近鄰算法

2017-04-19

  機(jī)器學(xué)習(xí)與人工智能一起作為當(dāng)前最流行的一個(gè)概念,目前已經(jīng)被廣泛的應(yīng)用到各個(gè)領(lǐng)域,如人們常用的微信、支付寶、百度等,這些軟件里面都集成了機(jī)器學(xué)習(xí)算法,以實(shí)現(xiàn)各種智能化的操作,讓用戶(hù)體驗(yàn)更加,如在百度的在線識(shí)別圖像應(yīng)用,阿里巴巴的商品智能推薦、人臉識(shí)別驗(yàn)證等這些都用到了機(jī)器學(xué)習(xí)的相關(guān)技術(shù),當(dāng)然有的是更高級(jí)的深度學(xué)習(xí)(其實(shí)質(zhì)也是機(jī)器學(xué)習(xí)的一種,更加高大上,具體概念以及關(guān)于機(jī)器學(xué)習(xí)、深度學(xué)習(xí)和模式識(shí)別大家可以參考深度學(xué)習(xí) vs 機(jī)器學(xué)習(xí) vs 模式識(shí)別三種技術(shù)對(duì)比這篇文章),但是機(jī)器學(xué)習(xí)只能用在這些高大上的地方么?當(dāng)然不是,其實(shí)在我們普通的開(kāi)發(fā)者想DIY自己的東西的時(shí)候,也可以用到機(jī)器學(xué)習(xí),如在你的智能車(chē)視覺(jué)避障中就可以用機(jī)器學(xué)習(xí)來(lái)構(gòu)建障礙物模型,在人臉識(shí)別中就可以用機(jī)器學(xué)習(xí)來(lái)不斷優(yōu)化識(shí)別結(jié)果,好了廢話不多說(shuō)了,如果能夠在自己的DIY中,在你的Dragonboard 410c中用上機(jī)器學(xué)習(xí),是不是更高大上?

94e677bd83813666dc78c71a315e185b.jpg

  機(jī)器學(xué)習(xí)的算法非常多,今天給大家來(lái)一個(gè)入門(mén)級(jí)別的,也是機(jī)器學(xué)習(xí)中最簡(jiǎn)單的一個(gè)算法,K-近鄰算法(KNN),該算法是采用不同特征值之間的距離的方法來(lái)對(duì)不同的對(duì)象進(jìn)行分類(lèi),在具體的操作過(guò)程中我們需要一個(gè)樣本集,這個(gè)樣本集中的所有的特征數(shù)據(jù)都有一個(gè)對(duì)應(yīng)的標(biāo)簽,即這個(gè)樣本集中所有的數(shù)據(jù)所對(duì)應(yīng)的分類(lèi)屬性我們是知道的,然后再輸入新的數(shù)據(jù)的時(shí)候,KNN算法就通過(guò)計(jì)算實(shí)現(xiàn)新數(shù)據(jù)與樣本數(shù)據(jù)的比較,同時(shí)提取樣本中特征最相似的數(shù)據(jù)對(duì)應(yīng)的分類(lèi)標(biāo)簽,在具體的KNN處理過(guò)程中,通常只選取樣本數(shù)據(jù)的前k個(gè)最相似的數(shù)據(jù),然后選取這前k個(gè)數(shù)據(jù)中出現(xiàn)次數(shù)最多的標(biāo)簽作為結(jié)果。

  有了上述了解了,基本上你只要知道KNN就是一個(gè)簡(jiǎn)單的分類(lèi)器,將東西進(jìn)行分類(lèi),既然提到了分類(lèi),我們通過(guò)生活中簡(jiǎn)單的一個(gè)分類(lèi)場(chǎng)景來(lái)向大家介紹KNN算法的具體實(shí)現(xiàn)原理和過(guò)程,并且結(jié)合Python腳本告訴大家怎么在Dragonbaord 410c上編寫(xiě)和運(yùn)行KNN算法。

  這里引用的是《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》中的一個(gè)經(jīng)典的學(xué)習(xí)例子,根據(jù)電影中出現(xiàn)的接吻鏡頭和打斗鏡頭的數(shù)量來(lái)判斷一部電影是屬于愛(ài)情片還是屬于動(dòng)作片,具體可以通過(guò)下圖來(lái)進(jìn)行描述:

5994bd8ea249dcf552de7b309da50d75.jpg

  在上圖中,我們已經(jīng)知道了六部電影的接吻鏡頭和打斗鏡頭的數(shù)目,但是如果給你一個(gè)新的電影,并且告訴你了接吻鏡頭和打斗鏡頭數(shù),這個(gè)時(shí)候你該如何確定這部電影是什么類(lèi)型電影呢?

  在分析中,為了更好的看出我們已經(jīng)知道的六部電影的各種鏡頭的數(shù)量和所屬類(lèi)型,下面給出了各個(gè)電影的鏡頭和類(lèi)型分布表:

 c41d846633fb81d35e597d6295c62b80.jpg

  根據(jù)前面跟大家聊的KNN算法原理,我們主要是根據(jù)樣本數(shù)據(jù),計(jì)算未知的數(shù)據(jù)與樣本數(shù)據(jù)的距離,然后根據(jù)標(biāo)簽出現(xiàn)頻率來(lái)實(shí)現(xiàn)分類(lèi),這里我們?nèi)绻肒NN來(lái)實(shí)現(xiàn)對(duì)根據(jù)已知的這六部電影的分類(lèi),來(lái)實(shí)現(xiàn)對(duì)未知電影的分類(lèi)就非常簡(jiǎn)單了。其中KNN實(shí)現(xiàn)核心代碼如下:

  def classify0(inX, dataSet, labels, k):

  dataSetSize = dataSet.shape[0]

  diffMat = TIle(inX, (dataSetSize,1)) - dataSet

  sqDiffMat = diffMat**2

  sqDistances = sqDiffMat.sum(axis=1)

  distances = sqDistances**0.5

  sortedDisTIndicies = distances.argsort()

  classCount={}

  for i in range(k):

  voteIlabel = labels[sortedDisTIndicies[i]]

  classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1

  sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)

  return sortedClassCount[0][0]

  上述代碼中classify0包含了4個(gè)參數(shù),分別用于輸入向量inX、輸入訓(xùn)練樣本集dataSet、標(biāo)簽向量labels,選擇最近鄰居的數(shù)目參數(shù)k,在本文使用的KNN算法中,計(jì)算距離使用了常用的歐氏距離公式,如下:

5983a80f1941ca12025b504d9e3359b9.png

  詳細(xì)的代碼大家可以到 http://pan.baidu.com/s/1mh5W0XU 下載,

  好了,準(zhǔn)備好代碼后,我們就可以進(jìn)行測(cè)試了,將代碼通過(guò)SD卡或者U盤(pán)拷貝到我們的Dragonbaord 410c上,然后輸入cd命令跳轉(zhuǎn)到代碼目錄下,輸入Python,進(jìn)入到Python命令模式,輸入下面測(cè)試命令:

  >>> import kNN

  >>> group,lables = kNN.createDataSet()

  >>>kNN,classify0([0,0],group,lables,3)

  我們可以看到輸出結(jié)果為B,如下圖所示,同時(shí)大家在測(cè)試過(guò)程中也可以改變輸入的[0,0]為其他值,測(cè)試結(jié)果。

80bf087e52ef3924596fae0cfc672b58.jpg

  到這里我們已經(jīng)成功的完成在Dragonbaord 410c上借助于Python腳本完成了我們KNN算法的編寫(xiě)和測(cè)試,利用測(cè)試代碼大家可以進(jìn)行擴(kuò)展,將該分類(lèi)器用于你的DIY中的其他識(shí)別和分類(lèi)中,讓你的DIY變得更加智能,后期我將在機(jī)器學(xué)習(xí)系列blog中向大家進(jìn)一步介紹更為復(fù)雜的機(jī)器學(xué)習(xí)算法和在Dragonbaord410c上實(shí)現(xiàn)。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。