如何開發機器學習模型?我們記錄下了全過程(機器學習入門第三篇)
在之前的兩篇文章裏麵,分別介紹了機器學習可以做哪些業務,以及學習機器學習所需要的了解的算法知識。本文將分享開發機器學習模型的全過程。
1.機器學習入門係列第一篇: 機器學習能為你的業務做什麼?有些事情你肯定猜不到!
2.機器學習入門第二篇:關於機器學習算法 你需要了解的東西
你應該已經熟悉所有的技術概念了吧,現在,我們可以把某個想法變成一個可用於生產的實際模型了。
建模步驟一覽
從較高的層次上來講,創建一個優秀的機器學習模型跟創建其他任何產品是一樣的:首先從構思開始,把要解決的問題和一些潛在的解決方案放在一起考慮。一旦有了明確的方向,就可以對解決方案進行原型化,然後對它進行測試以確定是否滿足需求。你需要在構思、原型設計和測試之間不斷地迭代,直到你的解決方案足夠好,並能夠投入市場,此時你就可以將其產品化,並發布出去。現在,我們來看看每個階段的細節吧。
由於數據是機器學習的重要組成部分,因此我們需要在產品開發過程之上進行數據分層,因此我們的流程如下所示:
構思。讓待解決的關鍵問題和針對解決方案的潛在數據輸入保持一致。
數據準備。以一種有用的格式收集和獲取數據,以便對模型進行理解和學習。
原型與測試。建立一個或一組模型來解決問題,測試它們執行和迭代的程度,直到有一個模型能得到令人滿意的結果。
產品化。讓模型以及數據收集與處理穩定化、規模化,以便在生產環境中生成有用的輸出。
構思
這個階段的目標是要讓模型解決的關鍵問題、目標函數和潛在的輸入作為一個整體與模型保持一致。
與問題保持一致。如前所述,機器學習可用於解決真正的業務問題。請確保你的團隊和公司中的所有利益相關者就你正在解決的問題以及如何使用解決方案達成一致。
選擇目標函數。待解決的問題決定了模型的目標是什麼。模型試圖預測的目標函數是什麼?你是否在查找數據中的模式?例如,將照片集按照某種特征分成多個組。
定義質量指標。你如何衡量模型的質量?在沒有看到真正結果的時候,一般很難預見可接受的質量,但目標的定向性對此是有幫助的。
集思廣益所有可能的輸入。你的目標是確定哪些數據可以幫你解決問題或者做出決定。最有幫助的問題是:“專家會如何處理這個問題”。考慮一下解決方案將以什麼樣的變量或者數據為基礎。每一個可能影響人類判斷的因素是否都應該測試。請盡可能廣泛地搜集這些問題的答案。了解關鍵因素可能需要有商業方麵專業的知識,這是企業或者產品人員需要在此階段中頻繁參與的重要原因之一。數據團隊將不得不將這些潛在的輸入轉化為模型特征。請注意,為了將輸入轉換為特征,可能需要額外的處理,後麵我們會詳細討論這個。
數據準備
本階段的目標是收集原始數據,並將其作為原型模型的輸入。你可能需要對原始數據進行複雜的轉換才能使其成為輸入數據。例如,假設你的某個特征是消費者對品牌的看法:你首先需要找到消費者談論品牌的相關來源。如果品牌名稱包括常用詞(例如“蘋果”),則需要將品牌名稱與一般情況下的含義(與水果有關)區分開來,然後再通過觀點分析模型來運行,所有這些都要在構建原型之前完成。並非所有的特征構建起來都很複雜,但有些可能需要耗費大量的工作。
讓我們來更詳細地了解一下這個階段需要做什麼:
以最快的速度收集數據。首先,確定缺少了哪些數據。在某些情況下,你可能需要對必要的輸入分解到“構建塊”級別,或者是到代理級別,這樣才能更方便地獲取到數據。一旦確定下來缺少哪些數據,就要以最快捷、最簡單的方法去獲取。對於不可擴展的方法,比如手工下載或購買數據樣本,即使代價有點高但可能卻是最實際的方法。在這個階段采集太多的數據通常沒有太大的意義,因為你不了解數據是否有用,哪種格式最好,等等。商業人士應該參與到這個階段中來,因為他們可以協助數據專家們從大量的渠道獲取到原本不太容易獲取的數據。請注意,在監督學習算法中,你不僅需要用於模型特征的數據,你還需要為模型的目標函數提供數據點,以進行訓練、驗證以及測試模型。回到房價那個例子,為了建立一個預測房價的模型,你需要一些包含房價的房屋信息!
數據清洗與規範化。在這個階段中,數據科學或工程團隊將承擔起主要的工作職責。他們將投入大部分的精力把構思和原始數據轉化為實際的模型。數據集需要進行檢查和清洗,以避免使用不良數據以及不相關的異常值等等。同時,數據還可能會以不同的比例進行轉換,以使其更容易地與其他數據集一致,並能一起使用。特別是在處理文字和圖像的時候,通常需要對數據進行預處理,以提取相關的信息。例如,將太多太大的圖像插入模型可能會導致信息過量而無法處理,因此你可能需要降低圖片的質量、使用圖像的其中一部分或僅使用對象輪廓。對於文本,你可能需要檢測與文本相關的實體,進行觀點分析,查找常用的n-gram(經常用於表示一定數量單詞的序列)或執行各種其他的轉換。這些通常可由現成的庫來實現,無需重新發明輪子。
原型與測試
這個階段的目標是獲得一個模型的原型,測試並對它進行迭代,直到能夠得到一個足夠好並且能夠用於生產的的模型。
構建原型。一旦數據準備完畢,數據科學團隊就可以開始研究實際的模型了。這個階段涉及到大量的實驗,比如選擇最相關的特征、測試多種算法等。這並不是一個簡單的任務,獲得用於生產模型在時間計劃上並不好把控。
驗證和測試原型。在這個階段中,數據科學家的職責就是要確保最終生成的模型盡可能的好。他們將根據預定義的質量度量標準來評估模型的性能,比較不同算法下模型的性能,調整各種參數並對最終的模型進行性能測試。對於監督學習,需要確定模型預測的結果是否能夠滿足你的需求。對於無監督學習,根據問題的不同,有多種不同的性能評估技術。以聚類為例,你可以輕鬆地繪製出在多個維度上聚類的對象。如果算法使用了關鍵字來標記文檔,那麼關鍵字是否有意義呢?在打標記失敗或重要用例丟失的情況下,是否有明顯的差距呢?這並不能代替更加科學的方法,但在實踐上有助於快速改進。
迭代。此時,你需要與團隊一起來決定是否需要進一步的迭代。該模型與你的預期有多少相符?它是否表現得足夠好,讓你目前的業務狀況得到顯著的改善?是否有特別薄弱的方麵?是否需要更多的數據點?你能想到其他特征來提高性能嗎?是否有替代數據源可以提高模型的輸入質量?等等。這些都需要集思廣益。
產品化
當原型模型能夠很好地解決業務問題,並能進入生產的時候,你就來到了這個階段。請注意,如果尚未準備好進行全麵的產品化,你需要首先確定模型要擴展的比例。比如說,對於一個電影推薦工具:你可能是先對少數用戶提供推薦服務,但要為每個用戶提供完整的使用體驗,在這種情況下,模型就要根據每個用戶的相關性對數據庫中的每個電影進行排序。與僅推薦動作電影相比,這是另一個不同的擴展要求。
現在,我們來探討一下有關將模型生產化的更多的技術細節:
增加數據覆蓋率。在很多情況下,你可以用比生產中更少更有限的數據來構建原型。例如,你可以根據特定客戶來構建原型,然後將其擴展到整個客戶群。
擴展數據收集。一旦驗證了哪些數據對模型有用,你需要構建一種可擴展的方式來收集和獲取數據。在原型設計階段,以手動方式來收集數據還是可以的,但是對於生產,你應該盡可能地自動化。
刷新數據。創建一個隨時間刷新數據的機製,以更新現有值或添加新信息。除非由於某種原因不能保留曆史數據,否則係統應該要以某種方式來持續積累更多的數據。
擴展模型。這個包含了數據科學和工程學兩個方麵的內容。從數據科學的角度來講,如果你更改了基礎數據,例如擴大了客戶群的數量,就需要重新訓練和測試模型。在特定數據集上工作良好的模型並不一定能適用於更廣泛或其他不同的數據集。從架構上來講,模型需要能夠在數據不斷增長的基礎上及時擴展以進行更頻繁地運行。在電影推薦示例中,可能會有更多的用戶、更多的電影以及有關每個用戶喜好的更多信息。
檢查特殊值。雖然模型也許在整體上可以很好地擴展,但在某些很小但很重要的情況下可能就無法正常工作了。例如,電影推薦的平均使用效果可能還不錯,但對於家長來說,如果他們用自己的賬號為孩子選擇了電影,那麼推薦係統就會顯示兒童電影。這是一個產品設計問題,你需要在產品中將父母自己的建議與為孩子的建議分開來,但是,這並不是模型可以告訴你的。
到目前為止,我所描述的是一個概念性的流程。在現實中,界限一般比較模煳,你經常需要在不同階段之間來回走動。你可能會對數據的供給不滿意,從而考慮重來,或者在模型產品化之後,你發現模型並不能很好的工作,你不得不退回去重新構建原型。
文章原標題《Developing a Machine Learning Model from Start to Finish》,作者:Yael Gavish,譯者:夏天,審校:主題曲哥哥。
文章為簡譯,更為詳細的你容,請查看原文(需要備梯子)大家也可以下載下方的PDF文檔查看原文。
最後更新:2017-08-18 15:32:19
上一篇:
PHP根據設備類型自動跳轉相應網址頁麵
下一篇:
茶道長:QQ群裂變引流的實實在在操作,速看!
linux下串口編程設置函數---------set_opt(fd1,115200,8,'N'1)--------------------
《Java8開發指南》翻譯邀請
自定義ContentProvider 實例演示
偷Microsoft師學MFC藝:且看C++如何支持反射
Google 確認 Chrome 即將支持 GPU 硬件加速
OGRE中的四元數與旋轉
淺析機器視覺測試係統市場現狀
?????? ?????????????????????-??????-????????????-?????????
WCF REST係列文章匯總(共9篇)
Android ViewFlipper觸摸動畫