華盛頓大學 Pedro Domingos 教授的「A Few Useful Things to Know about Machine Learning」這篇論文總結了機器學習研究者和從業者的 12 個寶貴經驗,包括須要避免的陷阱、須要關注的重點問題、常見問題的答案。但願這些經驗對機器學習愛好者有一些幫助。算法
01編程
「表徵+評估+優化」構成機器的主要內容!網絡
構成機器學習算法的 3 部分:架構
表徵(Representation):分類器必須用計算機能夠處理的形式化語言來表示。相反地,爲訓練模型選擇一個表徵就等同於選擇可訓練分類器的集合。這個集合稱爲訓練模型的「假設空間」。若是分類器不在「假設空間」中,那麼它就不能由訓練所獲得。一個相關的問題是如何表徵輸入,即便用哪些特徵。機器學習
評估(Evaluation):須要一個評估函數來區分分類器的好壞。算法內部使用的評估函數可能與分類器優化的外部評估函數不一樣,這是爲了便於優化,而且是由咱們下一節所要討論的問題致使的。函數
優化(Optimization):咱們要用一種方法搜索得分最高的分類器。優化方法的選擇對於提高模型的效率很是關鍵。另外,若是評估函數具備一個以上的最優值,則優化方法有助於肯定最後產生的分類器。新的訓練模型一開始經常使用現有的優化器,後來常會轉而使用自定義的優化器。性能
02學習
「泛化能力」很關鍵,「測試數據」驗證相當重要!測試
機器學習的主要目標是對訓練集以外的樣本進行泛化。由於不管有多少數據,都不太可能在測試中再次看到徹底相同的例子。在訓練集上具備良好表現很容易。機器學習初學者最常犯的錯誤是把模型放在訓練數據中進行測試,從而產生成功的錯覺。若是被選擇的分類器在新的數據上進行測試,通常狀況,結果每每和隨機猜想相差無幾。因此,若是你僱傭他人創建分類器,必定要留一些數據給你本身,以便在他們給你的分類器中進行測試。相反,若是有人僱傭你創建一個分類器,請保留一部分數據對你的分類器進行最終測試。優化
03
僅有數據是不夠的,知識相結合效果更好!
把泛化能力做爲目標,會又另外一個後果:只有數據是不夠的,不管你擁有多少數據。這是否讓人沮喪。那麼,咱們怎麼能奢求它學到東西呢?不過,現實世界中咱們想學習的函數並不都是從數學上可能的函數中提取出來的!實際上,使用通常假設——例如平滑性、類似樣本有類似分類、有限的依賴性或有限複雜度——每每能作得足夠好,這也正是機器學習能如此成功的大部分緣由。正如演繹同樣,概括(訓練模型所作的)是一個知識槓桿——它將少許知識輸入轉化爲大量知識輸出。概括是一個比演繹更爲強大的槓桿,僅需更少的知識就能產出有用的結果。不過,它仍然須要大於零的知識輸入才能工做。正如任何一個槓桿同樣,輸入得越多,獲得的也越多。
這樣回想起來,訓練過程當中對知識的需求沒什麼好驚訝的。機器學習並不是魔術,它沒法作到無中生有,它所作的是觸類旁通。如同全部的工程同樣,編程須要作大量的工做:咱們必須從頭開始構建全部的東西。訓練的過程更像是耕種,其中大部分工做是天然完成的。農民將種子與養分物質結合起來,種植做物。訓練模型將知識與數據結合起來,編寫程序。
04
「過擬合」讓機器學習效果產生錯覺!
若是咱們所擁有的知識和數據不足以徹底肯定正確的分類器,分類器(或其中的一部分)就可能產生「錯覺」。所得到的分類器並非基於現實,只是對數據的隨機性進行編碼。這個問題被稱爲過擬合,是機器學習中棘手的難題。若是你的訓練模型所輸出的分類器在訓練數據上準確率是 100%,但在測試數據上準確率只有 50%,那麼實際上,該分類器在兩個集合上的輸出準確率整體可能約爲 75%,它發生了過擬合現象。
在機器學習領域,人人都知道過擬合。可是過擬合有多種形式,人們每每不能馬上意識到。理解過擬合的一種方法是將泛化的偏差進行分解,分爲誤差和方差。誤差是模型不斷學習相同錯誤的傾向。而方差指的是無論真實信號如何,模型學習隨機信號的傾向。線性模型有很高的誤差,由於當兩個類之間的邊界不是一個超平面時,模型沒法作出調整。決策樹不存在這個問題,由於它們能夠表徵任何布爾函數。可是另外一方面,決策樹可能方差很大:若是在不一樣訓練集上訓練,生成的決策樹一般差別很大,但事實上它們應該是相同的。
交叉驗證能夠幫助對抗過擬合,例如,經過使用交叉驗證來選擇決策樹的最佳規模用於訓練。但這不是萬能的,由於若是咱們用交叉驗證生成太多的參數選擇,它自己就會開始產生過擬合現象。
除交叉驗證以外,還有不少方法能夠解決過擬合問題。最流行的是在評估函數中增長一個正則化項。舉個例子,這樣一來就能懲罰含更多項的分類器,從而有利於生成參數結構更簡單的分類器,並減小過擬合的空間。另外一種方法是在添加新的結構以前,進行相似卡方檢驗的統計顯著性檢驗,在添加新結構先後肯定類的分佈是否真的具備差別。當數據很是少時,這些技術特別有用。儘管如此,你應該對某種方法完美解決了過擬合問題的說法持懷疑態度。減小過擬合(方差)很容易讓分類器陷入與之相對的欠擬合偏差(誤差)中去。若是要同時避免這兩種狀況,須要訓練一個完美的分類器。在沒有先驗信息的狀況下,沒有任何一種方法總能作到最好(天下沒有免費的午飯)。
05
機器學習中最大的問題就是「維度災難」!
除了過擬合,機器學習中最大的問題就是維度災難。這一名詞是由 Bellman 在 1961 年提出的,指的是當輸入維度很高時,許多在低維工做正常的算法將沒法正常工做。可是在機器學習中,它的意義更廣。隨着樣本維度(特徵數量)的增長,進行正確泛化變得愈來愈難,由於固定大小的訓練集對輸入空間的覆蓋逐漸縮減。
高維的通常問題是,來自三維世界的人類直覺一般不適用於高維空間。在高維度當中,多元高斯分佈的大部分數據並不接近平均值,而是在其周圍愈來愈遠的「殼」中;此外,高維分佈的大部分體積分佈在表面,而不是體內。若是恆定數量的樣本在高維超立方體中均勻分佈,那麼在超越某個維數的狀況下,大多數樣本將更接近於超立方體的一個面,而不是它們的最近鄰。此外,若是咱們經過嵌入超立方體的方式逼近一個超球面,那麼在高維度下,超立方體幾乎全部的體積都在超球面以外。這對於機器學習來講是個壞消息,由於一種類型的形狀經常能夠被另外一種形狀所逼近,但在高維空間中卻失效了。
創建二維或三維分類器容易;咱們能夠僅經過視覺檢查找出不一樣類別樣本之間的合理邊界。可是在高維中,咱們很難理解數據的分佈結構。這又反過來使設計一個好的分類器變得困難。簡而言之,人們可能會認爲收集更多的特徵必定不產生負面做用,由於它們最多隻是不提供有關分類的新信息而已。但事實上,維度災難的影響可能大於添加特徵所帶來的利益。
06
「理論保證」與「實際出入」的相互關係
機器學習論文中充斥着理論保證。最多見的保證就是關於保持模型良好泛化能力的訓練樣本數量約束問題。首先,該問題顯然是可證的。概括一般與演繹相對:經過演繹,你能夠確保結論是正確的; 在概括中,全部臆想都被摒棄。或許這就是傳世的古老智慧。近十年的主要突破就是認識到概括的結果是可證的這一事實,尤爲在咱們願意給出機率保證時。
必須斟酌這類約束意味着什麼。這並不意味着,若是你的網絡返回與某個特定訓練集一致的假設,那麼這個假設就可能具備很好的泛化能力。而是,給定一個足夠大的訓練集,你的網絡極可能會返回一個泛化能力好的假設或沒法獲得一致的假設。這類約束也沒有教咱們如何選擇一個好的假設空間。它只告訴咱們,若是假設空間包含好的分類器,那麼隨着訓練集的增大,網絡訓練出一個弱分類器的機率會減少。若是縮小假設空間,約束條件做用會加強,可是訓練出一個強分類器的機率也會降低。
另外一種常見的理論保證是漸進性:假如輸入的數據規模是無窮大的,那麼網絡確定會輸出一個強分類器。聽起來靠譜,可是因爲要保證漸近性,選擇某個網絡而非另外一個就顯得過於輕率。在實踐中,咱們不多處於漸近狀態。由上面討論的誤差 - 方差權衡可知,若是網絡 A 在具備海量數據時比網絡 B 好,則在有限數據狀況下,B 每每比 A 好。
理論保證在機器學習中存在的意義不只僅是做爲評判實際決策的標準,並且是理解的方法及設計算法的動力。鑑於此,它十分有用。事實上,這麼多年以來,正是理論聯繫實際促進了機器學習的飛躍式進步。注意:學習是一個複雜的現象,它在理論上說得通,在實際工做中可行,也並不表示前者是致使後者的緣由。
07
「特徵工程」是機器學習的關鍵
最後,有些機器學習項目大獲成功,有些卻失敗了。這是什麼形成的?最重要的影響因素就是使用的特徵。若是你獲取到不少獨立的且與所屬類別相關的特徵,那麼學習過程就很容易。相反,若某一個類是特徵的極其複雜的函數,你的模型可能沒法學習到該函數。一般來講,原始數據格式很不適合學習,可是能夠基於它來構建特徵。這正是機器學習項目最重要的部分,一般也是最有趣的部分,直覺、創造力、「魔術」和技術一樣重要。
初學者經常會驚訝於機器學習項目實際上花在機器學習上的時間不多。可是當你將收集、整合、清洗和預處理數據以及將數據重構成特徵過程當中解決錯誤等雜事所消耗的時間考慮在內就不奇怪了。並且,機器學習並不僅是構建數據集跑一次模型就沒事了,它一般是一個跑模型、分析結果、修改數據集/模型的迭代式過程。學習是其中最快的部分,但這取決於咱們已經能夠熟練運用它!特徵工程由於針對特定的領域,因此很難作,而模型架構的適用範圍更普遍。可是,這兩者之間並無清晰的界線,這一般能夠解釋那些整合了領域知識的模型具備更好的性能。
08
記住:數據量比算法還重要!
在計算機科學的大多數領域,時間和內存是兩大緊缺資源。但在機器學習中,數據集儼然是第三個緊缺資源。隨着時間的推移,瓶頸之爭也在不斷改變。在 20 世紀 80 年代,數據一般是瓶頸。而現在時間更爲寶貴。咱們今天有海量的數據可用,可是卻沒有充足的時間去處理它,這些數據所以被擱置。這就產生了一個悖論:即便在原則上講,大量的數據意味着能夠學習到更復雜的分類器,但在實踐中,咱們每每採用更簡單的分類器,由於複雜的分類器意味着更長的訓練時間。部分解決方案是提出能夠快速學習到複雜分類器的方法,且今天在這一方向上確實取得了顯著的進展。
使用更智能的算法的收益不如指望的部分緣由是,第一次取近似值時,它跟其它算法無異。當你認爲表徵方式之間的區別與規則、神經網絡之間的區別相似時,這會讓你驚訝。但事實是,命題規則能夠輕易地編碼進神經網絡,而且其它的表徵方式之間也有相似的關係。模型本質上都是經過將近鄰樣本分到相同的類別而實現的,關鍵差別在於「近鄰」的含義。對於非均勻分佈的數據,模型能夠產生普遍不一樣的邊界,同時在重要的區域(具備大量訓練樣例的區域,所以也是大多數文本樣例可能出現的區域)中產生相同的預測。這也能解釋爲何強大的模型多是不穩定的但仍然很準確。
通常來講,咱們首先要考慮最簡單的模型(例如,先考慮樸素貝葉斯而非 logistic 迴歸,先考慮 K-近鄰而非支持向量機)。模型越複雜越誘人,可是它們一般很難使用,由於你須要調整不少的節點以得到好的結果,同時,它們的內部構造極其不透明。
模型能夠分爲兩種主要類型:一種是規模固定的模型,例如線性分類器,另外一種是表徵能力隨數據集加強的模型,例如決策樹。固定規模的模型只能利用有限的數據。規模可變的模型理論上能夠擬合任何函數,只要有足夠大的數據集,可是現實很骨感,總存在算法的侷限性或計算成本。並且,因爲維度災難,現有的數據集可能不夠。鑑於這些緣由,更智能的算法—那些充分利用數據和計算資源的算法--若是你願意努力去調試,最終會獲得好的結果。在設計模型與學習分類器之間並無十分清晰的界線;可是,任何給定的知識點均可以編碼進模型或從數據中學習到。所以,模型設計每每是機器學習項目中的重要組成部分,設計者最好擁有相關專業背景。
09
「單模型」很難實現最優,「多模型集成」纔是出路!
在機器學習發展的早期,你們都有各自喜好的模型,用一些先驗的理由說明它的優越性。研究員對模型開發了大量的變體並從中挑選一個最優的模型。隨後,系統的經驗比較代表,最好的模型隨應用的改變而改變,開始出現了包含許多不一樣模型的系統。如今的研究開始嘗試調試多個模型的不一樣變體,而後挑選表現最好的那一個。但研究人員開始注意到,不選擇找到的最佳變體,而是結合多個變體,卻獲得了更好的結果(一般會好不少),並且這沒有增長工做量。
如今,模型集成已是標準方法。其中最簡單的技術叫 bagging 算法,咱們僅經過重採樣來生成訓練數據集的隨機變體,再基於這些變體分別學習分類器,並經過投票整合這些分類器的結果。此法的可行性在於它大幅減小了方差,且只微微提高了一點誤差。在 boosting 算法中,訓練樣例有權重,並且這些權重各不相同,所以每一個新分類器都把重點放在前面的模型會出錯的樣例上。在 stacking 算法中,每一個單獨的分類器的輸出做爲「高層」模型的輸入,這些高層模型會以最佳方式組合這些模型。
還有不少其它的方法,就不一一列舉了,可是總的趨勢是規模愈來愈大的集成學習。在 Netflix 的獎金激勵下,全世界的團隊致力於構建最佳視頻推薦系統。隨着競賽的推動,競賽團隊發現經過結合其它團隊的模型能夠得到最佳結果,同時這也促進團隊的合併。冠軍和亞軍模型都是由 100 多個小模型組成的集成模型,兩個集成模型相結合可進一步提升成績。毫無疑問,未來還會出現更大的集成模型。
10
「簡單」不能表明是「準確」!
奧卡姆剃刀原理指出,如無必要,勿增實體。在機器學習中,這一般意味着,給定兩個具備相同訓練偏差的分類器,二者中較簡單的分類器可能具備最低的評估偏差。關於這一說法的佐證在文獻中隨處可見,但實際上有不少反例用來反駁它,「沒有免費午飯」定理質疑它的真實性。
咱們在前文中也看到了一個反例:集成模型。即便訓練偏差已經達到零,經過增長分類器,加強集成模型的泛化偏差仍然能夠繼續減小。所以,與直覺相悖,模型的參數數量與其過擬合趨勢並無必然的聯繫。
一個巧妙的觀點是將模型複雜性等同於假設空間的大小,由於較小的空間容許用較短的編碼表徵假設。相似理論保證部分中的界限可能被理解成較短的假設編碼有更好的泛化能力。經過在有先驗偏好的空間中對假設進行較短的編碼,咱們能夠進一步細化這一點。可是把這看做準確率和簡單性之間的權衡的證實則是循環論證:咱們經過設計使偏心的假設更簡單,若是它們準確率不錯,那是由於偏心假設的正確,而不是由於在特定表徵下假設的「簡單」。
11
「可表徵」並不表明「可學習」!
全部運用於非固定規模的模型表徵實際上都有「任意函數均可以使用該表徵來表示或無限逼近」之類的相關定理。這使得某表徵方法的偏好者經常會忽略其它要素。然而,僅憑可表徵性並不意味着模型能夠學習。例如,葉節點多於訓練樣本的決策樹模型就不會學習。在連續的空間中,一般使用一組固定的原語表徵很簡單的函數都須要無限的份量。
進一步講,若是評估函數在假設空間有不少局部最優勢(這很常見),模型可能就找不到最優的函數,即便它是可表徵的。給定有限的數據、時間及存儲空間,標準的模型只能學到全部可能函數集的一個很小的子集,且這個子集隨所選的表徵方法的不一樣而不一樣。所以,關鍵問題不在「模型是否可表示」,而「模型是否可學習」以及嘗試不一樣的模型(甚至是集成模型)是很重要的。
12
「相關性」並不是就是「因果關係」!
相關性並不意味着因果關係這一點被頻繁提起,以致於都不值得再批評。可是,咱們討論的某類模型可能只學習相關性,可是它們的結果一般被看做是表徵因果關係。有問題嗎?若是有,那麼你們爲什麼還這麼作?
一般是不對的,預測模型學習的目標是用它們做爲行動的指南。當發現人們在買啤酒的時候也會買紙尿布,那麼把啤酒放在紙尿布旁邊或許會提升銷量。但若是不實際進行實驗則很難驗證。機器學習一般用於處理觀測數據,其中預測變量不受模型的控制,和實驗數據相反(可控的)。一些學習算法也許能夠經過觀測數據挖掘潛在的因果關係,可是實用性不好。另外一方面,相關性只是潛在的因果關係的標識,咱們能夠用它指導進一步的研究。
原文:https://medium.com/@james_aka_yale/12-useful-things-to-know-about-machine-learning-c599be92c98d
End