機器學習的5種“兵法"
在研究機器學習中,理論在其整個自上而下方法中試用于哪里呢?
在傳統的機器學習教學中,豐富的數學理論知識對于理解機器學習是至關重要的,我的機器學習教學方法通常是教你如何端對端解決問題以及傳輸結構。
所以此方法哪里要用到理論知識了呢?
在此帖中你將了解我們是如何理解機器學習中的“理論”一詞。提示:全部與算法有關。
你會發現一旦你可以熟練解決問題以及傳輸結果后,你就欲罷不能地想要對機器學習有更深入的理解以及獲得更好的結果,沒人能拉得住你。
最后,你會發現可以通過應用標準數據集練習機器學習的5個技巧,從而進一步加深你對機器學習算法的理解。
理論學習----放在最后而不是第一
對開發者的機器學習教學法很麻煩。
教學方法是自下而上的, 它對于一個僅想通過運用機器學習工具來解決問題,而非對此領域進行專門研究的開發者來說確實很狗屎。傳統的學習方法要求你在學習算法理論前有諸如線性代數、概率學及統計學等預備數學知識,如果你曾經歷如何端對端解決問題然后傳輸一個有效、可靠且準確的預測模型的工作執行或討論,那你是很幸運的。
我來教你一個自上而下的學習機器學習的方法。這種方法首先是
學習端對端解決問題的系統性處理
繪制一張“最佳組合”機器學習工具及平臺的步驟圖
在測試數據庫里進行定向實踐。
你可以在標題為“編程員的機器學習:從開發者到機器學習實踐者的跳躍”一貼中了解更多自上而下機器學習教學的方法。
所以在這個過程中,理論到底在哪里呢?
如果教學法倒置,后學理論,但是我們所說的理論到底是什么理論,在測試數據庫實踐中到底是怎樣學習那個理論的呢?
理論其實都是算法
機器學習是一個理論密集型的領域。
他之所以密集是因為它有著從數學角度描述及解釋概念的傳統。
這招很管用,因為數學描述是非常簡潔明了的,這些數學描述也通過與專業領域技術相結合來做分析(例如對一個程序概率性的理解)。
很多這些次要的數學技巧與機器學習算法是捆綁在一起的。對于一些想要通過粗略了解機器學習方法來配置及應用它的人來說,這確實太難搞定了。
如果你沒有能解析及理解算法表述的知識基礎的話,學習機器學習真的是很令人沮喪。沮喪感是來自諸如計算機科學的領域,在這些領域,對算法的描述隨處可見,但其描述意在快速理解(如桌面檢查)及其執行。
例如,我們在學習及學習使用哈希表是從來不深入追究哈希方程的,但是我們知道哈希方程是什么以及去哪里可以了解哈希方程的細節和書寫。為什么機器學習就不能這樣呢?
機器學習領域中的理論大部分與機器學習算法有關,如果你去問一個初學者為何這些理論令人如此沮喪,他會告訴你是因為你必須得理解并且懂得使用一些特定的機器算法。
這里,算法不僅是一個預測模型的程序,這里的算法也意味著選擇特征,設計新功能,轉換數據以及估算未見數據的模型準確度。
因此,所謂后學理論, 其實是說最后學習機器學習算法。
深入理論的沖動
總的來說,我建議對知名機器學習數據庫作定向練習。
這是因為知名機器學習數據,如UCI機器學習倉庫,可操作性更好,它們體積小,因此不會占用很多內存,并且可以直接在工作站上處理。它們還經過了充分地研究及學習,因此你可以有一個比較的基準值。
你可以在標題為“用UCI機器學習庫小內存數據練習機器學習”一貼中了解更多關于機器學習數據庫定向練習的信息。
理解機器學習算法是過程中的一部分,原因是你會在為得出標準機器學習算法結果中遇到限制。你會想知道如何能在已有算法中獲得更多,或怎樣得到最優解,亦或是其作用原理。
要做到這些,你必須知道更多,好奇心也會驅動你去學習機器學習算法, 為得到一個更好的結果,你會迫使自己去拼湊一個對算法的理解。
我們已經看到很多背景各異的年輕開發者為了提高他自己的作品,而去學習開源項目代碼、課本甚至研究論文。要做一個更好更全能的編程者,他們必須去做這些。
如果你想成功并且有動力取得成功,你是一定會去學習算法理論的。
理解機器學習的5種“兵法"
到了深入鉆研機器學習算法以作為目標來實踐的時候了,此時有很多技術和模板你可以用來簡化學習的過程。
這一節你會發現五大技巧幫你快速理解機器學習算法理論。
1. 創建機器學習算法列表
剛開始的時候,你會覺得被現有的大量算法壓得喘不過氣來。
即使只是測試算法,你也許仍會不確定要將哪些算法加入到你的菜單里。(提示:盡量多樣化)。
作為一個菜鳥,一個很棒的技巧是持續跟蹤你所學到的算法。這些列表可以簡單到包括算法名稱,并隨著你的興趣和好奇心而增加難度。
抓住算法適用問題的細節(分類或是回歸)、相關算法、和算法分類(決策樹,核等等),當你看到新的算法名稱就添加到你的列表里,當開始解決一個新問題的時候,嘗試下你還沒用過的算法,在你用過的算法旁邊進行標注,諸如此類。
把算法名稱記錄在冊可以增加你對算法的駕馭能力,這個簡單到令人乍舌的戰術可以使你不會被過多信息壓垮。以下列出了簡單的算法列表可以事半功倍、減少挫敗的一些例子:
來嘗試新的不同類型的問題的算法思路(時間序列,評分系統等等)。
那些你可以研究以便學習如何應用的算法。
按類別對算法分類,諸如樹,核等等。
避免只專注于最喜歡的一類問題,現在就著手開始創建算法列表吧!
閱讀博文“Take Control By CreatingTargeted Lists of Machine Learning Algorithms”來獲取這方面的更多信息。
2. 研究機器學習算法
當你希望更深入了解一個算法的時候,你就需要開始研究了。你將會對研究一個算法感興趣的重要原因是可以學習如何配置算法以及了解它的工作原理。
研究不僅僅是學術界的專利,一些簡單的技巧可以讓你在收集一個給定的機器學習算法的信息上走的更遠。
關鍵在于信息的來源,下面列出了一個你可以作為研究算法的參考文獻的各種類型來源。
權威來源,如課本,講義,幻燈片和綜述文獻。
開創性的來源,如對算法進行初次描述的論文和報刊文章。
描述最前沿推廣和實驗的第一手資料。
啟發式來源,如機器學習競賽中出現的文章或者在問答網站的帖子以及會議論文。
實現代碼的資源如用于工具和庫的開放源代碼,博客文章和技術報告。
你并不需要成為一個博士研究人員或者機器學習算法的專家。
針對一種你希望學習的機器學習算法,耐下心來挑選多樣的來源作為參考。著眼于你可以應用或者理解的具體細節,把其他部分暫時懸疑。
關于研究機器學習的更多信息,請參閱博文“How to Research a Machine Learning Algorithm”
3. 創造你自己的算法描述
在你的研究中,將會發現機器學習算法的描述會不完備或者不統一。
你可以用的一個方法是把你自己的簡短算法描述整合起來,這是另一個非常簡單而行之有效的策略。
你可以設計一個標準的算法描述模板,僅包含能幫助你最大化了解該算法的細節,例如算法應用探討、偽代碼列表、參數范圍和資源列表。
然后你可以用相同的算法描述模板來歸納許多關鍵算法,并開始逐步建立你自己的小型算法百科全書作為之后做項目的參考。
以下是你可以用在算法描述模板中的問題:
算法的標準縮寫是什么?
該算法的目標或者需要解決的問題是什么?
該算法的偽代碼或者算法流程圖是怎樣的?
應用該算法的思路或者要點是什么?
更深入學習算法的有用的資源是什么?
你將會感慨這些描述的威力。例如,我用這種方法撰寫了一本靈感來源于自然的算法描述書籍,多年之后我仍然時常參考此書。
希望了解如何創建有效的算法描述模板,請參閱“How to Learn a Machine Learning Algorithm”.
關于我利用標準算法模板建立的算法描述書籍,請參閱“Clever Algorithms: Nature-Inspired Programming Recipes”.
4. 研究算法行為
機器學習的算法是一套復雜的運算系統,通過研究它們在真實數據庫上的行為往往是了解算法的有效方法。
通過設計實驗, 利用一個小的數據庫試著運行算法,能有效發現算法的運行效果、短處和參數設置方法,這樣在解決別的問題上也往往會取得滿意結果。
你可以按照以下幾個簡單的步驟來研究機器學習的算法:
1) 選擇一個你想了解的算法(如:隨機森林Random Forests)
2) 選定一個你想要了解的有關該算法的問題(如:隨機樹的數量對最后結果的影響)
3) 設計解決問題的試驗(如:在幾個不同的二分類問題上試驗不同數量的隨機樹,并繪制數的數量與分類精度的關系圖)
4) 執行試驗并寫出結果,以便日后使用
5) 不斷重復這些步驟
這是實用性的機器學習的優勢之一,你通過自己的簡單研究即得到出人意料的結果。
5. 執行機器學習算法
沒有比執行算法本身更好的方式去了解機器學習的算法了。
在從頭開始執行算法過程中,你將碰到各種算法問題相關的一些微觀決策。你將決定哪些可以通過經驗法則來完成,哪些需要將參數一一暴露給用戶。
以下是從頭開始重復執行機器學習算法的步驟:
1) 選擇一種程序語言,越熟悉越好。
2) 選擇一種算法執行,從簡單的開始(可以參考下面的清單)。
3) 選擇一個課題去測試你的執行方法,2D數據適合可視化(即使是用Excel)
4) 研究這個算法并利用多種信息來源(如:閱讀教程、論文、其他執行方式)
5) 對算法進行單元測試,以確認你對算法的理解,并驗證你的執行方式 。
從小處開始并逐漸建立自信。有三種機器學習算法適合你從頭開始嘗試執行:
梯度下降法的線性回歸(LinearRegression using Gradient Descent)
k近鄰算法(k-Nearest Neighbor)
貝葉斯分類器(Naive Bayes)
理論不只是給數學家使用的
機器學習不只屬于數學精英。即使不深入學習多變量統計,你也能知道機器學習算法如何運行。
你不需要對數學很在行。
如前文所言,你可以從算法單開始并逐步深入了解算法研究,算法描述和算法行為。
不需要太深入理解數學也一樣大有可為。
你不需要是一個學術專家。
研究不只屬于學術領域。每個人都可以通過閱讀書籍和文摘完善他們對某一主題的理解,一個具體的機器學習算法就是其一。
即使需要通過學習來了解這些復雜的運算,一旦你嘗試成為“科學家”并開始你的算法試驗,你將獲得很大的突破。你將發現許多未經記錄的趣談怪事。
行動起來!
從以下的清單中選一個來開始吧。從今天開始,now!
列一個清單,包含10種用于分類的機器語言
找有關隨機森林算法(Random Forests)的5本書
用自己的算法描述模板做一個5頁的PPT來展示貝葉斯分類器(NaiveBayes)
打開Weka了解”k”參數是怎樣影響k近鄰算法(k-NearestNeighbor) 的準確率的
利用隨機的梯度下降法運行線性回歸