對於機器學習項目來說,你開始獲得之後有一個總體思路很重要,也需要一些默認遵守的原則.
個人記錄翻譯
Hands-On Machine Learning with Scikit-Learn and TensorFlow 附錄B
指導你完成你機器學習項目的清單列表
主要是有8個主要步驟:
- 從整體上思考觀察所需要解決的問題.
- 獲得數據.
- 仔細觀察你的數據得到對這些數據的思路與想法.
- 將數據處理成符合機器學習算法所需要求.
- 找不同算法模型, 並尋找效果最好一個.
- 微調模型並將它們組合成一個很好的解決方案.
- 提出解決方法.
- 啓動,監控和維護.
<1>從整體上思考所需要解決的問題
- 定義業務目標的解決方案.
- 解決方案如何使用?
- 目前的解決方案是什麼(如果之前存在的話)?
- 如何去構建解決方案(監督學習/無監督學習, 線上/線下)?
- 如何衡量性能效果(例誤差率這些)?
- 性能效果的提升與否是否與業務目標一致?
- 業務目標所需的最低性能標準是多少?
- 是否存在類似的項目, 是否存在可以重用的工具或者經驗?
- 是否有人類專業知識?
- 你將會如何手動解決問題?
- 列出至今爲止做出的假設.
- 如果可能驗證假設.
<2>獲得數據
Note: 儘可能地自動化,以便輕鬆地獲取數據
- 列出需要的數據列表與數據量大小.
- 尋找數據並且記錄找到這些數據的方法.
- 檢查這需要多少空間.
- 檢查法律義務,必要時申請授權.
- 獲得訪問權限授權.
- 創建工作空間.
- 取得數據.
- 將數據成方便你操作的類型(無需改變數據本身).
- 確保刪除或者刪除隱私信息.
- 檢查數據的大小和類型(時間序列,樣本,地理位置等).
- 抽取一部分數據集作爲測試集,放到一邊不要看.
<3>探索你的數據
Note: 跟領域專家探討下列這些步驟
- 複製數據(如果需要, 抽樣成一個可管理的大小).
- 創建一個 Jupyter notebook 記錄探索數據過程.
- 研究每個特徵和屬性:
– 名稱
– 類型(明確,有界/無界,文本,結構化的,等等)
– 數據缺失率
– 噪聲與噪聲類型(隨機,異常值,舍入誤差等)
– 可能對項目有用嘛?
– 數據分佈情況(高斯分佈,均勻,對數).
<4>準備數據
Notes:
- 在複製數據上工作(保證源數據的完整性)
- 爲所有數據的轉換編寫函數,爲下列5個理由:
- 爲了更容易地準備數據當你獲取得新數據
- 可以應用這些轉換在未來的項目
- 清洗和準備測試集
- 清洗和準備新數據一旦解決方案是實時的
- 便於選擇超參數
- 數據清洗
–修復或者移除離羣值(可選).
–填充缺失值(0,平均值,中位數等等)或者刪除這一行或列 - 特徵選擇(可選)
–刪除不提供任務有用信息的屬性 - 特徵工程,恰當時
– 分離連續特徵
– 分解特徵(例如:分類,日期/時間等)
– 添加可能有用的特徵轉換(log(x), sqrt(x), x^2 等)
– 聚合特徵去形成可能有效果的新特徵 - 特徵縮放,標準化特徵
<5>列出可能有效的模型列表
Notes:
– 如果你有大數據集,你可能想要抽樣小數據集便於在可能的時間內多次試用不同的模型(但要記得小數據集會懲罰複雜的模型,如隨機森林,大型神經網絡等)
– 一再強調,儘可能地自動化這些步驟:
- 訓練來自不同類別的許多快速的模型(例如,線性,樸素
貝葉斯,SVM,隨機森林,神經網絡等)使用標準參數。 測量和比較他們的表現
– 對於每個模型,使用N折交叉驗證,測試每個模型性能的平均值與標準差.分析每個模型的最重要屬性.
分析每個模型出現誤差的原因.
– 人們一般如何解決這些誤差快速進行功能選擇和工程設計.
- 對上述5個步驟進行一次或兩次快速迭代.
- 找出最可能表現得最好的3到5個模型, 更傾向於那些誤差原因不同的模型.
<6>微調模型
Notes:
– 儘可能地準備更多的數據以用於模型微調.
– 儘可能自動化
使用驗證微調你的超參數.
– 將數據選擇轉換視爲超參數,特別當你不確定時(例如缺失值是否用平均值,中位數填充,或者乾脆刪除)
– 除非要探索的超參數值非常少,否則更喜歡隨機
搜索網格搜索。 如果訓練時間很長,您可能更喜歡貝葉斯訓練
優化方法.嘗試合併的方法.組合表現最好的模型往往比你單獨使用他們表現來得好.
- 一旦決定你的最終模型,測量它在測試集上的性能表現,用於評價模型誤差.
ps:測量泛化誤差後,請勿調整模型,你只是開始過度擬合測試集.(不明白)
<7>提出你的解決方案
- 記錄你完成的事情.
- 創建一個漂亮的演示文稿
- 解釋解決方案實現業務目標的原因.
不要忘記提出一些有趣的點.
– 如哪一些有效,哪一些無效,列出你的假設與系統的限制確保通過可視化一些精美的圖表與容易記住的陳述來傳達您的主要發現.
<8>啓動
- 準備好生產解決方案(插入生產數據輸入,寫入
單元測試等)。 - 編寫監控代碼,以定期檢查系統的實時性能。
vals並在它下降時觸發警報。 - 謹防緩慢退化:隨着數據的發展,模型往往會“腐爛”。
- 測量性能可能需要人工管道(例如,通過人羣 -
服務)。 - 還監控輸入的質量(例如,發送故障的傳感器 -
dom值,或其他團隊的輸出變得陳舊)。 這尤其如此
對在線學習系統很重要。 - 定期在新數據上重新訓練模型(儘可能自動化)
BLE)