一乡摹、開(kāi)發(fā)機(jī)器學(xué)習(xí)應(yīng)用程序的步驟
1再层、收集數(shù)據(jù)状知。
我們可以使用很多方法收集樣本數(shù)據(jù)秽五,如:制作網(wǎng)絡(luò)爬蟲(chóng)從網(wǎng)站上抽取數(shù)據(jù)、從RSS反饋或者API中得到信息饥悴、設(shè)備發(fā)送過(guò)來(lái)的實(shí)測(cè)數(shù)據(jù)(風(fēng)速筝蚕、血糖等)卦碾。提取數(shù)據(jù)的方法非常多,為了節(jié)省時(shí)間與精力起宽,可以使用公開(kāi)可用的數(shù)據(jù)源洲胖。
2、準(zhǔn)備輸入數(shù)據(jù)坯沪。
得到數(shù)據(jù)之后绿映,還必須確保數(shù)據(jù)格式符合要求,本書(shū)采用的格式是Python語(yǔ)言的List腐晾。使用這種標(biāo)準(zhǔn)數(shù)據(jù)格式可以融合算法和數(shù)據(jù)源叉弦,方便匹配操作。
3藻糖、分析輸入數(shù)據(jù)淹冰。
此步驟主要是人工分析以前得到的數(shù)據(jù)。為了確保前兩步有效巨柒,最簡(jiǎn)單的方法是用文本編輯器打開(kāi)數(shù)據(jù)文件樱拴,査看得到的數(shù)據(jù)是否為空值。此外洋满,還可以進(jìn)一步瀏覽數(shù)據(jù)晶乔,分析是否可以識(shí)別出模式;數(shù)據(jù)中是否存在明顯的異常值牺勾,如某些數(shù)據(jù)點(diǎn)與數(shù)據(jù)集中的其他值存在明顯的差異正罢。通過(guò)一維、二維或三維圖形展示數(shù)據(jù)也是不錯(cuò)的方法驻民,然而大多數(shù)時(shí)候我們得到數(shù)據(jù)的特征值都不會(huì)低于三個(gè)翻具,無(wú)法一次圖形化展示所有特征。本書(shū)的后續(xù)章節(jié)將會(huì)介紹提煉數(shù)據(jù)的方法回还,使得多維數(shù)據(jù)可以壓縮到二維或三維呛占,方便我們圖形化展示數(shù)據(jù)。
這一步的主要作用是確保數(shù)據(jù)集中沒(méi)有垃圾數(shù)據(jù)懦趋。如果是在產(chǎn)品化系統(tǒng)中使用機(jī)器學(xué)習(xí)算法
并且算法可以處理系統(tǒng)產(chǎn)生的數(shù)據(jù)格式晾虑,或者我們信任數(shù)據(jù)來(lái)源,可以直接跳過(guò)第3步仅叫。此步驟需要人工干預(yù)帜篇,如果在自動(dòng)化系統(tǒng)中還需要人工干預(yù),顯然就降低了系統(tǒng)的價(jià)值诫咱。
4笙隙、訓(xùn)練算法。
機(jī)器學(xué)習(xí)算法從這一步才真正開(kāi)始學(xué)習(xí)坎缭。根據(jù)算法的不同竟痰,第4步和第5步是機(jī)器學(xué)習(xí)算法的核心签钩。我們將前兩步得到的格式化數(shù)據(jù)輸入到算法,從中抽取知識(shí)或信息坏快。這里得到的知識(shí)需要存儲(chǔ)為計(jì)算機(jī)可以處理的格式铅檩,方便后續(xù)步驟使用。
如果使用無(wú)監(jiān)督學(xué)習(xí)算法莽鸿,由于不存在目標(biāo)變量值昧旨,故而也不需要訓(xùn)練算法,所有與算法相
關(guān)的內(nèi)容都集中在第5步祥得。
5兔沃、測(cè)試算法。
這一步將實(shí)際使用第4步機(jī)器學(xué)習(xí)得到的知識(shí)信息级及。為了評(píng)估算法乒疏,必須測(cè)試算
法工作的效果。對(duì)于監(jiān)督學(xué)習(xí)饮焦,必須已知用于評(píng)估算法的目標(biāo)變量值怕吴;對(duì)于無(wú)監(jiān)督學(xué)習(xí),也必須用其他的評(píng)測(cè)手段來(lái)檢驗(yàn)算法的成功率追驴。無(wú)論哪種情形,如果不滿意算法的輸出結(jié)果疏之,則可以回到第4步殿雪,改正并加以測(cè)試。問(wèn)題常常會(huì)跟數(shù)據(jù)的收集和準(zhǔn)備有關(guān)锋爪,這時(shí)你就必須跳回第1步重新開(kāi)始丙曙。
6、使用算法其骄。
將機(jī)器學(xué)習(xí)算法轉(zhuǎn)換為應(yīng)用程序亏镰,執(zhí)行實(shí)際任務(wù),以檢驗(yàn)上述步驟是否可以
在實(shí)際環(huán)境中正常工作拯爽。此時(shí)如果碰到新的數(shù)據(jù)問(wèn)題索抓,同樣需要重復(fù)執(zhí)行上述的步驟。
K-近鄰算法(KNN)
工作原理
存在一個(gè)樣本數(shù)據(jù)集合毯炮,也稱(chēng)作訓(xùn)練樣本集逼肯,并且樣本集中每個(gè)數(shù)據(jù)都存在標(biāo)簽,即我們知道樣本集中每一數(shù)據(jù)與所屬分類(lèi)的對(duì)應(yīng)關(guān)系桃煎。輸人沒(méi)有標(biāo)簽的新數(shù)據(jù)后篮幢,將新數(shù)據(jù)的每個(gè)特征與樣本集中數(shù)據(jù)對(duì)應(yīng)的特征進(jìn)行比較,然后算法提取樣本集中特征最相似數(shù)據(jù)(最近鄰)的分類(lèi)標(biāo)簽为迈。
一般來(lái)說(shuō)三椿,我們只選擇樣本數(shù)據(jù)集中前k個(gè)最相似的數(shù)據(jù)缺菌,這就是k-近鄰算法中k的出處,通常k是不大于20的整數(shù)。
最后搜锰,選擇k個(gè)最相似數(shù)據(jù)中出現(xiàn)次數(shù)最多的分類(lèi)伴郁,作為新數(shù)據(jù)的分類(lèi)。
一般流程
按照開(kāi)發(fā)機(jī)器學(xué)習(xí)應(yīng)用的通用步驟纽乱,K-近鄰算法一般流程如下:
1蛾绎、收集數(shù)據(jù):可以使用任何方法。
2鸦列、準(zhǔn)備數(shù)據(jù):距離計(jì)算所需要的數(shù)值租冠,最好是結(jié)構(gòu)化的數(shù)據(jù)格式。
3薯嗤、分析數(shù)據(jù):可以使用任何方法顽爹。
4、訓(xùn)練算法:此步驟不適用于1 近鄰算法骆姐。
5镜粤、測(cè)試算法:計(jì)算錯(cuò)誤率。
6玻褪、使用算法:首先需要輸入樣本數(shù)據(jù)和結(jié)構(gòu)化的輸出結(jié)果肉渴,然后運(yùn)行女-近鄰算法判定輸
入數(shù)據(jù)分別屬于哪個(gè)分類(lèi),最后應(yīng)用對(duì)計(jì)算出的分類(lèi)執(zhí)行后續(xù)的處理带射。
python實(shí)現(xiàn)
導(dǎo)入數(shù)據(jù)
為了測(cè)試機(jī)器學(xué)習(xí)算法的效果同规,通常使用兩套獨(dú)立的樣本集:訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)。當(dāng)機(jī)器
學(xué)習(xí)程序開(kāi)始運(yùn)行時(shí)窟社,使用訓(xùn)練樣本集作為算法的輸人券勺,訓(xùn)練完成之后輸人測(cè)試樣本。比較測(cè)試樣本預(yù)測(cè)的目標(biāo)變量值與實(shí)際樣本類(lèi)別之間的差別灿里,就可以得出算法的實(shí)際精確度关炼。
以下是K-近鄰算法的訓(xùn)練數(shù)據(jù):
def create_data_set():
group = np.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
labels = ['A', 'A', 'B', 'B']
return group, labels
這里有4組數(shù)據(jù),每組數(shù)據(jù)有兩個(gè)我們已知的屬性或者特征值匣吊。上面的group矩陣每行包含一個(gè)不同的數(shù)據(jù)儒拂,我們可以把它想象為某個(gè)日志文件中不同的測(cè)量點(diǎn)或者入口。由于人類(lèi)大腦的限制色鸳,我們通常只能可視化處理三維以下的事務(wù)侣灶。因此為了簡(jiǎn)單地實(shí)現(xiàn)數(shù)據(jù)可視化,對(duì)于每個(gè)數(shù)據(jù)點(diǎn)我們通常只使用兩個(gè)特征缕碎。
labels包含了每個(gè)數(shù)據(jù)點(diǎn)的標(biāo)簽信息褥影,label包含的元素個(gè)數(shù)等于group矩陣行數(shù)。這
里我們將數(shù)據(jù)點(diǎn)(1咏雌,1.1)定義為類(lèi)A凡怎,數(shù)據(jù)點(diǎn)(0, 0.1)定義為類(lèi)B 校焦。為了說(shuō)明方便,例子中的數(shù)值是任意選擇的统倒,并沒(méi)有給出軸標(biāo)簽寨典。
偽代碼
1、計(jì)算已知類(lèi)別數(shù)據(jù)集中的點(diǎn)與當(dāng)前點(diǎn)之間的距離房匆;
2耸成、按照距離遞增次序排序;
3浴鸿、選取與當(dāng)前點(diǎn)距離最小的走個(gè)點(diǎn)井氢;
4、確定前灸個(gè)點(diǎn)所在類(lèi)別的出現(xiàn)頻率岳链;
5花竞、返回前女個(gè)點(diǎn)出現(xiàn)頻率最高的類(lèi)別作為當(dāng)前點(diǎn)的預(yù)測(cè)分類(lèi)。