1. 寫(xiě)在前面
近來(lái)感覺(jué)機(jī)器學(xué)習(xí),深度學(xué)習(xí)神馬的是越來(lái)越火了,從AlphaGo到Master,所謂的人工智能越來(lái)越NB,而我又是一個(gè)熱愛(ài)新潮事物的人,于是也來(lái)湊個(gè)熱鬧學(xué)習(xí)學(xué)習(xí)。最近在看《Machine Learning IN ACTION》(作者:Peter Harrington)這本書(shū),感覺(jué)非常不錯(cuò)。該書(shū)不是單純的進(jìn)行理論講解,而是結(jié)合了許多小例子深度淺出地進(jìn)行實(shí)戰(zhàn)介紹。本博文作為學(xué)習(xí)筆記,用來(lái)記錄書(shū)中重點(diǎn)內(nèi)容和稍微地進(jìn)行知識(shí)點(diǎn)的補(bǔ)充,也希望給看到的人帶來(lái)一些幫助。
目前只看到了第2章,由于是剛開(kāi)始,因此難度不大。在數(shù)學(xué)知識(shí)上,該章節(jié)主要涉及到了初級(jí)的線性代數(shù)(矩陣的運(yùn)算)和概率論知識(shí)。書(shū)中的代碼都是用Python 2.7寫(xiě)的,主要用的是NumPy庫(kù)。本章介紹的是k-Nearest Neighbors(kNN,k-近鄰)算法,通過(guò)以下3個(gè)例子進(jìn)行說(shuō)明。
2. kNN簡(jiǎn)介
對(duì)于一個(gè)能夠采用kNN算法求解的問(wèn)題的前提通常是:首先需要有一些關(guān)于該問(wèn)題的樣本數(shù)據(jù)集,稱(chēng)為訓(xùn)練集合;然后每條數(shù)據(jù)都有對(duì)應(yīng)的標(biāo)簽,即我們知道每條數(shù)據(jù)所屬的分類(lèi)。該類(lèi)問(wèn)題的提法通常是:當(dāng)給定一條未知標(biāo)簽的數(shù)據(jù)時(shí),我們能夠根據(jù)樣本數(shù)據(jù)分析出該數(shù)據(jù)的標(biāo)簽。kNN算法的做法是:將未知標(biāo)簽的數(shù)據(jù)和樣本數(shù)據(jù)集中的數(shù)據(jù)相比較,把和未知標(biāo)簽數(shù)據(jù)最“相近”的一些數(shù)據(jù)的標(biāo)簽作為未知標(biāo)簽數(shù)據(jù)的標(biāo)簽。由于“相近”的一些數(shù)據(jù)的標(biāo)簽可能各自都不相同,因此通常選取k個(gè)最為“相近”的標(biāo)簽,統(tǒng)計(jì)各標(biāo)簽出現(xiàn)的次數(shù),選取頻數(shù)最高者。這里“相近”的定義還需要給出。
下面結(jié)合3個(gè)實(shí)戰(zhàn)例子進(jìn)行講解。
3. 愛(ài)情片還是動(dòng)作片
第一個(gè)例子是如何判斷一部我們還沒(méi)有看過(guò)的電影是愛(ài)情片還是動(dòng)作片。直覺(jué)告訴我們,愛(ài)情片的親吻鏡頭較多,而動(dòng)作片的打斗鏡頭較多。為此我們統(tǒng)計(jì)了幾部愛(ài)情片和動(dòng)作片的親吻和打斗的鏡頭數(shù),同時(shí)也對(duì)待判斷的電影(記為電影X)做了統(tǒng)計(jì),我們希望借助于kNN算法判別出電影X是愛(ài)情片還是動(dòng)作片。
如下是統(tǒng)計(jì)結(jié)果: