來源:towardsml算法
編譯:劉佳瑋、王緣緣、Walker編程
機器學習算法被認爲可以經過學習數據來弄清楚如何執行重要任務。機器學習
這意味着數據量越大,這些算法就能夠解決更加複雜的問題。然而,開發成功的機器學習應用程序須要必定的「民間技巧」,這在教科書或機器學習入門課程中很難找到。函數
Pedro Domingos教授的一篇很好的研究論文,該論文聚集了機器學習研究人員和從業者的經驗教訓。學習
https://homes.cs.washington.edu/~pedrod/測試
要避免的陷阱,要關注的重要問題以及一些常見問題的答案。準備好去了解了嗎?優化
1.學習=表示+評估+優化spa
你有一個應用程序,你認爲機器學習多是一個很好的選擇。如今,在機器學習領域,每一年都會有大量的機器學習算法可供選擇,有數百種機器學習算法問世。應該使用哪個?設計
在這個巨大的空間中不迷失的關鍵是要明白全部機器學習算法的都由三個核心要素組成:視頻
表示:輸入數據,即要使用的特徵,學習器和分類器必須以計算機能夠理解的語言表示。學習器能夠學習的分類器集稱爲學習器的假設空間。若是分類器不在假設空間中,則沒法進行學習。
澄清說明:分類器與學習器的含義是什麼?假設你有訓練數據,並使用你構建另外一個程序(模型)的程序處理這些數據,例如決策樹。學習器是從輸入數據構建決策樹模型的程序,而決策樹模型是分類器(可以爲每一個輸入數據實例提供預測輸出的東西)。
評估:須要評估函數來區分好的分類和壞的分類。算法內部使用的評估函數可能與咱們但願分類器優化的外部評估度量不一樣(爲了便於優化,而且與後面討論的問題有關)
優化:最後,咱們須要一種方法來在分類器中進行搜索,以便咱們能夠選擇最佳的分類器。學習器效率的關鍵是選擇優化技術。一般從使用現成的優化器開始。若是須要,之後你能夠用本身的設計替換它們。
下表顯示了這三個組件中每一個組件的一些常見示例。
2.泛化纔有用
機器學習的基本目標是歸納超出訓練集中的例子。由於,不管咱們擁有多少數據,咱們都不太可能在測試時再次看到這些確切的示例。在訓練集上作得很好很容易。初學者中最多見的錯誤是測試訓練數據並獲得成功的假象。若是所選分類器隨後在新數據上進行測試,則一般不會比隨機猜想更好。所以,從一開始就設置一些數據,而且僅使用它來測試最終選擇的分類器,而後在整個數據上學習最終分類器。
固然,保留數據會減小可用於訓練的樣本數。這能夠經過交叉驗證來緩解:好比,將你的訓練數據隨機分紅十個子集,在訓練其他部分時保持每一個子集,在其未使用的示例上測試每一個學習的分類器,並對結果求平均值,來看特定參數設置的效果如何。
3.只有數據還不夠
當泛化是目標時,咱們會遇到另外一個主要後果:僅憑數據是不夠的,不管你擁有多少數據。假設咱們想學習一百萬個例子中100個變量的布爾函數(0/1分類)。這意味着2 ^100-10^6個例子,你不知道它們的類。若是手頭沒有更多信息,這怎麼能優於隨機猜想呢?
彷佛咱們陷入了困境。幸運的是,咱們想要在現實世界中學習的特性並非從全部數學上可能的函數集中統一繪製的!實際上,很是通常的假設——就像具備類似類的相似示例——是機器學習如此成功的一個重要緣由。
這意味着專業知識和對數據的理解對於作出正確的假設很是重要。對學習知識的需求應該不足爲奇。機器學習並不神奇,它沒法從無到有。它的做用是從更少的東西中得到更多。與全部工程同樣,編程須要作不少工做:咱們必須從頭開始構建全部東西。學習更像是農業,讓大天然完成大部分工做。農民將種子與養分物質結合起來種植農做物。學習者將知識與數據相結合以優化程序。
4.過擬合的多面性
過分擬合的問題是機器學習的問題。當你的學習器輸出一個對訓練數據100%準確但對測試數據只有50%準確的分類器時,實際上它能夠輸出一個對二者都準確度爲75%的分類器,它已通過擬合。
機器學習中的每一個人都知道過擬合,但它有多種形式,並非很明顯。理解過擬合的方法之一是將泛化偏差分解爲誤差和方差。
誤差是學習者一直學習一樣錯誤的傾向。與真實信號無關,方差是學習隨機事物的傾向。飛鏢圖比能夠更好地理解這一點,以下圖所示:
例如,線性學習器具備較高的誤差,由於當兩個類之間的劃分不是明確的超平面時,學習器沒法正確地判別關係。決策樹沒有這個問題,由於它們的學習方法很靈活。但另外一方面,它們可能有高度差別——在同一任務的不一樣訓練數據集上學習的決策樹一般是很是不一樣的,而實際上它們應該是相同的。
如今,如何處理過擬合?
能夠在此處使用交叉驗證,例如經過使用它來選擇要學習的決策樹的最佳大小。但請注意,這裏還有一個問題:若是咱們使用它來選擇太多參數,它自己就會開始過擬合,咱們又回到了一樣的陷阱。
除了交叉驗證以外,還有許多方法能夠處理過擬合。最受歡迎的是在評估函數中添加正則化項。另外一個選擇是執行卡方等統計顯著性檢驗,以分析添加更多複雜性是否會對類分佈產生任何影響。這裏的一個重點是沒有特定的技術「解決」過擬合問題。例如,咱們能夠經過陷入欠擬合(誤差)的相反偏差來避免過分擬合(方差)。同時避免二者都須要學習一個完美的分類器,並無一種技術總能作到最好(沒有免費的午飯)。
5.高維中的直覺失效
過擬合後,機器學習中最大的問題是維數的詛咒。這個表達式意味着當輸入是高維的時,許多在低維度下工做正常的算法變得難以處理。
因爲固定大小的訓練集覆蓋了輸入空間的一小部分(可能的組合變得巨大),所以隨着示例的維度(即特徵的數量)的增加,正確泛化的難度呈指數級增長。但這就是爲何機器學習既有必要又有難度。正如你在下圖所示,即便咱們從1維過渡到3維,可以分辨出不一樣示例的工做彷佛開始變得愈來愈難——在高維度上,全部示例都開始類似。
這裏的通常問題是,咱們來自三維世界的直覺使咱們在高維度上失敗。例如,高維度橙色的大部分體積都在外部,而不是內部!
使人難以置信的是:若是恆定數量的示例在高維超立方體中均勻分佈,而且若是咱們經過將其刻在超立方體中來近似超球面,則在高維度中,超立方體的幾乎全部體積都在超球面以外。這是個壞消息。由於在機器學習中,一種類型的形狀一般由另外一種形狀近似。
澄清注意:若是你對全部「誇大其詞」感到困惑,超立方體內部的超球面看起來像是這樣的二維和三維:
所以,你如今能夠理解,構建2維或3維分類器很容易,但在高維度上,很難理解發生了什麼。反過來,這使得設計好的分類器變得困難。事實上,咱們常常陷入這樣的陷阱:認爲獲取更多特徵不會帶來負面影響,由於在最壞的狀況下,它們不會提供關於類的新信息。但事實上,維度的詛咒可能會超過它們的好處。
啓示:下次當你考慮添加更多特徵時,請考慮當你的維度變得太大時可能出現的潛在問題。
6.特徵工程是關鍵
當一天結束時,全部機器學習項目中有成功的,也有失敗的。它們之間有區別呢?這個不難想到,最重要的因素就是使用的特徵。若是有許多獨立的特徵,而且每一個特徵都與類的相關性很好,那麼機器學習就很容易。相反,若是類是須要經過複雜方式處理特徵後才能被使用,那麼事情就變難了,這也就是特徵工程——根據如今輸入的特徵建立新的特徵。
一般原始數據格式基本不能爲建模所用。但你能夠從中構建可用於學習的特徵。事實上,這是機器學習項目中的最花精力的部分。但這也是最有趣的部分之一,在這裏直覺、創造力和「小技巧」與技術是一樣重要的東西。
常常會有初學者驚訝一個機器學習項目中花費在訓練上的時間竟如此之少。可是,若是考慮收集數據,整合數據,清理數據並對其進行預處理的時間以及在特徵選擇上的試錯次數,這個時間就相對合理。
更況且,機器學習在構建數據集和運行學習樣例上不是一次性的過程,而是一個迭代的過程,須要運行學習樣例,分析結果,修改數據或學習樣例,以及重複上述過程。訓練每每是最快的部分,但那是由於咱們對這部分至關熟練!特徵工程很難,由於它是專業領域的,不過學習器在很大程度上是通用的。固然,機器學習界的夢想之一就是提升特徵工程的自動化程度。
7.豐富的數據賽過聰明的算法
假設你已經構建了一組最好的特徵,可是你獲得的分類器仍然不夠準確。你如今還能夠作什麼?有兩個主流的辦法:
設計更好的機器學習算法或者是收集更多數據(更多樣例,可能還有更多原始特徵)。機器學習研究人員會去改進算法,但在現實中,通往成功的最快途徑每每是獲取更多數據。
根據經驗,具備大量數據的傻瓜算法賽過一個具備適度數量的聰明算法。
在計算機科學中,一般狀況下,兩個主要的資源限制是時間和內存。但在機器學習中,還有第三個約束:訓練數據。在這三個中,今天的主要瓶頸是時間,由於有大量的可用數據,但沒有足夠的時間來處理它們,因此數據被閒置了。這意味着在實踐中,更簡單的分類器會勝出,由於複雜的分類器須要很長的學習時間。
使用更聰明的算法並不會給出更好的結果,部分緣由是在一天中它們都在作一樣的事情,將全部學習樣例基本上都是經過將相鄰的樣例分組到同一個類來工做的。關鍵的區別在於對「相鄰」的定義。
當咱們有非均勻分佈的數據時,即便複雜的學習樣例也能夠產生很是不一樣的邊界來對結果進行分類,最終它們仍然在重要區域作出相同的預測(具備大量訓練樣例的區域,所以也可能出現大多數文本樣例)。正以下圖所示,不管是花式曲線,直線仍是逐步邊界,咱們均可以獲得相同的預測:
一般,首先嚐試最簡單的學習器(例如,邏輯迴歸前的樸素貝葉斯,支持向量機以前的鄰近算法)。複雜的學習器很吸引人,但它們一般很難使用,由於它們須要控制更多的旋鈕以得到好的結果,而且由於它們的內部更像是黑箱。
8.組合多個模型,而非只用一個
在機器學習的早期階段,努力嘗試使用多種學習器的各類變形,並選擇最好的那個。可是研究人員發現,若是不是選擇其中最好的單一模型,而是結合各類變形會獲得更好的結果,建模者只需稍加努力就能夠得到顯著提高的效果。如今建這種模型融合很是廣泛:
在最簡單的技術稱爲bagging算法,咱們使用相同的算法,但在原始數據的不一樣子集上進行訓練。最後,咱們取均值或經過某種投票機制將它們組合起來。
Boosting算法中學習器按順序逐一訓練。隨後的每個都將其大部分注意力集中在前一個錯誤預測的數據點上。咱們會一直訓練到對結果感到滿意爲止。
Stacking算法中,不一樣獨立分類器的輸出成爲新分類器的輸入,該分類器給出最終預測。
在Netflix算法大賽中,來自世界各地的團隊競相創建最佳的視頻推薦系統。隨着比賽的進行,發現將學習器與其餘團隊相結合能夠得到了最佳成績,而且合併爲愈來愈大的團隊。獲勝者和亞軍都是超過100個學習器的疊加集成,兩個集成的結合進一步改善告終果。算法組合將更好!
9.理論保證和實際具備差別
機器學習論文充滿理論保證。咱們應該對這些保證作些什麼?概括法傳統上與演繹法造成對比:在演繹法中,你能夠保證結論是正確的,在概括法中就很難說。最近幾十年的一個重要進展是咱們認識到能夠作概括結果正確性的保證,前提是若是咱們願意接受機率保證。
例如,咱們能夠保證,給定一個足夠大的訓練集,在很大的機率上,學習器會返回一個成功泛化的假設或沒法找到一個保持正確的假設。
另外一種常見的理論保證是給定無窮的數據,學習器能夠保證輸出正確的分類器。在實踐中,因爲咱們以前討論過的偏置-方差的權衡,若是在無窮數據狀況下,學習器A比學習器B好,那麼在有限數據的狀況下B一般比A好。
理論保證在機器學習中的主要做用不是做爲實際決策的標準,而是做爲理解算法設計的起點。
10.簡單並不意味着準確
在機器學習中,奧卡姆剃刀原理一般被認爲是給定兩個具備相同訓練偏差的分類器,二者中較簡單的可能具備較低的測試偏差。
但事實並不是如此,咱們以前看到了一個反例:即便在訓練偏差達到零以後,經過添加分類器,一個boosted ensemble的泛化偏差也會繼續改善。與直覺相反,模型的參數數量與過擬合之間沒有必要的聯繫。也就是說在機器學習中,一個更簡單的假設仍然應該是首選,由於簡單自己就是一種優點,而不是由於它意味着準確性。
11.可表示不等於可學習
僅僅由於能夠表示函數並不意味着能夠學習它。例如,標準決策樹學習器沒法學習葉子多於訓練樣例的樹木。
給定有限的數據、時間和內存,標準學習器只能學習全部可能功能的一小部分,而且這些子集對於不一樣表示的學習器是不一樣的。所以,這裏的關鍵是嘗試不一樣的學習器(並可能將它們結合起來)是值得的。
12.相關性不意味着因果性
咱們都據說過相關性並不意味着因果性,但仍然有人經常傾向於認爲相關性意味着因果關係。
一般,學習預測模型的目標是將它們用做行動指南。若是咱們發現用戶在超市常常買了啤酒就會買尿不溼,那麼也許把啤酒放在尿不溼部分旁邊會增長銷量。但除非咱們進行真實的實驗,不然很難判斷這是否屬實。相關性標誌着一個潛在的因果關係,咱們能夠將其做爲進一步研究的方向,而非咱們的最終結論。
結論
跟其餘學科同樣,機器學習有不少「民間智慧」,很難得到但對成功相當重要。感謝Domingos教授今天給咱們傳授了一些智慧。但願這個攻略對你有幫助。能夠在下面評論區留言,說出你的想法哦~