談起機器學習,真是使人心生嚮往同時又讓人頭痛不已。git
心生嚮往是由於機器學習在不少方面都已經展示出其魅力,在人工智能的領域好比說AlphaGo
,計算機視覺領域的人臉識別
,車牌識別
,靠近生活的有推薦系統
,用戶畫像
,情感分析
等等,都或多或少用到機器學習的知識。其中大部分應用是至關能知足程序員心中的極客精神的程序員
但使人頭不痛不已的當你去涉足機器學習
這個領域的時候,你會發現其中涉及大量的數學知識,這對不少程序員來講都很不友好。github
但不要緊,程序員應該是工程師,而不是科學家,咱們要作的是學會把理論落實成爲生產力。算法
所以本系列將盡量下降數學的描述(避免一長串的數學證實)來描述機器學習算法的基本原理。若是須要對算法進行深刻了解和學習,那麼讀者仍是應該學習算法背後的數學原理。機器學習
好了,廢話很少說,立刻開講第一個機器學習的算法,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
中會慢慢更新TO DO LIST
裏說起的算法,但文章因須要語言總結會稍慢一點。
另外,本文題目是機器學習從入門到放棄之KNN算法而非機器學習從入門到放棄(1):KNN算法這樣,由於若是是後者,某日我要棄坑就會觸發個人強迫症,而前者並不會,哈哈哈。
若有錯誤,歡迎指點。