- 機器學習實戰:基于Scikit-Learn、Keras和TensorFlow(原書第3版)
- (法)奧雷利安·杰龍
- 3974字
- 2024-09-11 17:33:00
1.5 機器學習的主要挑戰
簡而言之,由于你的主要任務是選擇一個模型并在一些數據上對其進行訓練,因此可能出現問題的不外乎是“不良模型”和“不良數據”。讓我們先從不良數據開始。
1.5.1 訓練數據量不足
要讓牙牙學語的孩子了解什么是蘋果,你只需指著一個蘋果說“蘋果”(可能需要重復此過程很多次)就行了,然后孩子就能夠識別出各種顏色和形狀的蘋果,簡直是天才!
機器學習還沒達到這一步,大多數機器學習算法需要大量數據才能正常工作。即使對于非常簡單的問題,你通常也需要成千上萬個樣例,而對于圖像或語音識別等復雜問題,你可能需要數百萬個樣例(除非你可以重用現有模型的某些部分)。
數據的不合理有效性
在2001年發表的一篇著名論文(https://homl.info/6)中,微軟研究員Michele Banko和Eric Brill表明,給定足夠的數據,截然不同的機器學習算法(包括相當簡單的算法)在自然語言消歧[6]的復雜問題上表現幾乎完全相同(如圖1-21所示)。

圖1-21:數據與算法的重要性[7]
正如作者所說:“這些結果表明我們可能需要重新思考如何在二者之間做權衡——將錢和時間花在算法開發上,還是花在語料庫開發上”。
對復雜問題而言數據比算法更重要,這一想法被Peter Norvig等人進一步推廣,于2009發表了題為“The Unreasonable Effectiveness of Data”(https://homl.info/7)的論文[8]。需要注意的是,中小型數據集仍然很普遍,獲得額外的訓練數據并不總是一件輕而易舉或物美價廉的事情,所以暫時不要拋棄算法。
1.5.2 訓練數據不具代表性
為了很好地實現泛化,訓練數據必須能代表你想要泛化的新樣例,這一點至關重要。
無論你使用基于實例的學習還是基于模型的學習,都是如此。
例如,你之前用于訓練線性模型的國家數據集并不完全具有代表性,它不包含任何人均GDP低于23 500美元或高于62 500美元的國家。圖1-22展示了添加這些國家信息之后的數據表現。

圖1-22:更具代表性的訓練樣本
如果你在這個數據上訓練一個線性模型,你會得到圖1-22中的實線,舊模型用虛線表示。如你所見,添加了一些缺失的國家信息不僅顯著地改變了模型,而且清楚地表明這種簡單的線性模型可能永遠不會那么準確。似乎非常富裕的國家并不比中等富裕國家更幸福(事實上,似乎稍微有點不幸福!),相反,一些貧窮國家似乎比許多富裕國家更幸福。
通過使用不具代表性的訓練集,你訓練了一個不太可能做出準確預測的模型,尤其是對于那些非常貧窮和非常富裕的國家。
使用代表你要泛化到的實例的訓練集至關重要。不過說起來容易,做起來難:如果樣本太小,那么會出現采樣噪聲(即非代表性數據被選中),但如果采樣方法有缺陷,即使是非常大的樣本也可能不具有代表性。這稱為采樣偏差。
采樣偏差的示例
也許最著名的采樣偏差示例發生在1936年美國總統大選期間,當時蘭登與羅斯福展開較量:Literary Digest當時舉行了一次非常大的民意調查,向大約1000萬人發送郵件,并得到了240萬個回復。因此做出了高度自信的預測——蘭登將獲得57%的選票。結果恰恰相反,羅斯福以62%的選票獲勝。問題就在于Literary Digest的采樣方法:
· 首先,為了獲得民意調查的地址,Literary Digest使用了電話簿、雜志訂閱名單、俱樂部會員名單等。而所有這些名單上的人往往都是更富裕的人,他們更有可能投票給共和黨人(蘭登)。
· 其次,只有不到25%的受訪者做出了回答。這又一次引入了采樣偏差,可能會排除不太關心政治的人、不喜歡Literary Digest的人和其他關鍵的群體。這是一種特殊類型的采樣偏差,稱為無反應偏差。
再舉一個示例,假設你想建立一個系統來識別funk音樂視頻。構建訓練集的一種方法是在YouTube上搜索“funk music”并使用搜索到的視頻。但這假定YouTube的搜索引擎返回一組代表YouTube上所有funk音樂視頻的視頻。實際上,搜索結果很可能偏向于流行藝術家(如果你住在巴西,你會看到很多“funk carioca”的視頻,聽起來一點也不像James Brown)。另外,你還能如何獲得一個大型訓練集?
1.5.3 低質量數據
顯然,如果你的訓練數據充滿錯誤、異常值和噪聲(例如,低質量的測量產生的數據),系統將更難檢測到底層模式,也就更不太可能表現良好。花時間清洗訓練數據通常是非常值得的。事實上,大多數數據科學家都會花費大量時間做這項工作。例如:
· 如果某些實例明顯異常,則簡單地丟棄它們或嘗試手動修復錯誤可能會有所幫助。
· 如果某些實例缺少一些特征(例如,5%的客戶沒有說明自己的年齡),你必須決定是完全忽略此屬性、忽略這些實例、將缺失值補充完整(例如,填寫年齡的中位數),還是訓練一個具有該特征的模型,再訓練一個沒有該特征的模型。
1.5.4 無關特征
俗話說:垃圾進,垃圾出。只有當訓練數據包含足夠多的相關特征并且沒有太多無關特征時,系統才能夠進行學習。機器學習項目成功的一個關鍵部分是提取出好的特征集來進行訓練。這個過程稱為特征工程,包括以下步驟:
· 特征選擇(在現有特征中選擇最有用的特征進行訓練)。
· 特征提取(結合現有特征產生更有用的特征,正如我們之前看到的,降維算法可以提供幫助)。
· 通過收集新數據創建新特征。
現在我們已經看了不少不良數據的示例,下面來看幾個不良算法的示例。
1.5.5 過擬合訓練數據
假設你正在國外旅游,被出租車司機敲詐。你可能會說那個國家的所有出租車司機都是小偷。以偏概全是我們人類常做的事情,不幸的是,如果我們不小心,機器也會落入同樣的陷阱。在機器學習中,這稱為過擬合,也就是指該模型在訓練數據上表現良好,但泛化效果不佳。
圖1-23展示了嚴重過擬合訓練數據的高階多項式生活滿意度模型。雖然它在訓練數據上的表現比簡單的線性模型好得多,但你真的相信它的預測嗎?

圖1-23:過擬合訓練數據
雖然諸如深度神經網絡這類的復雜模型可以檢測數據中的細微模式,但如果訓練集有噪聲,或者數據集太小(引入了采樣噪聲),那么模型很可能會檢測到噪聲本身的模式(如出租車司機示例中那樣)。顯然,這些模式不會泛化到新實例。例如,假設你為生活滿意度模型提供了更多屬性,包括國家名稱等無關屬性。在這種情況下,一個復雜的模型可能會檢測到一些模式,例如訓練數據的名稱中帶有一個字母w的所有國家的生活滿意度都大于7:新西蘭(New Zealand,7.3)、挪威(Norway,7.6)、瑞典(Sweden,7.3)和瑞士(Switzerland,7.5)。你對w滿意度規則泛化到盧旺達或津巴布韋有多大信心呢?顯然,這種模式出現在訓練數據中純屬偶然,但模型無法判斷這種模式是真實的還是噪聲產生的結果。
當模型相對于訓練數據的數量和噪聲過于復雜時,就會發生過擬合。以下是可能的解決方案:
· 通過選擇參數較少的模型(例如,線性模型而不是高階多項式模型)、減少訓練數據中的屬性數量或約束模型來簡化模型。
· 收集更多訓練數據。
· 減少訓練數據中的噪聲(例如,修復數據錯誤并移除異常值)。
通過約束模型使它更簡單,并降低過擬合的風險,這個過程稱為正則化。例如,我們之前定義的線性模型有兩個參數:θ0和θ1。因此,該學習算法有兩個自由度來調整模型使其適應訓練數據,它可以調整直線的高度(θ0)和斜率(θ1)。如果我們強制θ1=0,該算法只有一個自由度,并且會更難正確地擬合數據:它所能做的就是向上或向下移動線以盡可能接近訓練實例,所以它最終會在平均值附近。這確實是一個非常簡單的模型!如果我們允許算法修改θ1,但強制它保持較小的值,那么該學習算法的自由度將在1到2之間。它生成的模型會比有兩個自由度的模型更簡單,但比只有一個自由度的模型要復雜一些。你希望在完美擬合訓練數據和保持模型足夠簡單之間找到適當的平衡點,以確保模型能夠較好地泛化。
圖1-24展示了三種模型。點線表示在以圓形表示的國家(沒有以正方形表示的國家)上訓練的原始模型,實線是我們用所有國家(圓形和正方形)訓練的第二個模型,虛線是用與第一個模型相同的數據訓練的模型,但是有正則化約束。你可以看到正則化強制了模型的斜率較小:該模型與訓練數據(圓形)的擬合不如第一個模型那么好,但它實際上可以更好地泛化到訓練期間沒看到過的新樣例(正方形)。

圖1-24:正則化降低了過擬合的風險
學習期間應用的正則化程度可以由超參數控制。超參數是學習算法(而非模型)的參數。因此,它不受學習算法本身的影響,必須在訓練前設置并在訓練期間保持不變。如果將正則化超參數設置得非常大,你將得到一個幾乎平坦的模型(斜率接近于零)。學習算法雖然肯定不會過擬合訓練數據,但也不太可能找到好的解決方案。調整超參數是構建機器學習系統的重要部分(你將在第2章中看到詳細示例)。
1.5.6 欠擬合訓練數據
你可能已經猜到了,欠擬合與過擬合正好相反:當模型太簡單而無法學習數據的底層結構時,就會發生欠擬合。例如,生活滿意度的線性模型容易出現欠擬合。因為現實情況總是比模型更復雜,所以它的預測必然是不準確的,即使是在訓練樣例上也是如此。
以下是解決此問題的主要方式:
· 選擇具有更多參數的更強大的模型。
· 為學習算法提供更好的特征(特征工程)。
· 減少對模型的約束(例如通過減少正則化超參數)。
1.5.7 退后一步
到目前為止,你對機器學習有了一定了解。但是,我們介紹了太多的概念,你可能會感到有點迷茫,所以我們暫且退后一步,縱觀一下全局:
· 機器學習是關于如何讓機器更好地完成某些任務的理論,它從數據中學習而無須清晰地編寫規則。
· 機器學習系統有許多類型:有監督和無監督,批量的和在線的,基于實例的和基于模型的。
· 在機器學習項目中,你從訓練集中收集數據,然后將訓練集提供給學習算法。如果該算法是基于模型的,它會調整一些參數以使模型擬合訓練集(對訓練集本身做出良好的預測),然后希望它也能夠對新實例做出良好的預測。如果該算法是基于實例的,那么它會記住樣例,并根據相似性度量將它們與學習過的實例進行比較,從而泛化到新實例。
· 如果訓練集太小,或者數據不具有代表性、有噪聲或被不相關的特征(垃圾進、垃圾出)污染,那么系統的表現不會很好。最后,你的模型既不能太簡單(這種情況會導致欠擬合)也不能太復雜(這種情況會導致過擬合)。
還有最后一個要介紹的重要主題:一旦訓練了一個模型,你就不能只是“希望”它泛化到新實例,你還需要評估它并在必要時對其進行微調。讓我們看看如何做到這一點。