經典重譯 | 來自華盛頓大學教授的機器學習「內功心法」


本文最初發表在 《ACM通信》2012年第10輯。做者是華盛頓大學教授,著名的機器學習專家 Pedro Domingos。做者2016年憑藉暢銷書《終極算法》而名聲大噪,成爲全球機器學習領域表明人物之一。而5年前 Domingos 教授發表的這篇「內功心法」,也是整個國外機器學習領域幾乎人人必讀的一篇文章。在不少大學的機器學習課程以及優達學城等在線培訓體系中,都推薦學生精讀此文。算法


這篇文章高屋建瓴的介紹了機器學習實踐當中若干須要關注、而又不見於通常教科書的問題,堪稱經驗之談,很是寶貴。 國內的機器學習愛好者屢次翻譯過這篇文章,可是翻譯質量參差不齊。爲此小編委託高手重譯此文,再次發表以饗各位小夥伴,強烈建議你們收藏,有時間的話多讀幾遍。數據庫


本文是中譯版,在AI科技大本營(rgznai100)微信公衆號會話中輸入「經典」,便可得到原始PDF文件。編程


做者 | Pedro Domingos微信

導讀 | 孟巖網絡

翻譯 | AI科技大本營(rgznai100)框架


機器學習系統能夠自動從數據中學習程序。這種方法比起手工編程更具吸引力。近10年,機器學習發展勢頭迅猛,已不只限於計算機科學,還被用於網絡搜索,垃圾郵件過濾器、推薦系統、廣告植入、信用評分、欺詐檢測、股票交易、藥物設計以及其餘應用上機器學習


麥肯錫全球研究院近日發佈了一篇報告,斷言機器學習(即數據挖掘和預測分析)將會驅動下一次革新浪潮。市面上有好些不錯的教科書適合感興趣的從業人員和研究人員(好比,Mitchell and Witten etal.)。可是,不少在實踐當中極其重要的「內功心法」,教科書裏是沒有的,結果就致使不少機器學習項目浪費了大量的時間,或最後沒有獲得想要的結果。然而,大部分的內功心法並不難講清楚,本文試圖作一個解說。ide


機器學習種類不少,但爲了方便說明,我主要就集中在最成熟、使用範圍最廣的一個類型:分類。但我要討論的問題適用於全部類型的機器學習。函數


分類器是輸入(通常來講)一個離散向量以及/或者連續特徵值,而後輸出一個單一的離散值,即類別。好比,垃圾郵件過濾器把郵件分爲「垃圾郵件」和「非垃圾郵件」,輸入值多是一個布爾向量x = (x1,…,xj,…,xd),若是字典裏以j開頭的單詞出如今郵件裏,那麼xj = 1,若沒出現,則xj = 0。學習器輸入一組訓練樣本 (xi, yi),其中xi = (xi,1, . . . , xi, d)爲可觀察輸入,yi爲對應的輸出,輸出的是一個分類器。學習器就是要測試這個分類器之後輸入樣本xt時,是否還能得出正確的輸出值yt(例如,垃圾郵件過濾器是否能把以前未見過的郵件正確分類)。學習


機器學習=表示+評價+優化


假如你有一款應用,你以爲機器學習可以對其有所幫助。那麼擺在你面前的第一個大難題就是可供選擇的學習算法種類繁多,讓人眼花繚亂,到底選哪個呢?現有的算法就有數千種,而每一年又有數百種算法相關著做出版。在這樣繁多的算法中不致迷失的關鍵,就是明白算法的三大組成部分:


  • 表示:一個分類器必定要用計算機可以處理的形式化語言來表示。反之,選擇一個學習器的表示就等價於選擇一個可能具備學習能力的分類器集。這個集被稱爲學習器的假設空間(hypothesis space)。若是一個分類器沒有在假設空間內,那麼學習器就沒法學習。以後我會講一個相關問題,就是如何表示輸入值,換言之,就是要用什麼特徵。


  • 評價:評價函數(也叫作目標函數或者打分函數)用於區分分類器的好壞。爲了便於優化,經過算法生成用於內部的評價函數和優化分類器的外部評估函數並不相同。


  • 優化:最後,咱們須要一個方法來找到分數最高的分類器。優化技術對於提高學習器效率相當重要,若是評價函數得出了多個分類器,那麼就由優化來決定最終的去留。一般來講,新的學習器開始都用現成的優化器,以後會換成定製的優化器。附表爲三大成分的範例。



例如,K近鄰算法經過肯定K個最類似訓練樣本,將出現最多的類別定爲測試樣本的類別。基於超平面的算法造成每一個類別特徵的線性組合,並將得分最高的線性組合做爲預測結果。決策樹在每一個內部節點測試一個特徵,一個分支表明一個特徵值,枝葉是分類預測結果。


算法1 決策樹概括


算法1就是布爾域決策樹學習器的基本框架,使用了信息增益和貪婪搜索。信息增益(xj, y)是特徵xj和類別y之間的互信息。節點製造(x,c0,c1)得出測試特徵X 的節點值,把c0 做爲x = 0的子類, c1 做爲 x = 1的子類。固然,不是表格中一個成分的全部組合都有相贊成義。好比,離散表示一般用組合優化,而連續表示就用連續優化。然而,不少學習器既有離散成分也有連續成分,事實上,也許不久後在一些學習器上就會有全部可能的組合了!不少教材都是按照表示來安排的,這樣容易忽略其餘重要的部分。選擇這些沒什麼捷徑,但落實到機器學習項目上,有些部分會更重要一些。


泛化纔是關鍵


機器學習的根本目標就是訓練出超越樣本的泛化模型,這是由於不管咱們有多少數據,咱們都不太可能在測試中再次看到這些具體的樣本。(請注意,若是字典裏有100,000個單詞,垃圾郵件過濾器要就可能要描述2^100,000 多不一樣輸入)。訓練集表現得好很容易(只要記住全部的樣本就好了)。


機器學習初學者們廣泛犯的一個錯誤就是用訓練數據進行測試,結果很理想,就覺得本身成功了。當用該分類器測試新數據的時候,結果比隨機猜想好不了多少。因此,若是你僱別人來建立分類器,記得要本身私藏一點數據,他們把分類器給你的時候,本身測一下。


若是你被聘請去建立一個分類器,一開始就保留些數據,等到最後完成的時候用來測試,最後基於全部的數據結果,你就知道本身的分類器怎麼樣了。測試數據可能會以一些潛在方式對分類器形成污染,好比,若是咱們用測試數據調超參。(機器學習算法有大量的超參,超參的調整關乎成敗,因此要重點關注)。固然,留出數據會減小訓練量,但交叉驗證法能夠緩解這個問題:隨機把你的訓練數據分紅10個子集,每次選一個子集作訓練,該子集的並集留下,做爲測試集,測試結果的均值就可讓咱們知道參數集表現如何。


在機器學習早期,人們對於將訓練數據和測試數據分開的意義認識不深。這其中部分緣由是,若是學習器的表示有限(好比,超平面),那麼訓練集和測試集的偏差就不明顯。可是,隨着分類器靈活性增長(好比,決策樹),或者有大量特徵值的線性分類器,則訓練與測試集的隔離是絕對必要的。


把泛化做爲關鍵會給機器學習帶來一個有趣的結果。不像其餘優化問題,咱們無法訪問咱們想優化的函數!咱們只能用訓練錯誤代替測試錯誤,這樣會有很大的問題(以後會談到如何解決)。但好的一方面是,由於目標函數只是最終目標的代理,咱們不用徹底優化它:實際上,經過簡單的貪婪搜索獲得的局部優化可能會比全局最優更好。


光有數據還不夠


把泛化做爲關鍵還會帶來另外一個重要的後果:無論你有多少數據,光有這些數據是不夠的。好比從100萬個樣本中獲得了100個變量的布爾函數,還有2^100 – 10^6個樣本的類別是你不知道,那要怎麼把這些類別弄清楚呢?在沒有其餘信息的狀況下,不就只能靠扔硬幣隨機決定了。


早在200多年前,著名的哲學家大衛·休謨就提出人的認識是有限的,但直到今天,不少機器學習犯錯的根源就是沒有意識到這件事。每一個學習器必定要包含數據沒有提供的知識和假設,這樣才能將數據泛化。Wolpert在他著名的「沒有免費午飯」理論中肯定了這一律念。根據這個概念,隨機猜想會戰勝學習了全部函數的學習器。


這聽上去讓人很沮喪。那咱們怎樣才能學習呢?幸運的是,咱們在現實世界中學的函數並不是均勻的來自全部可能的數學函數!實際上,一些泛泛的假設——像平滑,樣本類似則類別類似,依賴性有限、複雜度有限等等——就足夠了,這就是機器學習可以成功的很大一部分緣由。和推理同樣,概括(學習器要作的)就是一個知識槓桿:輸入少許知識輸出大量知識。概括比推理更強大,輸入知識更少,卻獲得有用的結果。


固然,和全部的槓桿同樣,輸入的越多,獲得的就越多。選擇表示的關鍵是看哪一種知識更容易表達。好比,若是咱們懂得大量使樣本類似的知識,那麼例子導向方法是一個不錯的選擇。若是咱們有機率相關性的知識,那麼就用圖形模型。若是咱們知道每一個類別要用那種預測,那麼「若是……那麼……」規則會是個最好的選擇。好的學習器僅僅固化假設是不夠的,還要容許咱們可以明確表述它們,任意改變它們,而且可以自動把它們用於學習中(好比,用一階邏輯或者程序)。


綜上,在機器學習中須要知識沒什麼可驚訝的。機器學習不是魔術,不能無中生有,而是由少變多。編程須要咱們一切都從零作起。機器學習更像是種地,讓大天然來作大部分工做。農民把肥料和種子混在一塊兒長出莊稼。而學習器和數據知識合在一塊兒就長出了程序。


過擬合有好幾副面孔


要是咱們的知識和數據不足以讓咱們獲得一個好的分類器呢?那麼咱們極可能就臆造一個分類器,把數據中的各類隨機抖動都當真了。這個問題就叫作過擬合,是機器學習中常出現的問題。當你的學習器輸出的分類器在訓練集上準確率達100%,而測試集僅50%,而事實上二者的準確率都應爲75%,這個時候就發生了過擬合。


每一個瞭解機器學習的人都知道過擬合,但其表現方式不盡相同。發現過擬合的辦法之一就是把泛化偏差分解爲誤差和方差。誤差是學習器持續學習一種錯誤東西,而方差是指學習器作出的決斷與輸入信號無關,是隨機的。


圖1. 飛鏢的誤差和方差


如圖1所示,用飛鏢作類比。一個線性學習器誤差很高,由於兩個類別之間的交界不是超平面時,學習器就不能進行概括。決策樹不會發生這個問題,由於它們能夠表示任何布爾函數,可是它們會出現很高的方差,由一樣的現象引出的問題,在不一樣的數據集上訓練,決策樹模型會獲得徹底不一樣的結果,而理論上來講,它們應該是同樣的。


相同的問題也出如今優化方式的選擇上:在選擇優化算法時,束搜索比貪婪搜索有更低的偏置,但有更高的方差,由於它用到了更多的假設。所以,與咱們的直覺相反,真正優秀的分類器不必定要比差的分類器表現更好。


圖2. 那怕真分類器是規則集,樸素貝葉斯也比決策樹學習器要好


如圖2所示,即便真正的分類器是規則集,在訓練樣本不到1000個的時候,樸素貝葉斯分類器比決策樹分類器精確度更高。哪怕貝葉斯假設錯誤,界面是線性,準確率仍是很高!這樣的狀況在機器學習中很常見:較強的錯誤假設會比較弱的正確假設表現更好,這是由於後者須要更多的數據來避免過擬合。


交叉驗證能夠避免過擬合,好比,經過它來選擇合適大小的決策樹進行學習。但這也不是萬能的,若是咱們用來製造過多的參數選擇,交叉驗證就會自行開始過擬合。


除了交叉驗證以外,還有其餘各類方式來預防過擬合。


其中最經常使用的方法是在評價函數中加入正則項。這樣能夠對於過於複雜的模型進行處罰,於是系統更容易產生結構簡單的模型。


另一種方式是在加入新的結構以前經過卡方驗證來檢驗統計顯著性,以此來判斷加入此結構是否有助於提高效果。當數據不足時,這些方法很是有用。然而,若是有誰生成某種方法能夠徹底「解決」過擬合問題,你應當持懷疑態度。由於很容易就從過擬合變成欠擬合。想要同時作到避免過擬合和欠擬合須要設計出完美的分類器,然而根據「天下沒有免費的午飯」原理,在沒有足夠知識的前提下,沒有任何一個分類器可以在各類狀況下都表現最好。


一個關於過擬合的誤解是,認爲它是噪聲形成的,好比說訓練樣本的標籤標錯了。這確實會讓過擬合加劇,由於這會讓學習器產生出變換反覆的決策面,以知足這些樣本的標定。可是在沒有噪聲的狀況下, 也可能發生嚴重的過擬合。例如,假設咱們有一個布爾型分類器須要把訓練集中的正樣本找出來(換句話說,分類器以析取範式的方式,將訓練集中樣本的特徵結合起來)。這個分類器將訓練集中的樣本正確分類,而將測試集中的正樣本所有錯誤分類,不管訓練集中有沒有噪聲。


多重假設檢驗與過擬合十分相關。標準的統計檢驗一次只能檢驗一種假設,而學習器能夠同時檢驗百萬種。結果是,看上去很重要的假設也許實際上並無多重要。例如,若是有一家信託基金公司連續十年業績領先於業內,你會以爲它很厲害,可是若是仔細一想,若是每一年任何一家公司都會有50%的機率領先,那麼它就有可能很幸運地連續十年領先。這個問題能夠經過加入一系列的假設,作顯著性測試來判斷,但一樣會帶來欠擬合的問題。一種更加有效的方式是控制錯誤接受的比例,也稱爲錯誤發現率。


高維度直覺失誤


除了過擬合以外,機器學習最大的問題就是維度災難了,這個說法是1961年Bellman提出來的,不少算法在低維度表現不錯,可是一旦輸入值爲高維度就應付不了了。但在機器學習中,這個說法還有更多含義。隨着樣本的維度(特徵值)增長,泛化的難度也按指數遞增,由於大小固定的訓練集在輸入空間只佔不多一部分。那怕1萬億個樣本,維度爲100的訓練集也只佔了輸入空間10^-18的部分。這就是爲何機器學習如此必要而複雜。


更嚴重的是,機器學習算法依賴(顯式或者隱式)的類似性推理在高維度會崩潰。想象一個K近鄰分類器把漢明距離做爲類似性度量,假設類別就只是x1 ∧ x2,沒有其餘特徵,這很簡單。但若是還有98個不相關的特徵x3,..., x100,那麼它們的噪音就會淹沒x1和x2之間的信號,最近鄰分類會有效地作出隨機預測。


更使人困擾的是,若是100個特徵都相關,那麼近鄰算法也會出現問題,這是由於在高維度全部樣本都很類似。假如,全部的樣本都分佈在規則網格內,有個測試樣本Xt,若是網格是d維度,Xt的2d鄰近樣本和它距離都相同,因此隨着維度增長,愈來愈多的樣本成爲了xt的近鄰樣本,近鄰樣本的選擇就變得隨機了。


這僅僅是高維度帶來的一個問題:咱們的本能來自三維世界,無法應用於高維度世界。在高維度世界,多元高斯分佈大部分的質量不是靠近均值,而是在其周圍距離不斷增長的「殼」裏。高維度的橘子的質量主要就集中在果皮上,而不是果肉裏。若是一個數量恆定的樣本均勻地分佈在一個高維度超立方體中,大部分樣本應該靠近超立方體的表面而不是近鄰。若是咱們把超球體刻進超立方體中來近似超球體,在高維度中,幾乎超立方體全部的量都在超球體的外面。這對機器學習來講是個壞消息,由於一種類別的形態經常靠其餘形態來近似。


在一維和二維建分類器很容易,咱們經過肉眼觀察就能夠在不一樣類別樣本之間找到合理界面。(若是人能看到高維度那機器學習也沒什麼必要了。)可是一到高維度,咱們就很難理解發生了什麼。這也給設計分類器帶來了難度。有人會以爲特徵越多越好,大不了就是沒什麼新信息嘛。


但實際上,由於維度災難,弊會大於利。不過好在有種效應叫作「非均勻性祝福」會部分消除這種詛咒。在大部分應用中,樣本不是均勻分佈在示例空間內,而是集中或者靠近低維流形。好比,K近鄰算法特別適用於手寫數字識別,那怕數字圖像每像素上就有一個維度。由於數字圖像的空間比圖像空間小不少。學習器能夠隱式地利用這種較低的有效維度,或算法來顯式地減小使用的維度(好比,Tenenbaum)。


理論保證不必定有用


機器學習論文裏盡是各類理論保證,最多見的一種就是限制樣本數量來保證泛化成功。你怎麼看呢?首先,它們有多是真的。概括通常來講和推理是對立的:在推理中,你能夠保證全部結論是正確的,但在概括就正好相反。這是幾個世紀以來的一個老觀念了。近十多年來的一個重大進步就是咱們意識到能夠保證概括的結果,尤爲是若是咱們想解決機率保證。


論證方式很簡單。若是真錯誤率大於ε,咱們就認爲這是個壞分類器。因此壞分類器的可能性是和n 隨機一致,獨立訓練樣本小於(1 − ε)n。把b做爲壞分類器在學習器假設空間H中的數量。經過一致限,使得它們中至少一個的可能性持續低於b(1 − ε)n。假設學習器老是會獲得一個一致的分類器,而壞分類器出現的機率就小於|H|(1 − ε)n 而咱們默認b ≤ |H|。因此若是咱們但願可能性小於δ,讓n > ln(δ/|H|)/ ln(1 − ε) ≥ 1/ε (ln |H| + ln 1/δ)就夠了。


但不幸的是,咱們對這種保證要持保留態度,由於經過這種方式獲得的邊界會很是鬆散。上述邊界一個很是棒的特徵就是樣本需求數量以|H| 和 1/δ的對數增加。大部分假設空間都是按多個d特徵值呈雙指數的,這樣咱們就還須要一些d的指數樣本。例如,有一個布爾變量的布爾函數。若是這裏有e個不一樣樣本,那麼就有2e不一樣的函數。那麼有2d 個不一樣的函數,那麼函數總量就爲22d。就算假設空間只有指數的,邊界仍是很是鬆散,由於一致限很悲觀。例如,有100個布爾特徵,而假設空間是決策樹,有10層,爲了保證上述邊界δ = ε = 1%,咱們須要50萬個樣本。但實際上只要一小部分就能夠知足學習了。


另外,咱們還要警戒這樣的邊界意味着什麼。它不是說,若是你的學習器獲得一個與訓練集一致的假設,就意味着假設成功,而是說明訓練集夠大的話,你的學習器要麼獲得一個好的假設,要麼就是無法找到一個一致的假設。這個邊界也沒有告訴咱們怎麼選擇一個好的假設空間,只告訴了咱們,若是一個假設空間包含了真分類器,那麼學習器輸出壞分類器的機率就會隨訓練集的減小而降低。若是咱們壓縮假設空間,那麼邊界會提升,前提是其包含的真分類器也壓縮了(有些狀況真分類器不在假設空間內,但該理論一樣適用。)


另一種理論保證是漸近:給無窮的數據,保證學習器輸出正確的分類器。這是一種確認,但可能會致使咱們輕率地下決定去選擇某一種分類器。事實上,咱們不多會遇到漸近區。是由於以前我所討論的誤差-方差權衡問題,若是學習器A 在無限數據上比B 好,那麼B在有限數據上必定比A好。


理論保證不是實際操做的準則,而是算法設計理解和驅動的源泉


就這方面來看,理論保證仍是頗有用的;實際上,理論和實踐之間密切的相互做用是機器學習這些年能取得巨大成就的主要緣由。但機器學習是一個複雜的現象,不能由於學習器有了理論證實,在現實中運做,就說着前者是後者的緣由。


特徵工程是關鍵


有的機器學習項目成功了,有的沒有,是什麼緣由呢?最重要的緣由就是其使用的特徵。若是你有多個獨立特徵且每一個都和類別相關,那麼你的機器學習就很容易成功。另外一方面,若是類別都是複雜的特徵函數,那麼就不容易學習。


一般,原始數據不是很好學習,可是你能夠從數據中建構特徵。這經常是機器學習項目中最費功夫的地方,也是最有趣的部分,在這部分直覺、創造力、「歪門邪道」和技術的東西一樣重要。


初學者每每會很驚訝,在一個機器學習項目中,真正用在作機器學習這部分的時間不多,大部分都花在了數據收集、整合、清理和預處理,以及反覆的特徵設計。另外,機器學習不是建完數據庫,運行學習器,一次就搞定的事情,而是要不斷地運行學習器,分析結果,調整數據或者學習器,而後反覆的一個迭代的過程。學習一般是這裏面花時間最少的一部分。特徵工程很複雜由於它是域特定的,而學習器則很大程度上是通用的。然而,這二者之間沒有沒有明顯分界。這也就是爲何好的學習器是和知識相結合的。


固然,機器學習的聖盃之一就是使愈來愈多的特徵工程過程自動化。如今經常使用的一種方法就是自動生成大量的候選特徵,而後經過信息增益來選擇最好的。可是要記住單獨特徵互相也許無關,但合併在一塊兒就會關係了。例如,若是這個分類是輸入特徵爲k的XOR,每一個特徵都沒有類別相關信息,另外一方面,運行大量特徵的學習器來尋找哪些在合併時有用會花費大量的時間,致使過擬合。因此,說到底在特徵工程上,還得靠人的能力。


數據多比算法聰明更好


假設你建了最好的特徵集,可是你拿到的分類器並不徹底準確。你要怎麼辦呢?


有兩種選擇:設計一個更好的算法,或者收集更多的數據(更多樣本、更多原始特徵,受制於高維詛咒)機器學習研究者經常更關心前者,但實際上收集數據這個辦法更容易成功。根據經驗,一個通常的算法,若是數據多,會優於數據較少的高深算法。(畢竟,機器學習就是讓數據來幹活的。)


但這就會帶來另外一個問題:可擴展性


在大部分電腦科學中,兩大受限資源是時間和內存。而在機器學習中,還有第三個:訓練數據。不一樣時期的技術瓶頸就在這三大限制中變換。20世紀80年代,數據是瓶頸,而今天,是時間。大量的數據是有的,可是沒有足夠的時間去處理。這就會致使一個悖論:理論上數據越多意味着能夠學習更復雜的分類器,但實際上,最後仍是用的更簡單的分類器,由於複雜分類器學習時間更長。一個解決方法是想出更快的方式來學習複雜的分類器,在這方面也的確有顯著的成果(好比,Hulten and Domingos)。


使用高深的算法沒有預期那麼理想的緣由是,大部分算法都差很少。若是你認爲規則集神經網不一樣的話,你可能會對此感到很驚訝。但實際上,命題規則很容易編爲神經網絡,其餘表示之間也有相似關係。全部學習器都是把近鄰樣本放進一個類別,而關鍵是什麼叫「近鄰」。在數據分佈不均時,學習器儘管產生不一樣界面,卻依然能夠作出相同預測(訓練樣本多的,一般測試樣本也會大量出現)。這也能解釋爲何好的學習器不穩定,但仍是很準確。圖3爲二維展現,在高維度效果越明顯。


圖3所示,不一樣邊界會產生相同預測(+和-是兩個類別的訓練樣本)


因此規則就是首先使用簡單的學習器(好比,先用貝葉斯而非羅輯迴歸,先用K近鄰算法而不是支持向量機)。越複雜的學習器越吸引人,但用起來卻很難,由於它們須要調節的按鈕太多才能獲得想要的結果,也由於它們的內部不夠透明。


學習器能夠分紅兩大類:一是表示有固定大小的,好比線性分類器,還有表示隨數據增長的,好比決策樹(後者有時被稱作非參數學習器。但很不幸,它們經常比參數學習器學的參數更多。)大小固定的學習器只能從大量數據中獲益(注意一下圖2中貝葉斯算法的漸近線約在70%左右)。


大小變化的學習器理論上只要數據足夠,能夠學習任何函數,但實際上不行,由於算法有限(好比,貪婪搜索會陷入局部最優)或者計算開銷不足。並且,由於高維詛咒,現有數據可能不夠。基於這些緣由,高深算法—充分利用數據和計算資源的—最後經常會成功。設計學習器和學習分類器之間沒有太大差異,任何知識能夠在編碼進學習器中或從數據中學習。因此機器學習項目的學習器設計最後成爲最重要的部分,從業者們須要具有必定的專業知識。


到最後,最大的瓶頸再也不是數據或者CPU週期,而是。不少論文中,學習器基本都在精準度和計算預算方面作比較。人爲努力和洞察力很難測量,但每每更重要。這會幫助學習器建立人們能夠理解的輸出(好比,規則集)。充分利用機器學習的機構已經準備好基礎設施使用各類學習器、數據資源和簡單有效的學習問題來進行實驗,而且在那些機構中機器學習專家和應用領域專家合做密切。


學習更多的模型


在機器學習的早期,每一個人都有本身喜歡的學習器,相信它的優越性。咱們花了大量的時間來嘗試其變體,而後選擇最好的一個。後來系統實證比較發現學習器的好壞是隨應用不一樣而改變的,因此搭載不一樣學習器的系統就開始出現了。人們就開始努力嘗試多個學習器的變體,而後仍是選擇最好的那個。但後來研究者們發現,若是把多個學習器合在一塊兒,結果會更好,使用者也不費什麼功夫。


如今建立這樣的集成模型已經成爲一種標準了。最簡單的一種技術,叫作bagging.咱們經過重採樣的方式生成隨機訓練集,每一個訓練集學習一個分類器,最後經過投票合成結果。這樣的方式能成功的緣由在於其大大減小方差的同時,只稍提升了誤差。在boosting中,訓練樣本有權重,而這些權重各不相同,因此每一個新的分類器都會關注以前分類器分錯的樣本。在stacking中,獨立分類器輸出變成了「更高級」學習器的輸入,而且stacking在想辦法進行最優組合.

現存的技術有不少,集成越作越大已經成爲了一種趨勢。


在Netflix prize大賽上,來自全世界的團隊互相競爭,建立最好的視頻推薦系統(http://netflixprize.com)。隨着比賽的進程,團隊發現經過合併其餘團隊的學習器能夠獲得最好的結果,而後團隊之間互相合並,愈來愈大。冠、亞軍都是上百個學習器的集成。固然,咱們在將來還會看到更大的集成。


模型集合不該和貝葉斯模型平均(BMA)—理論上最優的學習方法—相混淆。在BMA中,新樣本的預測是經過在假設空間中取全部分類器各個預測的平均值,由分類器解釋訓練數據的表現,和咱們對其的期待來權衡。除了表面類似,其實集成和BMA很是不一樣。集成改變了假設空間(好比,從單個決策樹變成了全部決策樹的線性集合),能夠呈現出各類形式。BMA根據固定公式將權重分配給原始空間的假設。BMA權重和bagging或者boosting產生的權重徹底不一樣:後者很是平均,而前者很是傾斜,直到某單一最高權重分類器占主導地位使得BMA選擇它。這樣產生的結果就是,集成模型是機器學習包中關鍵的一部分,而BMA卻沒人選擇。


簡單不意味着準確


奧卡姆剃刀原理說:如無必要,勿增實體。在機器學習中,這經常意味着,若是兩個分類器有一樣的訓練錯誤,簡單的那個訓練器測試錯誤率會更低。這種說法經常在文學中很常見,但實際上有不少反例,「免費午飯」定理就能夠對此進行反駁。


咱們在前面就看到了一個反例:模型集合。即便訓練偏差達到0以後,經過增長分類器也能夠提高加強集成的泛化偏差。另外一個反例就是支持向量機,能夠有效地擁有無限量的參數而不會過分擬合。相反,函數符號(sin(ax))能夠區分任意大的,任意標記的x軸上的點,即便它只有一個參數。所以,和直覺相反,模型的參數量和過分擬合之間沒有必然聯繫。


更復雜的視圖反而使複雜度與假設空間的大小相等,由於較小的空間容許用更短的代碼表示假設。理論保證部分的界限可能被視爲代表較短的假設泛化得更好。這能夠經過將更短的代碼分配給咱們有一些先驗偏好的空間中的假設來進一步改進。可是將其視爲在準確性與簡單性之間權衡的「證實」是循環推理:咱們假設咱們更傾向於設計簡單,若是它們是準確的,那是由於咱們的偏好是準確的,而不是由於咱們選擇的表示中的假設是「簡單」的。


這還會產生的另外一個複雜狀況是沒有學習器會完全搜索假設空間。假設空間更大的學習器如較少的假設比從較小空間中嘗試更多假設的學習器過擬合的可能性低。正如Pearl所指出,真正影響訓練和測試偏差的是選擇假設的過程,而假設空間的大小隻是對此的一個粗略指導。Domingos調查了奧卡姆剃刀在機器學習問題上的主要論點和證據。結論是,更簡單的假設應該是首選的,由於簡單自己就是一種美德,而不是由於與準確性的假設聯繫。這也多是奧卡姆的本意。


可表示不意味着可學習


基本上全部學習器的表示都和「全部函數均可以被表示,或者以無限接近的方式近似表示。」這樣的理論相關。爲了證實這個定理,表示的擁護者們經常會忽視其餘東西。然而,函數能夠被表示並不意味着能夠被學習。好比,決策樹學習器不能學習超過訓練集的葉子節點。


在連續空間中,即便用固定基元集表示那怕最簡單的函數也經常須要無窮的部分。若是假設空間有評價函數的局部最優,實際上也經常出現,那麼即便能夠被表示,學習器也許也找不到真正的函數。有了有限的數據、時間和內存,標準學習器只能學習全部函數的小部分子集,而這些子集對錶示不一樣的學習器是不一樣的。因此關鍵問題不是「能不能被表示?」由於答案經常不重要,而是「能不能被學習?」這個問題值得去嘗試不一樣的學習器(或者合併它們)。


對於某些函數,有些表示在會比其餘函數指數上更緊湊。結果就是,它們能夠須要成指數減小的數據來學習函數。有些學習器是經過簡單基本函數的線性合成造成的。好比,支持向量機圍繞一些訓練樣本(支持向量)造成內核合成。經過這種方式造成n位的奇偶校驗性須要2n的基本函數,可是使用一個表示須要多層(就是在輸入和輸出之間有好幾步),奇偶校驗性能夠編碼在線性大小的分類器裏。尋找這種深度表示是如今機器學習的重要前沿。


相關並不是因果


相關性不是因果性這個觀點可能經常被提到,不太值得在這裏贅述。可是,只能用來學習相關性的學習器產生的結果經常被用來表示因果關係,這樣錯了嗎?若是錯了,爲何人們這麼作呢?


學習預測模型就是用它們做爲行動導向。若是咱們發現啤酒和尿布經常是一併購買,那麼也許把啤酒放在尿布旁邊會增長銷量。(這是數據挖掘世界的一個著名例子。)但沒有實驗,也很難斷定是否正確。機器學習經常用來觀測數據,預測變量經常不受學習器的控制,而實驗數據受控。有些學習算法能夠從觀察數據中提取信息,可是這樣的應用仍是很是有限。另外一方面,相關性是潛在因果聯繫的標誌,因此咱們把相關性做爲進一步調查的導向(好比,嘗試想弄清楚因果鏈是什麼)。


不少研究者認爲因果性是一種虛設。例如,在物理定律中就沒有因果概念。因果性是否是真的存在是一個很深奧的哲學問題,眼下也沒有答案。但在機器學習上仍是有兩點很實在,首先,無論咱們是否是把它們稱做「因果」,咱們是要爲行爲作預測,而不是僅僅將觀測變量相聯繫。第二,若是你能夠得到實驗數據(好比,隨機將遊客分到了一個網站的不一樣版本中),那麼要必定不遺餘力。


結論


和全部的學科同樣,機器學習很大量的「內功心法」難以得到.可是對成功很重要。本文總結了一些突出項目。固然,這也只是傳統機器學習的補充。點擊http://www. cs.washington.edu/homes/pedrod/class觀看完整的在線機器學習課程。在http://www.videolectures.net 你會找到機器學習課程的寶藏,還有,Weka是一個很棒的開源機器學習包。


最後,祝你學的開心!

相關文章
相關標籤/搜索