機器學習從入門到放棄之KNN算法

談起機器學習,真是使人心生嚮往同時又讓人頭痛不已。git

心生嚮往是由於機器學習在不少方面都已經展示出其魅力,在人工智能的領域好比說AlphaGo,計算機視覺領域的人臉識別,車牌識別,靠近生活的有推薦系統,用戶畫像情感分析等等,都或多或少用到機器學習的知識。其中大部分應用是至關能知足程序員心中的極客精神的程序員

但使人頭不痛不已的當你去涉足機器學習這個領域的時候,你會發現其中涉及大量的數學知識,這對不少程序員來講都很不友好。github

但不要緊,程序員應該是工程師,而不是科學家,咱們要作的是學會把理論落實成爲生產力。算法

所以本系列將盡量下降數學的描述(避免一長串的數學證實)來描述機器學習算法的基本原理。若是須要對算法進行深刻了解和學習,那麼讀者仍是應該學習算法背後的數學原理。機器學習

好了,廢話很少說,立刻開講第一個機器學習的算法,KNN算法。學習

KNN算法

算法背景

假設,你是一個電影公司的影片分類員,你須要從一大堆影片裏面分類出武俠片愛情片,用肉眼一部部看確定不科學,如今有一個程序能識別影片中的鏡頭,聰明的你想到了又麼麼噠的場面的必定是愛情片,有廝打場面的就是武俠片。人工智能

其中,麼麼噠廝打兩種場面則稱爲特徵spa

你把這兩種特徵放入程序裏面一分類,咦,怎麼錯這麼多?!設計

而後,你決定打開其中一兩個錯誤的結果看看……code

咦,剛剛還刀劍相向的女主角怎麼怎麼和男主角吻了起來,臥槽,那但是你的殺父仇人啊喂,哦,原來男主角是被奸人所逼……

咦,這愛情片男女主角怎麼吻着吻着就廝打起來,臥槽,還要脫衣服,天啊,我仍是個孩子……

你終於明白,錯誤的緣由是由於沒法將麼麼噠廝打做爲單一特徵,這時,你明白鬚要重設設計分類的標準了。

算法設計

牛逼的你發現,雖然沒法將麼麼噠廝打做爲惟一標準,可是是能夠做爲參考的。好比說,在武俠片中雖然也會出現麼麼噠的鏡頭,但顯然廝打鏡頭仍會佔主流。

因而你對以往已經分好類別的電影作出統計,並的作出如下表格。

其中這部分樣本又叫作訓練集

X=麼麼噠鏡頭的數量
Y=廝打鏡頭的數量
0表明愛情片,1表明武俠片

電影ID X Y 類型
1 10 2 0
2 8 3 0
3 2 6 1
…… …… …… ……

把它畫出二維圖大概是這樣:

圖片描述

黃點表明1類電影的分佈,綠色表明0類電影的分佈,紫色表明須要分類的電影樣本。

那麼該怎麼判別紫色的那顆點所在的類別呢?

沒錯,KNN就是最簡單粗暴的方法,首先判別紫色點離黃色羣體和離綠色羣體距離,而後將紫色判斷爲距離最近的那個羣體。

這裏具體指出利用KNN的具體步驟:

  • 計算上述圖中全部點到達待測點的歐式距離(勾股定理計算)。

  • 選出離待測點最近的K個點,k由用戶指定。

  • 計算在這k個點中,各個類型的個數

  • 將個數最多的類型做爲預測點的類型。

代碼實現

KNN代碼實現,收錄個人github上,點擊一下鏈接並進入classify目錄下就可訪問

github

後話

在個人github中會慢慢更新TO DO LIST裏說起的算法,但文章因須要語言總結會稍慢一點。

另外,本文題目是機器學習從入門到放棄之KNN算法而非機器學習從入門到放棄(1):KNN算法這樣,由於若是是後者,某日我要棄坑就會觸發個人強迫症,而前者並不會,哈哈哈。

若有錯誤,歡迎指點。

相關文章
相關標籤/搜索