机器学习重大挑战:坏数据和坏算法正在毁掉你的项目
導讀:讓我們看看你在學習過程中可能會遇到哪些問題,阻礙你做出準確的預測。
簡單來說,由于你的主要任務是選擇一種學習算法,并對某些數據進行訓練,所以最可能出現的兩個問題不外乎是壞算法和壞數據。
作者:奧雷利安·杰龍(Aurélien Géron)
本文摘編自《機器學習實戰:基于Scikit-Learn和TensorFlow》,如需轉載請聯系我們
01 壞數據
讓我們先從壞數據開始。
1. 訓練數據的數量不足
要教一個牙牙學語的小朋友什么是蘋果,你只需要指著蘋果說“蘋果”(可能需要重復這個過程幾次)就行了,然后孩子們就能夠識別各種顏色和形狀的蘋果了,簡直是天才!
機器學習還沒有到這一步,大部分機器學習算法需要大量的數據才能正常工作。即使是最簡單的問題,很可能也需要成千上萬個示例,而對于諸如圖像或語音識別等復雜問題,則可能需要上千萬的示例(除非你可以重用現有模型的某些部分)。
在2001年發表的一篇著名論文中,微軟研究員 Michele Banko 和 Eric Brill 表明,截然不同的機器學習算法,包括相當簡單的算法,在自然語言歧義消除這個復雜問題上,表現幾乎完全一致(如圖1-20所示)。
▲圖1-20 數據對算法的重要性
正如作者所說:“這些結果表明,我們可能會重新思考如何在二者之間做權衡——將錢和時間花在算法的開發上,還是花在語料庫的建設上。”
對復雜問題而言,數據比算法更重要,這一想法被Peter Norvig等人進一步推廣,于2009年發表論文《數據的不合理有效性》。不過需要指出的是,中小型數據集依然非常普遍,獲得額外的訓練數據并不總是一件輕而易舉或價廉物美的事情,所以暫時先不要拋棄算法。
2. 訓練數據不具代表性
為了很好地實現泛化,至關重要的一點是,對于將要泛化的新示例來說,訓練數據一定要非常有代表性。不論你使用的是基于實例的學習還是基于模型的學習,都是如此。
例如,前面我們用來訓練線性模型的國家數據集并不具備完全的代表性,有部分國家的數據缺失。圖1-21顯示了補上缺失國家/地區信息之后的數據表現。
▲圖1-21 一個更具代表性的訓練樣例
如果你用這個數據集訓練線性模型,將會得到圖中的實線,而虛線表示舊模型。正如你所見,添加部分缺失的國家信息,不僅顯著地改變了模型,也更清楚地說明,這種線性模型可能永遠不會有多準確。
看起來,某些非常富裕的國家并不比中等富裕國家幸福(事實上,看起來甚至是不幸福),反之,一些貧窮的國家也似乎比許多富國更加快樂。
使用不具代表性的訓練集訓練出來的模型不可能做出準確的預估,尤其是針對那些特別貧窮或特別富裕的國家。
針對你想要泛化的案例使用具有代表性的訓練集,這一點至關重要。不過說起來容易,做起來難:如果樣本集太小,將會出現采樣噪聲(即非代表性數據被選中);而即便是非常大的樣本數據,如果采樣方式欠妥,也同樣可能導致非代表性數據集,這就是所謂的采樣偏差。
最著名的采樣偏差的案例,應該是發生在1936年美國總統大選期間,蘭登對決羅斯福。《文學摘要》當時舉行了一次非常大范圍的民意調查,向約1000萬人發送了郵件,并得到了240萬個回復,因此做出了高度自信的預言——蘭登將獲得57%的選票。
結果恰恰相反,羅斯福贏得了62%的選票。問題就在于文學摘要的采樣方式:
首先,為了獲取發送民意調查的地址,《文學摘要》采用了電話簿、雜志訂閱名單、俱樂部會員名單等類似名簿。而所有這些名單上的人往往對富人有更大的偏好,也就是更有可能投給共和黨(即蘭登)。
其次,收到民意調查郵件的人中,不到25%的人給出了回復。這再次引入了采樣偏差,那些不怎么關心政治的人,不喜歡《文學摘要》的人以及其他的一些關鍵群體直接被排除在外了。這是一種特殊類型的采樣偏差,叫做無反應偏差。
3. 質量差的數據
顯然,如果訓練集滿是錯誤、異常值和噪聲(例如,差質量的測量產生的數據),系統將更難檢測到底層模式,更不太可能表現良好。所以花時間來清理訓練數據是非常值得的投入。事實上,大多數數據科學家都會花費很大一部分時間來做這個。例如:
如果某些實例明顯是異常情況,要么直接將其丟棄,要么嘗試手動修復錯誤,都會大有幫助。
如果某些實例缺少部分特征(例如,5%的顧客沒有指定年齡),你必須決定是整體忽略這些特征,還是忽略這部分有缺失的實例,又或者是將缺失的值補充完整(例如,填寫年齡值的中位數),或者是訓練一個帶這個特征的模型,再訓練一個不帶這個特征的模型,等等。
4. 無關特征
正如我們常說的:垃圾入,垃圾出。只有訓練數據里包含足夠多的相關特征,以及較少的無關特征,系統才能夠完成學習。一個成功的機器學習項目,關鍵部分是提取出一組好的用來訓練的特征集,這個過程,稱之為特征工程,包括以下幾點:
特征選擇:從現有特征中選擇最有用的特征進行訓練。
特征提取:將現有特征進行整合,產生更有用的特征(正如前文提到的,降維算法可以提供幫助)。
通過收集新數據創造新特征。
02 壞算法
現在我們已經看了不少“壞數據”的例子,再來看幾個“壞算法”的例子。
1. 訓練數據過度擬合
假設你正在國外旅游,被出租車司機狠宰了一刀,你很可能會說,那個國家的所有出租車司機都是強盜。過度概括是我們人類常做的事情,不幸的是,如果我們不小心,機器很可能也會陷入同樣的陷阱。在機器學習中,這被稱為過度擬合,也就是指模型在訓練數據上表現良好,但是泛化時卻不盡如人意。
圖1-22 顯示了一個與訓練數據過度擬合的,高階多項式的生活滿意度模型。雖然它在訓練數據上的表現比簡單的線性模型要好得多,但是你真的敢相信它的預測嗎?
▲圖1-22 訓練數據過度擬合
諸如深度神經網絡這類的復雜模型可以檢測到數據中的微小模式,如果訓練集本身是嘈雜的,或者說數據集太小(會導致采樣噪聲),那么很可能會導致模型檢測噪聲里的模式。很顯然,這些模式不能泛化至新的實例。
舉例來說,假設你給你的生活滿意度模型提供了更多其他的屬性,包括一些不具信息的屬性例如國家的名字。在這種情況下,一個復雜模型可能會檢測到這樣的事實模式:
訓練數據中,名字中帶有字母 W 的國家,生活滿意度大于 7 ——新西蘭(New Zealand 7.3)、挪威(Norway 7.4)、瑞典(Sweden 7.2)和瑞士(Switzerland 7.5)。
當把這個 W 規則泛化到盧旺達(Rwanda)或津巴布韋(Zimbabwe)時,你對結果有多大的自信?顯然,訓練數據中的這個模式僅僅是偶然產生的,但是模型無法判斷這個模式是真實的,還是噪聲產生的結果。
當模型相對于訓練數據的數量和噪度都過于復雜時,會發生過度擬合。可能的解決方案是:
簡化模型:可以選擇較少參數的模型(例如,選擇線性模型而不是高階多項式模型),可以減少訓練數據中的屬性數量,又或者是約束模型
收集更多的訓練數據
減少訓練數據中的噪聲(例如,修復數據錯誤和消除異常值)
通過約束模型使其更簡單,并降低過度擬合的風險,這個過程稱之為正則化。例如,我們前面定義的線性模型有兩個參數,θ0和θ1。因此,該算法在擬合訓練數據時,調整模型的自由度就等于2:它可以調整線的高度(θ0)和斜率(θ1)。
如果我們強行讓θ1 = 0,那么算法的自由度將會降為 1,并且其擬合數據將變得更為艱難——它能做的全部就只是將線上移或下移來盡量接近訓練實例,最后極有可能停留在平均值附近。這確實太簡單了!
如果我們允許算法修改θ1,但是我們強制它只能是很小的值,那么算法的自由度將位于 1 和 2 之間,這個模型將會比自由度為 2 的模型稍微簡單一些,同時又比自由度為 1 的模型略微復雜一些。你需要在完美匹配數據和保持模型簡單之間找到合適的平衡點,從而確保模型能夠較好地泛化。
圖1-23顯示了三個模型:藍色虛線代表一開始的原始模型,也就是缺失部分國家的數據;紅色的虛線代表用所有國家數據訓練的第二個模型;實線代表的模型與第一個模型使用的訓練數據相同,但是應用了正則化的約束。
我們可以看出通過正則化使得模型具有較小的斜率,這雖然讓模型與訓練數據的匹配度略微降低,但是能夠更好地泛化至新的實例。
▲圖1-23 通過正則化降低過度擬合的風險
在學習時,應用正則化的程度可以通過一個超參數來控制。超參數是學習算法(不是模型)的參數。因此,它不受算法本身的影響;它必須在訓練之前設置好,并且在訓練期間保持不變。
如果將正則化超參數設置為非常大的值,會得到一個幾乎平坦的模型(斜率接近于零);學習算法雖然肯定不會過度擬合訓練數據,但是也更加不可能找到一個好的解決方案。調整超參數是構建機器學習系統非常重要的組成部分。
2. 訓練數據擬合不足
你可能已經猜到了,擬合不足和過度擬合正好相反:它的產生通常是因為,對于下層的數據結構來說,你的模型太過簡單。
舉個例子,用線性模型來描述生活滿意度就屬于擬合不足;現實情況遠比模型復雜得多,所以即便是對于用來訓練的示例,該模型產生的預測都一定是不準確的。
解決這個問題的主要方式有:
選擇一個帶有更多參數、更強大的模型
給學習算法提供更好的特征集(特征工程)
減少模型中的約束(比如,減少正則化超參數)
03 退后一步
現在你已經對機器學習有一些了解。不過講了這么多概念,你可能有點暈,我們暫且退后一步,縱觀一下全局:
機器學習是關于如何讓機器可以更好地處理某些特定任務的理論,它從數據中學習,而不是將規則進行清晰地編碼;
機器學習系統有很多類型:監督式和無監督式,批量的和在線的,基于實例的和基于模型的等等;
在一個機器學習項目中,你從訓練集中采集數據,然后將數據交給學習算法來計算。如果算法是基于模型的,它會調整一些參數來將模型適配于訓練集(比如,對訓練集本身作出很好的預測),然后對新的場景,算法就可以作出合理的預測。如果算法是基于實例的,它會記住這些樣例,并根據相似度來對新的實例進行泛化。
如果訓練集的數據太少、數據代表性不夠、包含太多噪聲、或者是被一些無關特征污染(垃圾進,垃圾出),那么系統將無法很好地工作。最后,你的模型既不能太簡單(這會導致擬合不足),也不能太復雜(這會導致過渡擬合)。
還有最后一個要講的重要主題是:在你訓練好了一個模型之后,你不能只是“希望”它可以正確的對新的場景作出泛化。你還需要評估它,必要時還要做出一些調整。
關于作者:奧雷利安·杰龍(Aurélien Géron)是機器學習方面的顧問。他曾是Google軟件工程師,在2013年到2016年主導了YouTube視頻分類工程。2002年和2012年,他還是Wifirst公司(一家法國的無線ISP)的創始人和首席技術官,2001年是Ployconseil公司(現在管理電動汽車共享服務Autolib)的創始人和首席技術官。
本文摘編自《機器學習實戰:基于Scikit-Learn和TensorFlow》,經出版方授權發布。
延伸閱讀《機器學習實戰》
點擊上圖了解及購買
轉載請聯系微信:togo-maruko
推薦語:前谷歌工程師撰寫,“美亞”人工智能圖書暢銷榜首圖書。從實踐出發,手把手教你從零開始搭建起一個神經網絡。
據統計,99%的大咖都完成了這個神操作
▼
更多精彩
在公眾號后臺對話框輸入以下關鍵詞
查看更多優質內容!
PPT?|?報告?|?讀書?|?書單
大數據?|?揭秘?|?人工智能?|?AI
Python?|?機器學習?|?深度學習?|?神經網絡
可視化?|?區塊鏈?|?干貨?|?數學
猜你想看
違背常識、顛覆認知,終于有人把薛定諤的貓講明白了
干貨:用Python進行數據清洗,這7種方法你一定要掌握
極度燒腦+驚人發現:4個顛覆你世界觀的量子理論實驗
入門科普:一文看懂NLP和中文分詞算法(附代碼舉例)
Q:?你的算法和數據都還好嗎?
歡迎留言與大家分享
覺得不錯,請把這篇文章分享給你的朋友
轉載 / 投稿請聯系:baiyu@hzbook.com
更多精彩,請在后臺點擊“歷史文章”查看
點擊閱讀原文,了解更多
總結
以上是生活随笔為你收集整理的机器学习重大挑战:坏数据和坏算法正在毁掉你的项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 结婚生娃和去核电站参观,哪个更安全?
- 下一篇: 图解3种常见的深度学习网络结构:FC、C