監(jiān)督學習是最常用也是最成功的機器學習類型之奧一咨堤。本章將會詳細介紹監(jiān)督學習埂伦,并解釋幾種常用的監(jiān)督學習算法。
記住泛领,每當想要根據給定輸入預測某個結果荒吏,并且還有輸入/輸出對的示例時,都應該使用監(jiān)督學習渊鞋。這些輸入/輸出對構成了訓練集绰更,我們利用它來構建機器學習模型。我們的目標是對從未見過的新數據做出準確預測锡宋。監(jiān)督學習通常需要人力來構建訓練集儡湾,但之后的任務本來非常費力甚至無法完成,現在卻可以自動完成执俩,通常速度也更快徐钠。
2.1 分類與回歸
監(jiān)督機器學習問題主要有兩種,分別叫作分類(classification)與回歸(regression)役首。
分類問題的目標是預測類別標簽(class label)尝丐,這些標簽來自預定義的可選列表。分類問題有時可分為二分類(binary classification衡奥,在兩個類別之間進行區(qū)分的一種特殊情況)和多分類(multiclass classification爹袁,在兩個以上的類別之間進行區(qū)分)。你可以將二分類看作是嘗試回答一道是/否問題矮固。將電子郵件分為垃圾郵件和非垃圾郵件就是二分類問題的實例失息。在這個二分類任務中,要問的是/否問題為:“這封電子郵件是垃圾郵件嗎?”
在二分類問題中盹兢,我們通常將其中一個類別稱為正類(positive class)邻梆,另一個類別稱為反類(negative class)。這里的“正”并不代表好的方面或正數蛤迎,而是代表研究對象确虱。因此在尋找垃圾郵件時,“正”可能指的是垃圾郵件這一類別替裆。將兩個類別中的哪一個作為“正類”校辩,往往是主觀判斷,與具體的領域有關辆童。
另一方面宜咒,鳶尾花的例子則屬于多分類問題。另一個多分類的例子是根據網站的文本預測網站所用的語言把鉴。這里的類別就是預定義的語言類別故黑。
回歸任務的目標是預測一個連續(xù)值,編程術語叫作浮點數(floating-point number)庭砍,數學術語叫作實數(real number)场晶。根據教育水平、年齡和居住地來預測一個人的年收入怠缸,這就是回歸的一個例子诗轻。在預測收入時,預測值是一個金額(amount)揭北,可以在給定范圍內任意取值扳炬。回歸任務的另一個例子是搔体,根據上一年的產量恨樟、天氣和農場員工數等屬性來預測玉米農場的產量。同樣疚俱,產量也可以取任意數值劝术。
區(qū)分分類任務和回歸任務有一個簡單方法,就是問一個問題:輸出是否具有某種連續(xù)性呆奕。如果在可能的結果之間具有連續(xù)性夯尽,那么它就是一個回歸問題。想想預測年收入的例子登馒。輸出具有非常明顯的連續(xù)性。一年40000美元還是40001美元并沒有實質差別咆槽,即使兩者金額不同陈轿。如果我們的算法在本應預測40000美元時的預測結果是39999美元或40001美元,不必過分在意。
與此相反麦射,對于識別網站語言的任務(這是一個分類問題)來說蛾娶,并不存在程度問題。網站使用的要么是這種語言潜秋,要么是那種語言蛔琅。在語言之間不存在連續(xù)性,在英語和法語之間不存在其他語言峻呛。
2.2 泛化罗售、過擬合與欠擬合
在監(jiān)督學習中,我們想要在訓練數據上構建模型钩述,然后能夠對沒見過的新數據(這些新數據與訓練集具有相同的特性)做出準確預測寨躁。如果一個模型能夠對沒見過的數據做出準確預測,我們就說它能夠從訓練集泛化(generalize)到預測集牙勘。我們想要構建一個泛化精度盡可能高的模型职恳。
通常來說,我們構建模型方面,使其在訓練集上能夠做出準確預測放钦。如果訓練集和測試集足夠相似我們預計模型在測試集上也能做出準確預測。不過在某些情況下這一點并不成立恭金。例如操禀,如果我們可以構建非常復雜的模型,那么在訓練集上的精度可以想多高就多高蔚叨。
為了說明這一點床蜘,我們來看一個虛構的例子。比如有一個新手數據科學家蔑水,已知之前船的買家記錄和對買船不感興趣的顧客記錄邢锯,想要預測某個顧客是否會買船。目標是向可能購買的人發(fā)送促銷電子郵件搀别,而不去打擾那些不感興趣的顧客丹擎。
假設我們有顧客記錄,如下表所示:
對數據觀察一段時間之后歇父,我們的新手數據科學家發(fā)現了以下規(guī)律:“如果顧客年齡大于45歲蒂培,并且子女少于3個或沒有結婚,那么他就想要買船榜苫』ご粒”如果你問他這個規(guī)律的效果如何,我們的數據科學家會回答:“100%準確垂睬!”的確媳荒,對于表中的數據抗悍,這條規(guī)律完全正確。我們還可以發(fā)現好多規(guī)律钳枕,都可以完美解釋這個數據集的某人是否想要買船缴渊。數據中的年齡都沒有重復,因此我們可以這樣說:66鱼炒、52衔沼、53和58歲的人想要買船,而其他年齡的人都不想買昔瞧。雖然我們可以編出許多條適用于這個數據集的規(guī)律指蚁,但要記住,我們感興趣的并不是對個數據集進行預測硬爆,我們已經知道這些顧客的答案欣舵。我們想知道新顧客是否可能會買船。因此缀磕,我們想要找到一條適用于新顧客的規(guī)律缘圈,而在訓練集上實現100%的精度對此并沒有幫助。我們可能認為數據科學家發(fā)現的規(guī)律無法適用于新顧客袜蚕。它看起來過于復雜糟把,而且只有很好的數據支持。例如牲剃,規(guī)律里“或沒有離婚”這一條對應的只有一名顧客遣疯。
判斷一個算法在新數據上表現好壞的唯一度量,就是在測試集上的評估凿傅。然而從直覺上看缠犀,我們認為簡單的模型對新數據的泛化能力更好。如果規(guī)律是“年齡大于50歲的人想要買船”聪舒,并且這可以解釋所有顧客的行為辨液,那么我們將更相信這條規(guī)律,而不是與年齡箱残、子女和婚姻狀況都有關系的那條規(guī)律滔迈。因此,我們總想找到最簡單的模型被辑。構建一個對現有信息量來說過于復雜的模型燎悍,正如我們的新手數據科學家做的那樣,這被稱為過擬合(overfitting)盼理。如果你在擬合模型時過分關注訓練集的細節(jié)谈山,得到了一個在訓練集上表現很好、但不能泛化到新數據上的模型宏怔,那么久存在過擬合奏路。與之相反抗蠢,如果你的模型過于簡單——比如說,“有房子的人都買船”——那么你可能無法抓住數據的全部內容以及數據中的變化思劳,你的模型甚至在訓練集上的表現就很差。選擇過于簡單的模型被稱為欠擬合(underfitting)妨猩。
我們的模型越復雜潜叛,在訓練數據上的預測結果就越好。但是壶硅,如果我們的模型過于復雜威兜,我們開始過多關注訓練集中每個單獨的數據點,模型就不能很好地泛化到新數據上庐椒。
二者之間存在一個最佳位置椒舵,可以得到最好的泛化性能。這就是我們想要的模型约谈。
模型復雜度與數據集大小的關系
需要注意笔宿,模型復雜度與訓練數據集中輸入的變化密切相關:數據集中包含的數據點的變化范圍越大,在不發(fā)生過擬合的前提下你可以使用的模型就越復雜棱诱。通常來說泼橘,收集更多的數據點可以有更大的變化范圍,所以更大的數據集可以用來構建更復雜的模型迈勋。但是炬灭,僅復制相同的數據點或收集非常相似的數據是無濟于事的。
回到前面賣船的例子靡菇,如果我們查看了10000多行的顧客數據重归,并且所有數據都符合這條規(guī)律:“如果顧客年齡大于45歲,并且子女少于3個或沒有離婚厦凤,那么他就想要買船”鼻吮,那么我們就更有可能相信這是一條有效的規(guī)律,比從上表中僅12行數據得出來的更為可信泳唠。
收集更多數據狈网,適當構建更復雜的模型,對監(jiān)督學習任務往往特別有用笨腥。在現實世界中拓哺,你往往能夠決定收集多少數據,這可能比模型調參更為有效脖母。永遠不要低估更多數據的力量士鸥!