應用機器學習是有挑戰性的。
在機器學習領域,你必須要在沒有正确答案的問題上做出很多決定!例如:
· 用什麼架構?
· 用什麼資料作為輸入,要輸出什麼資料?
· 用什麼算法?
· 用什麼算法配置?
這些問題對于初學者來說是一個嚴峻的挑戰。
讀完本文之後,你将了解:
· 如何形成一個明确的學習問題。
· 當給你的問題設計一個學習系統的時候,有四個決策點需要考慮。
· 你可以用三個決策來明确地來應對在實踐中設計學習系統的難題。
本文分成了如下六個部分:
1、适定的學習問題
2、選擇訓練資料
3、選擇目标函數
4、選擇目标函數的表達形式
5、選擇學習算法
6、如何設計學習系統
我們可以将應用機器學習領域中的一般學習任務定義為一個程式,它可以根據特定的性能測量從一些任務中學習經驗。
Tom Mitchell在他1997年《Machine Learning》一書中做了清晰的闡述:
一個計算機程式是從某一類任務T和性能測量結果P中學習經驗E的,如果它在T中的任務表現為P,則用經驗E來改進。
我們以這個作為對那些我們可能感興趣的學習任務類型的一般定義,例如預測模組化等應用機器學習。Tom列舉了幾個例子來說明這一點,如下所示:
· 學習識别口語
· 學習無人駕駛
· 學習天體結構分類
· 學習世界級的雙陸棋
我們用上面的定義來定義自己的預測模組化問題。一旦定義了,任務就會變成設計一個學習系統來應對。
設計一個學習系統,如:一個機器學習應用,涉及了四個設計選擇:
1、選擇訓練資料
2、選擇目标函數
3、選擇表達形式
4、選擇學習算法
對于一個給定的問題并提供了無限的資源,可能有最好的一組選擇,但是我們沒有無限的時間來計算資源,以及領域内的或者是學習系統的知識。
是以,盡管我們能準備一個适定的學習問題的描述,設計這個最有可能的學習系統還是很困難的。我們最好就是用知識,技巧,和可用的資源通過設計的選擇來進行我們的工作。
讓我們更詳細地看一下每一個設計選擇
你必須選擇學習系統将要用到的資料作為學習經驗。
這是過去觀測到的資料
現有的訓練經驗類型對研究人員的成敗有着重大影響。
對于學習問題,你必須經常收集需要的資料。
這個意思是:
· 清除檔案
· 查詢資料
· 執行檔案
· 整理不同資源
· 合并實體
你需要一次性擷取到所有的資料,并且變成一個标準化的形式,這樣一個觀測就代表了一個結果是可用的實體。
下一步,你必須選擇一個學習問題的架構
機器學習實際上是一個學習從輸入(X)到輸出(y)的映射函數(f)的問題
Y=f(x)
這個函數能被用在将來預測最可能輸出結果的新資料上。
學習系統的目标是準備一個函數,提供了可用資源,将輸入映射到輸出。這是一個稱為函數近似的問題。這個結果将是一個近似值,意味着有誤差。我們将盡力減小這個誤差,但是一些誤差将一直在資料中存在并進行幹擾。
這一步是關于精确地選擇輸入什麼資料到這個函數,例如:輸入特征或者輸入變量還有預測什麼,例如:輸出變量。
我經常将此稱為學習問題的架構,選擇輸入和輸出本質上即是選擇目标函數的類型,就是我們将尋求相近的函數。
下一步,你必須選擇你希望用來映射函數的表達形式
考慮這個作為你希望能用來做預測的最終模型的類型。你必須選擇這個模型的形式,選擇是否你喜歡的資料結構。
現在我們已經詳述了這個理想的目标函數V,必須選擇一個表達形式,學習程式将用來描述将要學習的函數V。
例如:
· 也許你的項目需要一個易于了解并向利益相關方解釋的決策樹。
· 也許你的利益相關方傾向于一個線性模型,統計人員能很容易地解釋。
· 也許你的利益相關方不關心除了模型表現以外的任何事,是以所有的模型表達形式都是可以争取的。
表示的選擇将限制學習算法的類型,您可以使用這些算法來學習映射函數。
最後,你必須選擇學習算法,該學習算法執行輸入輸出資料并且學習你傾向的表達式的。
如果在表達形式的選擇上面沒有什麼限制,那麼經常是這樣,然後你可能評價一系列不同的算法和表達式。
如果在表達形式的選擇上面有一些嚴格的限制,例如:一個權重和線性模型或者一個決策樹,那麼算法的選擇将被限于能操作特定表達形式的那些。
算法的選擇可以利用自身的限制,例如像資料标準化那樣的特定資料的準備轉換。
開發一個學習系統是有挑戰性的。
從這個方式上沒人能告訴你每個決定的最佳答案;對于你指定的學習問題,最好的答案是未知的。
Mitchell描述了在設計一個下棋學習系統所做的選擇的時候,幫助澄清了這一點。
在設計一個下棋學習系統時的選擇描述。
來自“Machine Learning”, 1997。
Mitchell說:
在許多方法上,這些設計選擇已經限制了學習任務。我們已經限定了能被用來擷取到一個線性評估函數的知識類型。除此之外,我們還限定了評估函數依賴于僅僅提供的這六個特定的闆特征(board features)。如果這個正确的目标函數V能真正的被這些特殊特征的線性組合所表示,那麼我們的程式會有一個好的機會來學習它。如果相反,那麼我們希望最好是它将學習一個比較理想的近似值,因為一個程式肯定永遠也學不到它至少不能表示的東西。
通常地,你不能通過分析的方法計算出這些選擇的答案,例如用什麼資料,用什麼算法,用什麼算法配置。
這裡是你能在實踐中用到的三個政策:
1、<b>複制</b>:看文獻或者向專家學習與你的問題相同或相近的問題,并且複制學習系統的設計。很可能你不是第一個緻力于給定類型問題的人。在最壞的情況下,複制的設計給你的設計提供了一個起點。
2、<b>查找</b>:在每個決策點列出可用的選項,并且對每一個進行經驗評估,看看哪個對你的具體資料最有效。這可能是在應用機器學習中最健壯和最實用的成果
3、<b>設計</b>:通過上面的複制和查找方法,在完成了許多項目之後,你将為了如何設計及其學習系統而形成了一個直覺。
開發學習系統不是一個科學而是一個工程。
開發新的機器學習算法和描述它們如何工作與為什麼工作是一門科學,并且在開發學習系統時,這通常不是必需的。
開發一個學習系統與開發軟體非常的相似。你必須結合過去工作中設計的成果副本,能顯示出有用的那些原型,還有為了得到最好的結果而開發一個新系統的時候的設計經驗。
<b>推薦閱讀</b><b>閱讀</b><b>:</b>
文章原标題《Why Applied Machine Learning Is Hard》
作者: Jason Brownlee
譯者:奧特曼,審校:袁虎。