《Sklearn 與 TensorFlow 機器學(xué)習(xí)實用指南》第1章 機器學(xué)習(xí)概覽

第1章 機器學(xué)習(xí)概覽

大多數(shù)人聽到“機器學(xué)習(xí)”亚再,往往會在腦海中勾勒出一個機器人:一個可靠的管家,或是一個可怕的終結(jié)者宿饱,這取決于你問的是誰熏瞄。但是機器學(xué)習(xí)并不是未來的幻想,它已經(jīng)來到我們身邊了谬以。事實上强饮,一些特定領(lǐng)域已經(jīng)應(yīng)用機器學(xué)習(xí)幾十年了,比如光學(xué)字符識別 (Optical Character Recognition为黎,OCR)邮丰。但是直到1990年代,第一個影響了數(shù)億人的機器學(xué)習(xí)應(yīng)用才真正成熟铭乾,它就是垃圾郵件過濾器(spam filter)剪廉。雖然并不是一個有自我意識的天網(wǎng)系統(tǒng)(Skynet),垃圾郵件過濾器從技術(shù)上是符合機器學(xué)習(xí)的(它可以很好地進行學(xué)習(xí)炕檩,用戶幾乎不用再標(biāo)記某個郵件為垃圾郵件)斗蒋。后來出現(xiàn)了更多的數(shù)以百計的機器學(xué)習(xí)產(chǎn)品,支撐了更多你經(jīng)常使用的產(chǎn)品和功能笛质,從推薦系統(tǒng)到語音識別泉沾。

機器學(xué)習(xí)的起點和終點分別是什么呢?確切的講妇押,機器進行學(xué)習(xí)是什么意思跷究?如果我下載了一份維基百科的拷貝,我的電腦就真的學(xué)會了什么嗎敲霍?它馬上就變聰明了嗎俊马?在本章中,我們首先會澄清機器學(xué)習(xí)到底是什么肩杈,以及為什么你要使用它柴我。

然后,在我們出發(fā)去探索機器學(xué)習(xí)新大陸之前扩然,我們要觀察下地圖艘儒,以便知道這片大陸上的主要地區(qū)和最明顯的地標(biāo):監(jiān)督學(xué)習(xí)vs非監(jiān)督學(xué)習(xí),線上學(xué)習(xí)vs批量學(xué)習(xí)与学,基于實例vs基于模型學(xué)習(xí)彤悔。然后,我們會學(xué)習(xí)一個典型的機器學(xué)習(xí)項目的工作流程索守,討論可能碰到的難點晕窑,以及如何評估和微調(diào)一個機器學(xué)習(xí)系統(tǒng)。

這一章介紹了大量每個數(shù)據(jù)科學(xué)家需要牢記在心的基礎(chǔ)概念(和習(xí)語)卵佛。第一章只是概覽(唯一不含有代碼的一章)杨赤,相當(dāng)簡單敞斋,但你要確保每一點都搞明白了,再繼續(xù)進行學(xué)習(xí)本書其余章節(jié)疾牲。端起一杯咖啡植捎,開始學(xué)習(xí)吧!

提示:如果你已經(jīng)知道了機器學(xué)習(xí)的所有基礎(chǔ)概念阳柔,可以直接翻到第2章焰枢。如果你不確認(rèn),可以嘗試回答本章末尾列出的問題舌剂,然后再繼續(xù)济锄。

什么是機器學(xué)習(xí)?

機器學(xué)習(xí)是通過編程讓計算機從數(shù)據(jù)中進行學(xué)習(xí)的科學(xué)(和藝術(shù))霍转。

下面是一個更廣義的概念:

機器學(xué)習(xí)是讓計算機具有學(xué)習(xí)的能力荐绝,無需進行明確編程。 —— 亞瑟·薩繆爾避消,1959

和一個工程性的概念:

計算機程序利用經(jīng)驗E學(xué)習(xí)任務(wù)T低滩,性能是P,如果針對任務(wù)T的性能P隨著經(jīng)驗E不斷增長岩喷,則稱為機器學(xué)習(xí)恕沫。 —— 湯姆·米切爾,1997

例如均驶,你的垃圾郵件過濾器就是一個機器學(xué)習(xí)程序昏兆,它可以根據(jù)垃圾郵件(比如枫虏,用戶標(biāo)記的垃圾郵件)和普通郵件(非垃圾郵件妇穴,也稱作ham)學(xué)習(xí)標(biāo)記垃圾郵件。用來進行學(xué)習(xí)的樣例稱作訓(xùn)練集隶债。每個訓(xùn)練樣例稱作訓(xùn)練實例(或樣本)腾它。在這個例子中,任務(wù)T就是標(biāo)記新郵件是否是垃圾郵件死讹,經(jīng)驗E是訓(xùn)練數(shù)據(jù)瞒滴,性能P需要定義:例如,可以使用正確分類的比例赞警。這個性能指標(biāo)稱為準(zhǔn)確率妓忍,通常用在分類任務(wù)中。

如果你下載了一份維基百科的拷貝愧旦,你的電腦雖然有了很多數(shù)據(jù)世剖,但不會馬上變得聰明起來。因此笤虫,這不是機器學(xué)習(xí)旁瘫。

為什么使用機器學(xué)習(xí)祖凫?

思考一下,你會如何使用傳統(tǒng)的編程技術(shù)寫一個垃圾郵件過濾器(圖1-1):

你先觀察下垃圾郵件一般都是什么樣子酬凳。你可能注意到一些詞或短語(比如4U惠况、credit card、free宁仔、amazing)在郵件主題中頻繁出現(xiàn)稠屠,也許還注意到發(fā)件人名字、郵件正文的格式翎苫,等等完箩。

你為觀察到的規(guī)律寫了一個檢測算法,如果檢測到了這些規(guī)律拉队,程序就會標(biāo)記郵件為垃圾郵件弊知。

測試程序,重復(fù)第1步和第2步粱快,直到滿足要求秩彤。

圖1-1 傳統(tǒng)方法

這個問題并不簡單,你的程序很可能會變成一長串復(fù)雜的規(guī)則—— 這樣就會很難維護事哭。

相反的漫雷,基于機器學(xué)習(xí)技術(shù)的垃圾郵件過濾器會自動學(xué)習(xí)哪個詞和短語是垃圾郵件的預(yù)測值,通過與普通郵件比較鳍咱,檢測垃圾郵件中反常頻次的詞語格式(圖1-2)降盹。這個程序短得多,更易維護谤辜,也更精確蓄坏。

圖1-2 機器學(xué)習(xí)方法

進而,如果發(fā)送垃圾郵件的人發(fā)現(xiàn)所有包含“4U”的郵件都被屏蔽了丑念,可能會轉(zhuǎn)而使用“For U”涡戳。使用傳統(tǒng)方法的垃圾郵件過濾器需要更新以標(biāo)記“For U”。如果發(fā)送垃圾郵件的人持續(xù)更改脯倚,你就需要被動地不停地寫入新規(guī)則渔彰。

相反的,基于機器學(xué)習(xí)的垃圾郵件過濾器會自動注意到“For U”在用戶手動標(biāo)記垃圾郵件中的反常頻繁性推正,然后就能自動標(biāo)記垃圾郵件而無需干預(yù)了(圖1-3)恍涂。

圖1-3 自動適應(yīng)改變

機器學(xué)習(xí)的另一個優(yōu)點是善于處理對于傳統(tǒng)方法太復(fù)雜或是沒有已知算法的問題。例如植榕,對于語言識別:假如想寫一個可以識別“one”和“two”的簡單程序再沧。你可能注意到“two”起始是一個高音(“T”),所以可以寫一個可以測量高音強度的算法内贮,用它區(qū)分one和two产园。很明顯汞斧,這個方法不能推廣到嘈雜環(huán)境下的數(shù)百萬人的數(shù)千詞匯、數(shù)十種語言什燕。(現(xiàn)在)最佳的方法是根據(jù)大量單詞的錄音粘勒,寫一個可以自我學(xué)習(xí)的算法。

最后屎即,機器學(xué)習(xí)可以幫助人類進行學(xué)習(xí)(圖1-4):可以檢查機器學(xué)習(xí)算法已經(jīng)掌握了什么(盡管對于某些算法庙睡,這樣做會有點麻煩)。例如技俐,當(dāng)垃圾郵件過濾器被訓(xùn)練了足夠多的垃圾郵件乘陪,就可以用它列出垃圾郵件預(yù)測值的單詞和單詞組合列表。有時雕擂,可能會發(fā)現(xiàn)不引人關(guān)注的關(guān)聯(lián)或新趨勢啡邑,有助于對問題更好的理解。

圖1-4 機器學(xué)習(xí)可以幫助人類學(xué)習(xí)

使用機器學(xué)習(xí)方法挖掘大量數(shù)據(jù)井赌,可以發(fā)現(xiàn)并不顯著的規(guī)律谤逼。這稱作數(shù)據(jù)挖掘。

總結(jié)一下仇穗,機器學(xué)習(xí)善于:

? 需要進行大量手工調(diào)整或需要擁有長串規(guī)則才能解決的問題:機器學(xué)習(xí)算法通沉鞑浚可以簡化代碼、提高性能纹坐。

問題復(fù)雜枝冀,傳統(tǒng)方法難以解決:最好的機器學(xué)習(xí)方法可以找到解決方案。

環(huán)境有波動:機器學(xué)習(xí)算法可以適應(yīng)新數(shù)據(jù)耘子。

洞察復(fù)雜問題和大量數(shù)據(jù)果漾。

機器學(xué)習(xí)系統(tǒng)的類型

機器學(xué)習(xí)有多種類型,可以根據(jù)如下規(guī)則進行分類:

是否在人類監(jiān)督下進行訓(xùn)練(監(jiān)督拴还,非監(jiān)督跨晴,半監(jiān)督和強化學(xué)習(xí))

是否可以動態(tài)漸進學(xué)習(xí)(線上學(xué)習(xí)vs批量學(xué)習(xí))

它們是否只是通過簡單地比較新的數(shù)據(jù)點和已知的數(shù)據(jù)點欧聘,或者在訓(xùn)練數(shù)據(jù)中進行模式識別片林,以建立一個預(yù)測模型,就像科學(xué)家所做的那樣(基于實例學(xué)習(xí)vs基于模型學(xué)習(xí))

規(guī)則并不僅限于以上的怀骤,你可以將他們進行組合费封。例如,一個先進的垃圾郵件過濾器可以使用神經(jīng)網(wǎng)絡(luò)模型動態(tài)進行學(xué)習(xí)蒋伦,用垃圾郵件和普通郵件進行訓(xùn)練弓摘。這就讓它成了一個線上、基于模型痕届、監(jiān)督學(xué)習(xí)系統(tǒng)韧献。

下面更仔細(xì)地學(xué)習(xí)這些規(guī)則末患。

監(jiān)督/非監(jiān)督學(xué)習(xí)

機器學(xué)習(xí)可以根據(jù)訓(xùn)練時監(jiān)督的量和類型進行分類。主要有四類:監(jiān)督學(xué)習(xí)锤窑、非監(jiān)督學(xué)習(xí)璧针、半監(jiān)督學(xué)習(xí)和強化學(xué)習(xí)。

監(jiān)督學(xué)習(xí)

在監(jiān)督學(xué)習(xí)中渊啰,用來訓(xùn)練算法的訓(xùn)練數(shù)據(jù)包含了答案探橱,稱為標(biāo)簽(圖1-5)。

圖1-5 用于監(jiān)督學(xué)習(xí)(比如垃圾郵件分類)的加了標(biāo)簽的訓(xùn)練集

一個典型的監(jiān)督學(xué)習(xí)任務(wù)是分類绘证。垃圾郵件過濾器就是一個很好的例子:用許多帶有歸類(垃圾郵件或普通郵件)的郵件樣本進行訓(xùn)練隧膏,過濾器必須還能對新郵件進行分類。

另一個典型任務(wù)是預(yù)測目標(biāo)數(shù)值嚷那,例如給出一些特征(里程數(shù)胞枕、車齡、品牌等等)稱作預(yù)測值魏宽,來預(yù)測一輛汽車的價格曲稼。這類任務(wù)稱作回歸(圖1-6)。要訓(xùn)練這個系統(tǒng)湖员,你需要給出大量汽車樣本贫悄,包括它們的預(yù)測值和標(biāo)簽(即,它們的價格)娘摔。

筆記:在機器學(xué)習(xí)中窄坦,一個屬性就是一個數(shù)據(jù)類型(例如,“里程數(shù)”)凳寺,取決于具體問題一個特征會有多個含義鸭津,但通常是屬性加上它的值(例如,“里程數(shù)=15000”)肠缨。許多人是不區(qū)分地使用屬性和特征逆趋。

圖1-6 回歸

注意,一些回歸算法也可以用來進行分類晒奕,反之亦然闻书。例如,邏輯回歸通常用來進行分類脑慧,它可以生成一個歸屬某一類的可能性的值(例如魄眉,20%幾率為垃圾郵件)。

下面是一些重要的監(jiān)督學(xué)習(xí)算法(本書都有介紹):

K近鄰算法

線性回歸

邏輯回歸

支持向量機(SVM)

決策樹和隨機森林

神經(jīng)網(wǎng)絡(luò)

非監(jiān)督學(xué)習(xí)

在非監(jiān)督學(xué)習(xí)中闷袒,你可能猜到了,訓(xùn)練數(shù)據(jù)是沒有加標(biāo)簽的(圖1-7)囊骤。系統(tǒng)在沒有老師的條件下進行學(xué)習(xí)晃择。

圖1-7 非監(jiān)督學(xué)習(xí)的一個不加標(biāo)簽的訓(xùn)練集

下面是一些最重要的非監(jiān)督學(xué)習(xí)算法(我們會在第8章介紹降維):

聚類

k-均值

層次聚類分析(Hierarchical Cluster Analysis冀值,HCA)

期望最大值

可視化和降維

主成分分析(Principal Component Analysis,PCA)

核主成分分析

局部線性嵌入(Locally-Linear Embedding宫屠,LLE)

t-分布鄰域嵌入算法(t-distributed Stochastic Neighbor Embedding池摧,t-SNE)

關(guān)聯(lián)性規(guī)則學(xué)習(xí)

Apriori算法

Eclat算法

例如,假設(shè)你有一份關(guān)于你的博客訪客的大量數(shù)據(jù)激况。你想運行一個聚類算法作彤,檢測相似訪客的分組(圖1-8)。你不會告訴算法某個訪客屬于哪一類:它會自己找出關(guān)系乌逐,無需幫助竭讳。例如,算法可能注意到40%的訪客是喜歡漫畫書的男性浙踢,通常是晚上訪問绢慢,20%是科幻愛好者,他們是在周末訪問等等洛波。如果你使用層次聚類分析胰舆,它可能還會細(xì)分每個分組為更小的組。這可以幫助你為每個分組定位博文蹬挤。

圖1-8 聚類

可視化算法也是極佳的非監(jiān)督學(xué)習(xí)案例:給算法大量復(fù)雜的且不加標(biāo)簽的數(shù)據(jù)缚窿,算法輸出數(shù)據(jù)的2D或3D圖像(圖1-9)。算法會試圖保留數(shù)據(jù)的結(jié)構(gòu)(即嘗試保留輸入的獨立聚類焰扳,避免在圖像中重疊)倦零,這樣就可以明白數(shù)據(jù)是如何組織起來的,也許還能發(fā)現(xiàn)隱藏的規(guī)律吨悍。

圖1-9 t-SNE可視化案例扫茅,突出了聚類(注:注意動物是與汽車分開的,馬和鹿很近育瓜、與鳥距離遠(yuǎn)葫隙,以此類推)

與此有關(guān)聯(lián)的任務(wù)是降維,降維的目的是簡化數(shù)據(jù)躏仇、但是不能失去大部分信息恋脚。做法之一是合并若干相關(guān)的特征。例如钙态,汽車的里程數(shù)與車齡高度相關(guān)慧起,降維算法就會將它們合并成一個,表示汽車的磨損册倒。這叫做特征提取。

提示:在用訓(xùn)練集訓(xùn)練機器學(xué)習(xí)算法(比如監(jiān)督學(xué)習(xí)算法)時磺送,最好對訓(xùn)練集進行降維驻子。這樣可以運行的更快灿意,占用的硬盤和內(nèi)存空間更少,有些情況下性能也更好崇呵。

另一個重要的非監(jiān)督任務(wù)是異常檢測(anomaly detection) —— 例如缤剧,檢測異常的信用卡轉(zhuǎn)賬以防欺詐,檢測制造缺陷域慷,或者在訓(xùn)練之前自動從訓(xùn)練數(shù)據(jù)集去除異常值荒辕。異常檢測的系統(tǒng)使用正常值訓(xùn)練的,當(dāng)它碰到一個新實例犹褒,它可以判斷這個新實例是像正常值還是異常值(圖1-10)抵窒。

圖1-10 異常檢測

最后,另一個常見的非監(jiān)督任務(wù)是關(guān)聯(lián)規(guī)則學(xué)習(xí)叠骑,它的目標(biāo)是挖掘大量數(shù)據(jù)以發(fā)現(xiàn)屬性間有趣的關(guān)系李皇。例如,假設(shè)你擁有一個超市宙枷。在銷售日志上運行關(guān)聯(lián)規(guī)則掉房,可能發(fā)現(xiàn)買了燒烤醬和薯片的人也會買牛排。因此慰丛,你可以將這些商品放在一起卓囚。

半監(jiān)督學(xué)習(xí)

一些算法可以處理部分帶標(biāo)簽的訓(xùn)練數(shù)據(jù),通常是大量不帶標(biāo)簽數(shù)據(jù)加上小部分帶標(biāo)簽數(shù)據(jù)诅病。這稱作半監(jiān)督學(xué)習(xí)(圖1-11)捍岳。

一些圖片存儲服務(wù),比如Google Photos睬隶,是半監(jiān)督學(xué)習(xí)的好例子锣夹。一旦你上傳了所有家庭相片,它就能自動識別相同的人A出現(xiàn)了相片1苏潜、5银萍、11中,另一個人B出現(xiàn)在了相片2恤左、5贴唇、7中。這是算法的非監(jiān)督部分(聚類)》纱現(xiàn)在系統(tǒng)需要的就是你告訴這兩個人是誰戳气。只要給每個人一個標(biāo)簽,算法就可以命名每張照片中的每個人巧鸭,特別適合搜索照片闯估。

圖1-11 半監(jiān)督學(xué)習(xí)

多數(shù)半監(jiān)督學(xué)習(xí)算法是非監(jiān)督和監(jiān)督算法的結(jié)合。例如敏沉,深度信念網(wǎng)絡(luò)(deep belief networks)是基于被稱為互相疊加的受限玻爾茲曼機(restricted Boltzmann machines,RBMs)的非監(jiān)督組件贸毕。RBMs是先用非監(jiān)督方法進行訓(xùn)練,再用監(jiān)督學(xué)習(xí)方法進行整個系統(tǒng)微調(diào)夜赵。

強化學(xué)習(xí)

強化學(xué)習(xí)非常不同明棍。學(xué)習(xí)系統(tǒng)在這里被稱為執(zhí)行者agent,可以對環(huán)境進行觀察寇僧,選擇和執(zhí)行動作摊腋,獲得獎勵(負(fù)獎勵是懲罰,見圖1-12)嘁傀。然后它必須自己學(xué)習(xí)哪個是最佳方法(稱為策略policy)兴蒸,以得到長久的最大獎勵。策略決定了執(zhí)行者在給定情況下應(yīng)該采取的行動心包。

圖1-12 強化學(xué)習(xí)

例如类咧,許多機器人運行強化學(xué)習(xí)算法以學(xué)習(xí)如何行走。DeepMind的AlphaGo也是強化學(xué)習(xí)的例子:它在2016年三月?lián)魯×耸澜鐕骞谲娎钍朗ㄗg者注:2017年五月蟹腾,AlphaGo又擊敗了世界排名第一的柯潔)痕惋。它是通過分析數(shù)百萬盤棋局學(xué)習(xí)制勝策略,然后自己和自己下棋娃殖。要注意值戳,在比賽中機器學(xué)習(xí)是關(guān)閉的;AlphaGo只是使用它學(xué)會的策略炉爆。

批量和線上學(xué)習(xí)

另一個用來分類機器學(xué)習(xí)的準(zhǔn)則是堕虹,它是否能從導(dǎo)入的數(shù)據(jù)流進行持續(xù)學(xué)習(xí)。

批量學(xué)習(xí)

在批量學(xué)習(xí)中芬首,系統(tǒng)不能進行持續(xù)學(xué)習(xí):必須用所有可用數(shù)據(jù)進行訓(xùn)練赴捞。這通常會占用大量時間和計算資源,所以一般是線下做的郁稍。首先是進行訓(xùn)練赦政,然后部署在生產(chǎn)環(huán)境且停止學(xué)習(xí),它只是使用已經(jīng)學(xué)到的策略耀怜。這稱為離線學(xué)習(xí)恢着。

如果你想讓一個批量學(xué)習(xí)系統(tǒng)明白新數(shù)據(jù)(例如垃圾郵件的新類型),就需要從頭訓(xùn)練一個系統(tǒng)的新版本财破,使用全部數(shù)據(jù)集(不僅有新數(shù)據(jù)也有老數(shù)據(jù))掰派,然后停掉老系統(tǒng),換上新系統(tǒng)左痢。

幸運的是靡羡,訓(xùn)練系洛、評估、部署一套機器學(xué)習(xí)的系統(tǒng)的整個過程可以自動進行(見圖1-3)亿眠,所以即便是批量學(xué)習(xí)也可以適應(yīng)改變碎罚。只要有需要磅废,就可以方便地更新數(shù)據(jù)纳像、訓(xùn)練一個新版本。

這個方法很簡單拯勉,通尘怪海可以滿足需求,但是用全部數(shù)據(jù)集進行訓(xùn)練會花費大量時間宫峦,所以一般是每24小時或每周訓(xùn)練一個新系統(tǒng)岔帽。如果系統(tǒng)需要快速適應(yīng)變化的數(shù)據(jù)(比如,預(yù)測股價變化)导绷,就需要一個響應(yīng)更及時的方案犀勒。

另外,用全部數(shù)據(jù)訓(xùn)練需要大量計算資源(CPU妥曲、內(nèi)存空間贾费、磁盤空間、磁盤I/O檐盟、網(wǎng)絡(luò)I/O等等)褂萧。如果你有大量數(shù)據(jù),并讓系統(tǒng)每天自動從頭開始訓(xùn)練葵萎,就會開銷很大导犹。如果數(shù)據(jù)量巨大,甚至無法使用批量學(xué)習(xí)算法羡忘。

最后谎痢,如果你的系統(tǒng)需要自動學(xué)習(xí),但是資源有限(比如卷雕,一臺智能手機或火星車)节猿,攜帶大量訓(xùn)練數(shù)據(jù)、每天花費數(shù)小時的大量資源進行訓(xùn)練是不實際的爽蝴。

幸運的是沐批,對于上面這些情況,還有一個更佳的方案可以進行持續(xù)學(xué)習(xí)蝎亚。

線上學(xué)習(xí)

在線上學(xué)習(xí)中九孩,是用數(shù)據(jù)實例持續(xù)地進行訓(xùn)練,可以一次一個或一次幾個實例(稱為小批量)发框。每個學(xué)習(xí)步驟都很快且廉價躺彬,所以系統(tǒng)可以動態(tài)地學(xué)習(xí)到達的新數(shù)據(jù)(見圖1-13)。

圖1-13 線上學(xué)習(xí)

線上學(xué)習(xí)很適合系統(tǒng)接收連續(xù)流的數(shù)據(jù)(比如,股票價格)宪拥,且需要自動對改變作出調(diào)整仿野。如果計算資源有限,線上學(xué)習(xí)是一個不錯的方案:一旦線上學(xué)習(xí)系統(tǒng)學(xué)習(xí)了新的數(shù)據(jù)實例她君,它就不再需要這些數(shù)據(jù)了脚作,所以扔掉這些數(shù)據(jù)(除非你想滾回到之前的一個狀態(tài),再次使用數(shù)據(jù))缔刹。這樣可以節(jié)省大量的空間球涛。

線上學(xué)習(xí)算法也可以當(dāng)機器的內(nèi)存存不下大量數(shù)據(jù)集時,用來訓(xùn)練系統(tǒng)(這稱作核外學(xué)習(xí)校镐,?out-of-core?learning)亿扁。算法加載部分的數(shù)據(jù),用這些數(shù)據(jù)進行訓(xùn)練鸟廓,重復(fù)這個過程从祝,直到用所有數(shù)據(jù)都進行了訓(xùn)練(見圖1-14)。

警告:這個整個過程通常是離線完成的(即引谜,不在部署的系統(tǒng)上)牍陌,所以線上學(xué)習(xí)這個名字會讓人疑惑』驼牛可以把它想成持續(xù)學(xué)習(xí)呐赡。

圖1-14 使用線上學(xué)習(xí)處理大量數(shù)據(jù)集

線上學(xué)習(xí)系統(tǒng)的一個重要參數(shù)是,它們可以多快地適應(yīng)數(shù)據(jù)的改變:這被稱為學(xué)習(xí)速率骏融。如果你設(shè)定一個高學(xué)習(xí)速率链嘀,系統(tǒng)就可以快速適應(yīng)新數(shù)據(jù),但是也會快速忘記老書記(你可不想讓垃圾郵件過濾器只標(biāo)記最新的垃圾郵件種類)档玻。相反的怀泊,如果你設(shè)定的學(xué)習(xí)速率低,系統(tǒng)的惰性就會強:即误趴,它學(xué)的更慢霹琼,但對新數(shù)據(jù)中的噪聲或沒有代表性的數(shù)據(jù)點結(jié)果不那么敏感。

線上學(xué)習(xí)的挑戰(zhàn)之一是凉当,如果壞數(shù)據(jù)被用來進行訓(xùn)練枣申,系統(tǒng)的性能就會逐漸下滑。如果這是一個部署的系統(tǒng)看杭,用戶就會注意到忠藤。例如,壞數(shù)據(jù)可能來自失靈的傳感器或機器人楼雹,或某人向搜索引擎?zhèn)魅肜畔⒁蕴岣咚阉髋琶:ⅰR獪p小這種風(fēng)險尖阔,你需要密集監(jiān)測,如果檢測到性能下降榨咐,要快速關(guān)閉(或是滾回到一個之前的狀態(tài))介却。你可能還要監(jiān)測輸入數(shù)據(jù),對反常數(shù)據(jù)做出反應(yīng)(比如块茁,使用異常檢測算法)齿坷。

基于實例vs基于模型學(xué)習(xí)

另一種分類機器學(xué)習(xí)的方法是判斷它們是如何進行歸納推廣的。大多機器學(xué)習(xí)任務(wù)是關(guān)于預(yù)測的龟劲。這意味著給定一定數(shù)量的訓(xùn)練樣本胃夏,系統(tǒng)需要能推廣到之前沒見到過的樣本轴或。對訓(xùn)練數(shù)據(jù)集有很好的性能還不夠昌跌,真正的目標(biāo)是對新實例預(yù)測的性能。

有兩種主要的歸納方法:基于實例學(xué)習(xí)和基于模型學(xué)習(xí)照雁。

基于實例學(xué)習(xí)

也許最簡單的學(xué)習(xí)形式就是用記憶學(xué)習(xí)蚕愤。如果用這種方法做一個垃圾郵件檢測器,只需標(biāo)記所有和用戶標(biāo)記的垃圾郵件相同的郵件 —— 這個方法不差饺蚊,但肯定不是最好的萍诱。

不僅能標(biāo)記和已知的垃圾郵件相同的郵件,你的垃圾郵件過濾器也要能標(biāo)記類似垃圾郵件的郵件污呼。這就需要測量兩封郵件的相似性裕坊。一個(簡單的)相似度測量方法是統(tǒng)計兩封郵件包含的相同單詞的數(shù)量。如果一封郵件含有許多垃圾郵件中的詞燕酷,就會被標(biāo)記為垃圾郵件籍凝。

這被稱作基于實例學(xué)習(xí):系統(tǒng)先用記憶學(xué)習(xí)案例,然后使用相似度測量推廣到新的例子(圖1-15)苗缩。

圖1-15 基于實例學(xué)習(xí)

基于模型學(xué)習(xí)

另一種從樣本集進行歸納的方法是建立這些樣本的模型饵蒂,然后使用這個模型進行預(yù)測。這稱作基于模型學(xué)習(xí)(圖1-16)酱讶。

圖1-16 基于模型學(xué)習(xí)

例如退盯,你想知道錢是否能讓人快樂,你從OECD網(wǎng)站(http://stats.oecd.org/index.aspx?DataSetCode=BLI)下載了Better Life Index指數(shù)數(shù)據(jù)泻肯,還從IMF(http://goo.gl/j1MSKe渊迁,這個短鏈接需要翻墻才能打開,長鏈接又太長)下載了人均GDP數(shù)據(jù)灶挟。表1-1展示了摘要琉朽。

表1-1 錢會使人幸福嗎?

用一些國家的數(shù)據(jù)畫圖(圖1-17)膏萧。

圖1-17 你看到趨勢了嗎漓骚?

確實能看到趨勢蝌衔!盡管數(shù)據(jù)有噪聲(即,部分隨機)蝌蹂,看起來生活滿意度是隨著人均GDP的增長線性提高的噩斟。所以,你決定生活滿意度建模為人均GDP的線性函數(shù)孤个。這一步稱作模型選擇:你選一個生活滿意度的線性模型剃允,只有一個屬性,人均GDP(等式1-1)齐鲤。

等式1-1 一個簡單的線性模型

這個模型有兩個參數(shù)θ0和θ1斥废。通過調(diào)整這兩個參數(shù),你可以使你的模型表示任何線性函數(shù)给郊,見圖1-18牡肉。

圖-18 幾個可能的線性模型

在使用模型之前,你需要確定θ0和θ1淆九。如何能知道哪個值可以使模型的性能最佳呢统锤?要回答這個問題,你需要指定性能的量度炭庙。你可以定義一個實用函數(shù)(或擬合函數(shù))用來測量模型是否夠好饲窿,或者你可以定義一個代價函數(shù)來測量模型有多差。對于線性回歸問題焕蹄,人們一般是用代價函數(shù)測量線性模型的預(yù)測值和訓(xùn)練樣本的距離差逾雄,目標(biāo)是使距離差最小。

接下來就是線性回歸算法腻脏,你用訓(xùn)練樣本訓(xùn)練算法鸦泳,算法找到使線性模型最擬合數(shù)據(jù)的參數(shù)。這稱作模型訓(xùn)練迹卢。在我們的例子中辽故,算法得到的參數(shù)值是θ0=4.85和θ1=4.91×10–5。

現(xiàn)在模型已經(jīng)最緊密地擬合到訓(xùn)練數(shù)據(jù)了腐碱,見圖1-19誊垢。

圖1-19 最佳擬合訓(xùn)練數(shù)據(jù)的線性模型

最后,可以準(zhǔn)備運行模型進行預(yù)測了症见。例如喂走,假如你想知道塞浦路斯人有多幸福,但OECD沒有它的數(shù)據(jù)谋作。幸運的是芋肠,你可以用模型進行預(yù)測:查詢?nèi)致匪沟娜司鵊DP,為22587美元遵蚜,然后應(yīng)用模型得到生活滿意度帖池,后者的值在4.85 + 22,587 × 4.91 × 10-5 = 5.96左右奈惑。

為了激起你的興趣,案例1-1展示了加載數(shù)據(jù)睡汹、準(zhǔn)備肴甸、創(chuàng)建散點圖的Python代碼,然后訓(xùn)練線性模型并進行預(yù)測囚巴。

案例1-1原在,使用Scikit-Learn訓(xùn)練并運行線性模型。

importmatplotlibimportmatplotlib.pyplotaspltimportnumpyasnpimportpandasaspdimportsklearn#加載數(shù)據(jù)oecd_bli=pd.read_csv("oecd_bli_2015.csv",thousands=',')gdp_per_capita=pd.read_csv("gdp_per_capita.csv",thousands=',',delimiter='\t',encoding='latin1',na_values="n/a")#準(zhǔn)備數(shù)據(jù)country_stats=prepare_country_stats(oecd_bli, gdp_per_capita)X=np.c_[country_stats["GDP per capita"]]y=np.c_[country_stats["Life satisfaction"]]#可視化數(shù)據(jù)country_stats.plot(kind='scatter',x="GDP per capita",y='Life satisfaction')plt.show()#選擇線性模型lin_reg_model=sklearn.linear_model.LinearRegression()#訓(xùn)練模型lin_reg_model.fit(X, y)#對塞浦路斯進行預(yù)測X_new=[[22587]]#塞浦路斯的人均GDPprint(lin_reg_model.predict(X_new))#outputs [[ 5.96242338]]

筆記:如果你之前接觸過基于實例學(xué)習(xí)算法彤叉,你會發(fā)現(xiàn)斯洛文尼亞的人均GDP(20732美元)和塞浦路斯差距很小庶柿,OECD數(shù)據(jù)上斯洛文尼亞的生活滿意度是5.7,就可以預(yù)測塞浦路斯的生活滿意度也是5.7秽浇。如果放大一下范圍浮庐,看一下接下來兩個臨近的國家,你會發(fā)現(xiàn)葡萄牙和西班牙的生活滿意度分別是5.1和6.5兼呵。對這三個值進行平均得到5.77兔辅,就和基于模型的預(yù)測值很接近。這個簡單的算法叫做k近鄰回歸(這個例子中击喂,k=3)。

在前面的代碼中替換線性回歸模型為k近鄰模型碰辅,只需更換下面一行:

clf = sklearn.linear_model.LinearRegression()

為:

clf = sklearn.neighbors.KNeighborsRegressor(n_neighbors=3)

如果一切順利懂昂,你的模型就可以作出好的預(yù)測。如果不能没宾,你可能需要使用更多的屬性(就業(yè)率凌彬、健康、空氣污染等等)循衰,獲取更多更好的訓(xùn)練數(shù)據(jù)铲敛,或選擇一個更好的模型(比如,多項式回歸模型)会钝。

總結(jié)一下:

研究數(shù)據(jù)

選擇模型

用訓(xùn)練數(shù)據(jù)進行訓(xùn)練(即伐蒋,學(xué)習(xí)算法搜尋模型參數(shù)值,使代價函數(shù)最星ㄋ帷)

最后先鱼,使用模型對新案例進行預(yù)測(這稱作推斷),但愿這個模型推廣效果不差

這就是一個典型的機器學(xué)習(xí)項目奸鬓。在第2章中焙畔,你會第一手地接觸一個完整的項目。

我們已經(jīng)學(xué)習(xí)了許多關(guān)于基礎(chǔ)的內(nèi)容:你現(xiàn)在知道了機器學(xué)習(xí)是關(guān)于什么的串远,為什么它這么有用宏多,最常見的機器學(xué)習(xí)的分類儿惫,典型的項目工作流程。現(xiàn)在伸但,讓我們看一看學(xué)習(xí)中會發(fā)生什么錯誤姥闪,導(dǎo)致不能做出準(zhǔn)確的預(yù)測。

機器學(xué)習(xí)的主要挑戰(zhàn)

簡而言之砌烁,因為你的主要任務(wù)是選擇一個學(xué)習(xí)算法并用一些數(shù)據(jù)進行訓(xùn)練筐喳,會導(dǎo)致錯誤的兩件事就是“錯誤的算法”和“錯誤的數(shù)據(jù)”。我們從錯誤的數(shù)據(jù)開始函喉。

訓(xùn)練數(shù)據(jù)量不足

要讓一個蹣跚學(xué)步的孩子知道什么是蘋果避归,需要做的就是指著一個蘋果說“蘋果”(可能需要重復(fù)這個過程幾次)。現(xiàn)在這個孩子就能認(rèn)識所有形狀和顏色的蘋果管呵。真是個天才梳毙!

機器學(xué)習(xí)還達不到這個程度;需要大量數(shù)據(jù)捐下,才能讓多數(shù)機器學(xué)習(xí)算法正常工作账锹。即便對于非常簡單的問題,一般也需要數(shù)千的樣本坷襟,對于復(fù)雜的問題奸柬,比如圖像或語音識別,你可能需要數(shù)百萬的樣本(除非你能重復(fù)使用部分存在的模型)婴程。

數(shù)據(jù)不合理的有效性

在一篇2001年發(fā)表的著名論文(goo.gl/R5enIE)中廓奕,微軟研究員Michele Banko和Eric Brill展示了不同的機器學(xué)習(xí)算法,包括非常簡單的算法档叔,一旦有了大量數(shù)據(jù)進行訓(xùn)練桌粉,在進行去除語言歧義的測試中幾乎有相同的性能(見圖1-20)。

圖1-20 數(shù)據(jù)和算法的重要性對比

論文作者說:“結(jié)果說明衙四,我們可能需要重新考慮在算法開發(fā)vs語料庫發(fā)展上花費時間和金錢的取舍铃肯。”

對于復(fù)雜問題传蹈,數(shù)據(jù)比算法更重要的主張在2009年由Norvig發(fā)表的論文《The Unreasonable Effectiveness of Data》得到了進一步的推廣押逼。但是,應(yīng)該注意到卡睦,小型和中型的數(shù)據(jù)集仍然是非常常見的宴胧,獲得額外的訓(xùn)練數(shù)據(jù)并不總是輕易和廉價的,所以不要拋棄算法表锻。

沒有代表性的訓(xùn)練數(shù)據(jù)

為了更好地進行歸納推廣恕齐,讓訓(xùn)練數(shù)據(jù)對新數(shù)據(jù)具有代表性是非常重要的。無論你用的是基于實例學(xué)習(xí)或基于模型學(xué)習(xí)瞬逊,這點都很重要显歧。

例如仪或,我們之前用來訓(xùn)練線性模型的國家集合不夠具有代表性:缺少了一些國家。圖1-21展示了添加這些缺失國家之后的數(shù)據(jù)士骤。

圖1-21 一個更具代表性的訓(xùn)練樣本

如果你用這份數(shù)據(jù)訓(xùn)練線性模型范删,得到的是實線,舊模型用虛線表示拷肌〉降可以看到,添加幾個國家不僅可以顯著地改變模型巨缘,它還說明如此簡單的線性模型可能永遠(yuǎn)不會達到很好的性能添忘。貌似非常富裕的國家沒有中等富裕的國家快樂(事實上,非常富裕的國家看起來更不快樂)若锁,相反的搁骑,一些貧窮的國家看上去比富裕的國家還幸福。

使用了沒有代表性的數(shù)據(jù)集又固,我們訓(xùn)練了一個不可能得到準(zhǔn)確預(yù)測的模型仲器,特別是對于非常貧窮和非常富裕的國家。

使用具有代表性的訓(xùn)練集對于推廣到新案例是非常重要的仰冠。但是做起來比說起來要難:如果樣本太小乏冀,就會有樣本噪聲(即,會有一定概率包含沒有代表性的數(shù)據(jù))沪停,但是即使是非常大的樣本也可能沒有代表性煤辨,如果取樣方法錯誤的話。這叫做樣本偏差木张。

一個樣本偏差的著名案例

也許關(guān)于樣本偏差最有名的案例發(fā)生在1936年蘭登和羅斯福的美國大選:《文學(xué)文摘》做了一個非常大的民調(diào),給1000萬人郵寄了調(diào)查信端三。得到了240萬回信舷礼,非常有信心地預(yù)測蘭登會以57%贏得大選。然而郊闯,羅斯福贏得了62%的選票妻献。錯誤發(fā)生在《文學(xué)文摘》的取樣方法:

首先,為了獲取發(fā)信地址团赁,《文學(xué)文摘》使用了電話黃頁育拨、雜志訂閱用戶、俱樂部會員等相似的列表欢摄。所有這些列表都偏向于富裕人群熬丧,他們都傾向于投票給共和黨(即蘭登)。

第二怀挠,只有25%的回答了調(diào)研析蝴。這就又一次引入了樣本偏差害捕,它排除了不關(guān)心政治的人、不喜歡《文學(xué)文摘》的人闷畸,和其它關(guān)鍵人群尝盼。這種特殊的樣本偏差稱作無應(yīng)答偏差。

下面是另一個例子:假如你想創(chuàng)建一個能識別放克音樂(Funk Music, 別名騷樂)視頻的系統(tǒng)佑菩。建立訓(xùn)練集的方法之一是在YouTube上搜索“放克音樂”盾沫,使用搜索到的視頻。但是這樣就假定了YouTube的搜索引擎返回的視頻集殿漠,是對YouTube上的所有放克音樂有代表性的赴精。事實上,搜索結(jié)果會偏向于人們歌手(如果你居住在巴西凸舵,你會得到許多“funk carioca”視頻祖娘,它們和James Brown的截然不同)。從另一方面來講啊奄,你怎么得到一個大的訓(xùn)練集呢渐苏?

低質(zhì)量數(shù)據(jù)

很明顯,如果訓(xùn)練集中的錯誤菇夸、異常值和噪聲(錯誤測量引入的)太多琼富,系統(tǒng)檢測出潛在規(guī)律的難度就會變大,性能就會降低庄新【厦迹花費時間對訓(xùn)練數(shù)據(jù)進行清理是十分重要的。事實上择诈,大多數(shù)據(jù)科學(xué)家的一大部分時間是做清洗工作的械蹋。例如:

如果一些實例是明顯的異常值,最好刪掉它們或嘗試手工修改錯誤羞芍;

如果一些實例缺少特征(比如哗戈,你的5%的顧客沒有說明年齡),你必須決定是否忽略這個屬性荷科、忽略這些實例唯咬、填入缺失值(比如,年齡中位數(shù))畏浆,或者訓(xùn)練一個含有這個特征的模型和一個不含有這個特征的模型胆胰,等等。

不相關(guān)的特征

俗語說:進來的是垃圾刻获,出去的也是垃圾蜀涨。你的系統(tǒng)只有在訓(xùn)練數(shù)據(jù)包含足夠相關(guān)特征、非相關(guān)特征不多的情況下,才能進行學(xué)習(xí)勉盅。機器學(xué)習(xí)項目成功的關(guān)鍵之一是用好的特征進行訓(xùn)練佑颇。這個過程稱作特征工程,包括:

特征選擇:在所有存在的特征中選取最有用的特征進行訓(xùn)練草娜。

特征提忍粜亍:組合存在的特征,生成一個更有用的特征(如前面看到的宰闰,可以使用降維算法)茬贵。

收集新數(shù)據(jù)創(chuàng)建新特征。

現(xiàn)在移袍,我們已經(jīng)看過了許多壞數(shù)據(jù)的例子解藻,接下來看幾個壞算法的例子。

過擬合訓(xùn)練數(shù)據(jù)

如果你在外國游玩葡盗,當(dāng)?shù)氐某鲎廛囁緳C多收了你的錢螟左。你可能會說這個國家所有的出租車司機都是小偷。過度歸納是我們?nèi)祟惤?jīng)常做的觅够,如果我們不小心胶背,機器也會犯同樣的錯誤。在機器學(xué)習(xí)中喘先,這稱作過擬合:意思是說钳吟,模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)很好,但是推廣效果不好窘拯。

圖1-22展示了一個高階多項式生活滿意度模型红且,它大大過擬合了訓(xùn)練數(shù)據(jù)。即使它比簡單線性模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)更好涤姊,你會相信它的預(yù)測嗎暇番?

圖1-22 過擬合訓(xùn)練數(shù)據(jù)

復(fù)雜的模型,比如深度神經(jīng)網(wǎng)絡(luò)思喊,可以檢測數(shù)據(jù)中的細(xì)微規(guī)律奔誓,但是如果訓(xùn)練集有噪聲,或者訓(xùn)練集太猩浴(太小會引入樣本噪聲),模型就會去檢測噪聲本身的規(guī)律和措。很明顯庄呈,這些規(guī)律不能推廣到新實例。例如派阱,假如你用更多的屬性訓(xùn)練生活滿意度模型诬留,包括不包含信息的屬性,比如國家的名字。如此一來文兑,負(fù)責(zé)的模型可能會檢測出訓(xùn)練集中名字有w字母的國家的生活滿意度大于7:新西蘭(7.3)盒刚,挪威(7.4),瑞典(7.2)和瑞士(7.5)绿贞。你能相信這個W-滿意度法則推廣到盧旺達和津巴布韋嗎因块?很明顯,這個規(guī)律只是訓(xùn)練集數(shù)據(jù)中偶然出現(xiàn)的籍铁,但是模型不能判斷這個規(guī)律是真實的涡上、還是噪聲的結(jié)果。

警告:過擬合發(fā)生在相對于訓(xùn)練數(shù)據(jù)的量和噪聲拒名,模型過于復(fù)雜的情況吩愧。可能的解決方案有:

簡化模型增显,可以通過選擇一個參數(shù)更少的模型(比如使用線性模型雁佳,而不是高階多項式模型)、減少訓(xùn)練數(shù)據(jù)的屬性數(shù)同云、或限制一下模型

收集更多的訓(xùn)練數(shù)據(jù)

減小訓(xùn)練數(shù)據(jù)的噪聲(比如糖权,修改數(shù)據(jù)錯誤和去除異常值)

限定一個模型以讓它更簡單,降低過擬合的風(fēng)險被稱作正規(guī)化(regularization)梢杭。例如温兼,我們之前定義的線性模型有兩個參數(shù),θ0和θ1武契。它給了學(xué)習(xí)算法兩個自由度以讓模型適應(yīng)訓(xùn)練數(shù)據(jù):可以調(diào)整截距θ0和斜率θ1募判。如果強制θ1=0,算法就只剩一個自由度咒唆,擬合數(shù)據(jù)就會更為困難:能做的只是將線上下移動届垫,盡可能地靠近訓(xùn)練實例,結(jié)果會在平均值附近全释。這就是一個非常簡單的模型装处!如果我們允許算法可以修改θ1,但是只能在一個很小的范圍內(nèi)修改浸船,算法的自由度就會介于1和2之間妄迁。它要比兩個自由度的模型簡單,比1個自由度的模型要復(fù)雜。你的目標(biāo)是在完美擬合數(shù)據(jù)和保持模型簡單性上找到平衡,確保算法的推廣效果煌集。

圖1-23展示了三個模型:虛線表示用缺失部分國家的數(shù)據(jù)訓(xùn)練的原始模型,短劃線是我們的第二個用所有國家訓(xùn)練的模型黔州,實線模型的訓(xùn)練數(shù)據(jù)和第一個相同耍鬓,但進行了正規(guī)化限制。你可以看到正規(guī)化強制模型有一個小的斜率流妻,它對訓(xùn)練數(shù)據(jù)的擬合不是那么好牲蜀,但是對新樣本的推廣效果好。

圖1-23 正規(guī)化降低了過度擬合的風(fēng)險

正規(guī)化的度可以用一個超參數(shù)(hyperparameter)控制绅这。超參數(shù)是一個學(xué)習(xí)算法的參數(shù)(而不是模型的)涣达。這樣,它是不會被學(xué)習(xí)算法本身影響的君躺,它優(yōu)于訓(xùn)練峭判,在訓(xùn)練中是保持不變的。如果你設(shè)定的超參數(shù)非常大棕叫,就會得到一個幾乎是平的模型(斜率接近于0)林螃;這種學(xué)習(xí)算法幾乎肯定不會過擬合訓(xùn)練數(shù)據(jù),但是也很難得到一個好的解俺泣。調(diào)節(jié)超參數(shù)是創(chuàng)建機器學(xué)習(xí)算法非常重要的一部分(下一章你會看到一個詳細(xì)的例子)疗认。

欠擬合訓(xùn)練數(shù)據(jù)

你可能猜到了,欠擬合是和過擬合相對的:當(dāng)你的模型過于簡單時就會發(fā)生伏钠。例如横漏,生活滿意度的線性模型傾向于欠擬合;現(xiàn)實要比這個模型復(fù)雜的多熟掂,所以預(yù)測很難準(zhǔn)確缎浇,即使在訓(xùn)練樣本上也很難準(zhǔn)確。

解決這個問題的選項包括:

選擇一個更強大的模型赴肚,帶有更多參數(shù)

用更好的特征訓(xùn)練學(xué)習(xí)算法(特征工程)

減小對模型的限制(比如素跺,減小正規(guī)化超參數(shù))

回顧

現(xiàn)在,你已經(jīng)知道了很多關(guān)于機器學(xué)習(xí)的知識誉券。然而指厌,學(xué)過了這么多概念,你可能會感到有些迷失踊跟,所以讓我們退回去踩验,回顧一下重要的:

機器學(xué)習(xí)是讓機器通過學(xué)習(xí)數(shù)據(jù)對某些任務(wù)做得更好,而不使用確定的代碼規(guī)則商玫。

有許多不同類型的機器學(xué)習(xí)系統(tǒng):監(jiān)督或非監(jiān)督箕憾,批量或線上,基于實例或基于模型拳昌,等等厕九。

? 在機器學(xué)習(xí)項目中,我們從訓(xùn)練集中收集數(shù)據(jù)地回,然后對學(xué)習(xí)算法進行訓(xùn)練扁远。如果算法是基于模型的,就調(diào)節(jié)一些參數(shù)刻像,讓模型擬合到訓(xùn)練集(即畅买,對訓(xùn)練集本身作出好的預(yù)測),然后希望它對新樣本也能有好預(yù)測细睡。如果算法是基于實例的谷羞,就是用記憶學(xué)習(xí)樣本,然后用相似度推廣到新實例溜徙。

如果訓(xùn)練集太小湃缎、數(shù)據(jù)沒有代表性、含有噪聲蠢壹、或摻有不相關(guān)的特征(垃圾進嗓违,垃圾出),系統(tǒng)的性能不會好图贸。最后蹂季,模型不能太簡單(會發(fā)生欠擬合)或太復(fù)雜(會發(fā)生過擬合)。

還差最后一個主題要學(xué)習(xí):訓(xùn)練完了一個模型疏日,你不只希望將它推廣到新樣本偿洁。如果你想評估它,那么還需要作出必要的微調(diào)沟优。一起來看一看涕滋。

測試和確認(rèn)

要知道一個模型推廣到新樣本的效果,唯一的辦法就是真正的進行試驗挠阁。一種方法是將模型部署到生產(chǎn)環(huán)境宾肺,觀察它的性能。這么做可以鹃唯,但是如果模型的性能很差爱榕,就會引起用戶抱怨 —— 這不是最好的方法。

更好的選項是將你的數(shù)據(jù)分成兩個集合:訓(xùn)練集和測試集坡慌。正如它們的名字黔酥,用訓(xùn)練集進行訓(xùn)練,用測試集進行測試洪橘。對新樣本的錯誤率稱作推廣錯誤(或樣本外錯誤)跪者,通過模型對測試集的評估,你可以預(yù)估這個錯誤熄求。這個值可以告訴你渣玲,你的模型對新樣本的性能。

如果訓(xùn)練錯誤率低(即弟晚,你的模型在訓(xùn)練集上錯誤不多)忘衍,但是推廣錯誤率高逾苫,意味著模型對訓(xùn)練數(shù)據(jù)過擬合。

提示:一般使用80%的數(shù)據(jù)進行訓(xùn)練枚钓,保留20%用于測試铅搓。

因此,評估一個模型很簡單:只要使用測試集〔蠼荩現(xiàn)在假設(shè)你在兩個模型之間猶豫不決(比如一個線性模型和一個多項式模型):如何做決定呢星掰?一種方法是兩個都訓(xùn)練,嫩舟,然后比較在測試集上的效果氢烘。

現(xiàn)在假設(shè)線性模型的效果更好,但是你想做一些正規(guī)化以避免過擬合家厌。問題是:如何選擇正規(guī)化超參數(shù)的值播玖?一種選項是用100個不同的超參數(shù)訓(xùn)練100個不同的模型。假設(shè)你發(fā)現(xiàn)最佳的超參數(shù)的推廣錯誤率最低像街,比如只有5%黎棠。然后就選用這個模型作為生產(chǎn)環(huán)境,但是實際中性能不佳镰绎,誤差率達到了15%脓斩。發(fā)生了什么呢?

答案在于畴栖,你在測試集上多次測量了推廣誤差率随静,調(diào)整了模型和超參數(shù),以使模型最適合這個集合吗讶。這意味著模型對新數(shù)據(jù)的性能不會高燎猛。

這個問題通常的解決方案是,再保留一個集合照皆,稱作驗證集合重绷。用測試集和多個超參數(shù)訓(xùn)練多個模型,選擇在驗證集上有最佳性能的模型和超參數(shù)膜毁。當(dāng)你對模型滿意時昭卓,用測試集再做最后一次測試,以得到推廣誤差率的預(yù)估瘟滨。

為了避免“浪費”過多訓(xùn)練數(shù)據(jù)在驗證集上候醒,通常的辦法是使用交叉驗證:訓(xùn)練集分成互補的子集,每個模型用不同的子集訓(xùn)練杂瘸,再用剩下的子集驗證倒淫。一旦確定模型類型和超參數(shù),最終的模型使用這些超參數(shù)和全部的訓(xùn)練集進行訓(xùn)練败玉,用測試集得到推廣誤差率敌土。

沒有免費午餐公理

模型是觀察的簡化版本镜硕。簡化意味著舍棄無法進行推廣的表面細(xì)節(jié)。但是纯赎,要確定舍棄什么數(shù)據(jù)谦疾、保留什么數(shù)據(jù),必須要做假設(shè)犬金。例如,線性模型的假設(shè)是數(shù)據(jù)基本上是線性的六剥,實例和模型直線間的距離只是噪音晚顷,可以放心忽略。

在一篇1996年的著名論文(goo.gl/3zaHIZ)中疗疟,David Wolpert證明该默,如果完全不對數(shù)據(jù)做假設(shè),就沒有理由選擇一個模型而不選另一個策彤。這稱作沒有免費午餐(NFL)公理栓袖。對于一些數(shù)據(jù)集,最佳模型是線性模型店诗,而對其它數(shù)據(jù)集是神經(jīng)網(wǎng)絡(luò)裹刮。沒有一個模型可以保證效果更好(如這個公理的名字所示)。確信的唯一方法就是測試所有的模型庞瘸。因為這是不可能的捧弃,實際中就必須要做一些對數(shù)據(jù)合理的假設(shè),只評估幾個合理的模型擦囊。例如违霞,對于簡單任務(wù),你可能是用不同程度的正規(guī)化評估線性模型瞬场,對于復(fù)雜問題买鸽,你可能要評估幾個神經(jīng)網(wǎng)絡(luò)模型。

練習(xí)

本章中贯被,我們學(xué)習(xí)了一些機器學(xué)習(xí)中最為重要的概念眼五。下一章,我們會更加深入刃榨,并寫一些代碼弹砚。開始下章之前,確保你能回答下面的問題:

如何定義機器學(xué)習(xí)枢希?

機器學(xué)習(xí)可以解決的四類問題桌吃?

什么是帶標(biāo)簽的訓(xùn)練集?

最常見的兩個監(jiān)督任務(wù)是什么苞轿?

指出四個常見的非監(jiān)督任務(wù)茅诱?

要讓一個機器人能在各種未知地形行走逗物,你會采用什么機器學(xué)習(xí)算法?

要對你的顧客進行分組瑟俭,你會采用哪類算法翎卓?

垃圾郵件檢測是監(jiān)督學(xué)習(xí)問題,還是非監(jiān)督學(xué)習(xí)問題摆寄?

什么是線上學(xué)習(xí)系統(tǒng)失暴?

什么是核外學(xué)習(xí)?

什么學(xué)習(xí)算法是用相似度做預(yù)測微饥?

模型參數(shù)和學(xué)習(xí)算法的超參數(shù)的區(qū)別是什么逗扒?

基于模型學(xué)習(xí)的算法搜尋的是什么?最成功的策略是什么欠橘?基于模型學(xué)習(xí)如何做預(yù)測矩肩?

機器學(xué)習(xí)的四個主要挑戰(zhàn)是什么?

如果模型在訓(xùn)練集上表現(xiàn)好肃续,但推廣到新實例表現(xiàn)差黍檩,問題是什么?給出三個可能的解決方案始锚。

什么是測試集刽酱,為什么要使用它?

驗證集的目的是什么疼蛾?

如果用測試集調(diào)節(jié)超參數(shù)肛跌,會發(fā)生什么?

什么是交叉驗證察郁,為什么它比驗證集好衍慎?

練習(xí)答案見附錄A。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末皮钠,一起剝皮案震驚了整個濱河市稳捆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌麦轰,老刑警劉巖乔夯,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異款侵,居然都是意外死亡末荐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門新锈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甲脏,“玉大人,你說我怎么就攤上這事】榍耄” “怎么了娜氏?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長墩新。 經(jīng)常有香客問我贸弥,道長,這世上最難降的妖魔是什么海渊? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任绵疲,我火速辦了婚禮,結(jié)果婚禮上臣疑,老公的妹妹穿的比我還像新娘最岗。我一直安慰自己,他們只是感情好朝捆,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著懒豹,像睡著了一般芙盘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脸秽,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天儒老,我揣著相機與錄音,去河邊找鬼记餐。 笑死驮樊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的片酝。 我是一名探鬼主播囚衔,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雕沿!你這毒婦竟也來了练湿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤审轮,失蹤者是張志新(化名)和其女友劉穎肥哎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疾渣,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡篡诽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了榴捡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杈女。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碧信,到底是詐尸還是另有隱情赊琳,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布砰碴,位于F島的核電站躏筏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏呈枉。R本人自食惡果不足惜趁尼,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猖辫。 院中可真熱鬧酥泞,春花似錦、人聲如沸啃憎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辛萍。三九已至悯姊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贩毕,已是汗流浹背悯许。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辉阶,地道東北人先壕。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像谆甜,于是被迫代替她去往敵國和親垃僚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容