原文來自於《Hands-On Machine Learning with Scikit-Learn and TensorFlow》,這是一本系統學習機器學習和深度學習很是不錯的入門書籍,理論和實踐兼而有之。算法
此清單能夠指導你完成機器學習項目。主要有八個步驟:網絡
- 將問題框架化而且關注重點。
- 獲取數據。
- 探索數據以洞悉數據。
- 準備數據以更好地將基礎數據模式暴露給機器學習算法。
- 探索多種不一樣的模型並列出最好的那些。
- 微調模型並將它們組合成一個很好的解決方案。
- 展現你的解決方案。
- 啓動,監督並維護你的系統。
顯然,你應該根據你的需求調整此清單。框架
<!--more-->機器學習
將問題框架化而且關注重點
- 用業務術語定義目標。
- 你的解決方案將如何使用?
- 目前的解決方案/解決方法(若是有的話)是什麼?
- 你應該如何解決這個問題(監督/非監督,在線/離線等)?
- 如何度量模型的表現?
- 模型的表現是否和業務目標一致?
- 達到業務目標所需的最低性能是多少?
- 相似的問題如何解決?是否能夠複用經驗或工具?
- 人員是否專業?
- 你如何動手解決問題?
- 列出目前你(或者其餘人)所作的假設。
- 若是可能,驗證假設。
獲取數據
注意:儘量自動化,以便你輕鬆獲取新數據。函數
- 列出你須要的數據和數據量。
- 查找並記錄你能夠獲取該數據的位置。
- 檢查它將佔用多少存儲空間。
- 檢查法律義務並在必要時獲取受權。
- 獲取訪問權限。
- 建立工做目錄(擁有足夠的存儲空間)。
- 獲取數據。
- 將數據轉換爲你能夠輕鬆操做的格式(不更改數據自己)。
- 確保刪除或保護敏感信息(好比,匿名)。
- 檢查數據的大小和類型(時間序列,樣本,地理信息等)。
- 抽樣出測試集,將它放在一邊,之後不須要關注它(沒有數據窺探!)。
探索數據
注意:嘗試從領域專家那獲取有關這些步驟的看法。工具
- 建立用於探索的數據副本(若有必要,將其取樣爲可管理的大小)。
- 建立一個 Jupyter 筆記原本記錄你的數據探索。
-
研究每一個屬性及其特徵:性能
- 名稱;
- 類型(分類,整數/浮點數,有界/無界,文本,結構化數據等);
- 缺失數據的百分比;
- 噪聲點和它的類型(隨機點,異常點,舍入偏差等);
- 對任務可能有用嗎?
- 分佈類型(高斯分佈,均勻分佈,對數分佈等)。
- 對於監督學習任務,肯定目標屬性。
- 可視化數據。
- 研究屬性間的相關性。
- 研究怎如何手動解決問題。
- 肯定你想要應用的有效的轉換。
- 肯定有用的額外數據。
- 記錄你所學到的知識。
準備數據
注意:單元測試
- 處理數據副本(保持原始數據集完整)。
-
爲你應用的全部數據轉換編寫函數,緣由有五:學習
- 你能夠在下次得到新數據集時輕鬆準備數據
- 你能夠在將來的項目中應用這些轉換
- 用來清洗和準備測試數據集
- 一旦項目上線你能夠用來清洗和準備新的數據集
- 爲了便於將你的準備選擇視爲超參數
-
數據清洗:測試
- 修正或移除異常值(可選)。
- 填補缺失值(好比用零,平均值,中位數等)或者刪除所在行(或者列)。
-
特徵提取(可選):
-
適當的特徵工程:
- 連續特徵離散化。
- 分解特徵(好比分類,日期/時間等)。
- 對特徵添加有益的轉換(好比 log(x),sqrt(x),x^2 等)
- Aggregate features into promising new features. 將一些特徵融合爲有益的新特徵
- 特徵縮放:標準化或者正規化特徵。
列出有用模型
注意:
- 若是數據量巨大,你可能須要採樣出較小的訓練集,以便在合理的時間內訓練許多不一樣的模型(請注意,這會對諸如大型神經網絡或隨機森林等複雜模型進行處罰)。
- 再次嘗試儘量自動化這些步驟。
- 使用標準參數訓練許多快速、粗糙的模型(好比線性模型,樸素貝葉斯模型,支持向量機模型,隨機森林模型,神經網絡等)。
-
衡量並比較他們的表現。
- 對於每一個模型,使用 N 折交叉驗證法,而且計算基於 N 折交叉驗證的均值與方差。
- 分析每種算法的最重要變量。
-
分析模型產生的錯誤類型。
- 進行一輪快速的特徵提取和特徵工程。
- 對以前的五個步驟進行一兩次的快速迭代。
- 列出前三到五名最有用的模型,由其是產生不一樣類型錯誤的模型。
微調系統
注意:
- 這一步你將會使用盡量多的數據,特別是當你微調結束時。
- 像以前同樣儘量自動化。
-
使用交叉驗證方法調節超參數
- 嘗試集成方法,結合最佳模型一般比單獨運行它們更好。
- 一旦你對最終的模型有自信,請在測試集上測量其性能以估計泛化偏差。
在測量泛化偏差後不要調整模型:你會開始過分擬合測試集的。
展現你的解決方案
- 將你作的工做整理成文檔。
-
製做精美的演示。
- 解釋你的解決方案實現業務目標的緣由。
-
不要忘記展現在這過程當中你注意到的有趣的點。
-列出你的假設和系統的限制。
- 確保經過精美的可視化或易於記憶的陳述來傳達你的主要發現(例如,「收入中位數是房價的第一預測因子」)。
啓動
- 準備好生產解決方案(插入生產數據輸入,編寫單元測試等)。
-
編寫監控代碼以按期檢查系統的實時性能,並在信號丟失時觸發警報。
- 謹防模型退化:隨着數據的進入,模型每每會「腐爛」。
- 評估模型可能須要大量的人力(好比,經過衆包服務能夠解決這個問題)
- 同時監控輸入數據的質量(例如,一個有故障的傳感器發送隨機數據,或者另一個團隊的輸出變得陳舊),這對於在線學習系統尤爲重要。
- 按期在新數據上從新訓練模型(儘量自動化)。