機器學習項目完整搭建流程及任務清單曝光,值得收藏
對于創(chuàng)建機器學習項目,大部分人的印象都是數(shù)據(jù)、建模、測試等,但是具體的事項,以及要經(jīng)過哪些步驟,估計99%的人都不知道,今天的內(nèi)容就跟大家說說機器學習項目里,一定要做的幾件事。
為了讓我們的工作能夠更順利地進行下去,工作計劃、工作進程、任務清單等都是我們的輔助工具,如果沒有這些,我們的工作將難以推進。機器學習也是如此,任何一個機器學習項目,都離不開任務清單,讓每個人都知道該做什么事,什么時候完成,我們需要處理項目中的許多事情(例如準備工作、可能出現(xiàn)的問題、模型創(chuàng)建、模型微調(diào)等等)。
在本文中,我列出來的幾個步驟,可以幫助大家完成機器學習項目,并檢查每個任務是否已成功執(zhí)行。
正如阿圖爾·加萬德在他的書《清單宣言》中所說,
我們所知東西的數(shù)量和復雜性已經(jīng)超過了我們個人正確、安全或可靠地提供其收益的能力。
下面這份簡潔明了的項目行動任務清單將減少你的工作量,提高你的產(chǎn)出。
每個ML項目中,我們都要執(zhí)行8-10個步驟。其中有一些步驟可以按順序交替執(zhí)行。
1、從高層次的角度定義問題
這是為了理解和闡明問題的業(yè)務邏輯。它應該告訴你:
- 問題的性質(zhì)(有監(jiān)督/無監(jiān)督、分類/回歸)
- 可開發(fā)的解決方案類型
- 應該使用什么指標來衡量績效?
- 機器學習是解決這個問題的正確方法嗎?
- 手動解決問題的方法
- 問題的內(nèi)在假設(shè)
2、識別數(shù)據(jù)源并獲取數(shù)據(jù)
在這一步中,我們可以先用這個步驟來定義問題。
根據(jù)問題的定義,我們需要確定數(shù)據(jù)的來源,可以是數(shù)據(jù)庫、數(shù)據(jù)存儲庫、審查程序等。對于要在生產(chǎn)中部署的應用程序,應通過開發(fā)數(shù)據(jù)管道來自動執(zhí)行此步驟,以保持傳入數(shù)據(jù)流入系統(tǒng)。
- 列出所需數(shù)據(jù)的來源和數(shù)量。
- 檢查空間是否會成為一個問題。
- 檢查你是否有權(quán)將數(shù)據(jù)用于個人目的。
- 獲取數(shù)據(jù)并將其轉(zhuǎn)換為可操作的格式。
- 檢查數(shù)據(jù)類型(文本、分類、數(shù)字、時間序列、圖像)
- 取一個樣品做最后的測試。
3、數(shù)據(jù)的初步探索
這是你研究影響結(jié)果/預測/目標的所有特征的步驟。如果你有一個龐大的數(shù)據(jù)庫,在這個步驟中對它進行抽樣,使分析更易于管理。
應遵循的步驟:
- 使用 jupyter notebooks,因為它們提供了一個簡單直觀的界面來研究數(shù)據(jù)。
- 確定目標變量
- 識別特征類型(分類、數(shù)字、文本等)
- 分析特征之間的相關(guān)性。
- 添加一些數(shù)據(jù)可視化,以便于解釋每個特性對目標變量的影響。
- 記錄發(fā)現(xiàn)。
4、探索性數(shù)據(jù)分析以便準備數(shù)據(jù)
接下來,我們將通過定義數(shù)據(jù)轉(zhuǎn)換、清理、特征選擇/工程和縮放功能來執(zhí)行上一步的發(fā)現(xiàn)。
- 編寫函數(shù)來轉(zhuǎn)換數(shù)據(jù)并自動處理即將到來的數(shù)據(jù)批處理過程。
- 編寫清除數(shù)據(jù)的函數(shù)(輸入缺失值并處理異常值)
- 編寫函數(shù)來選擇和設(shè)計功能-刪除冗余功能、功能的格式轉(zhuǎn)換和其他數(shù)學轉(zhuǎn)換。
- 特征縮放-標準化功能。
5、開發(fā)基準模型,然后探索其他模型以便篩選出最佳模型
創(chuàng)建一個非常基本的模型,作為其他復雜機器學習模型的基準。主要步驟包括:
- 使用默認參數(shù)訓練一些常用的機器學習模型,如naivebayes、線性回歸、SVM等。
- 測量并比較每個模型與基線和所有其他模型的性能。
- 對每個模型采用N倍交叉驗證,并計算N個折疊上性能指標的平均值和標準差。
- 研究對目標影響最大的特征。
- 在預測誤差的同時分析模型的類型。
- 以不同的方式設(shè)計功能。
- 重復上述步驟幾次(反復試驗),以確保我們使用了正確格式的正確功能。
- 根據(jù)模型的表現(xiàn)情況,篩選出最優(yōu)模型。
6、微調(diào)入選模型并檢查整體方法
這將是我們接近最終解決方案的關(guān)鍵步驟之一。 主要步驟應包括:
- 使用交叉驗證進行超參數(shù)調(diào)整。
- 使用諸如隨機搜索或網(wǎng)格搜索之類的自動調(diào)整方法,為我們的最佳模型找出最佳配置。
- 測試整體方法,例如投票分類器等。
- 用盡可能多的數(shù)據(jù)測試模型。
- 最終確定后,請使用我們在一開始就保留的看不見的測試樣本來檢查過擬合或欠擬合。
7、記錄代碼并傳達你的解決方案
溝通的過程是多方面的。 我們需要牢記所有現(xiàn)有和潛在的利益相關(guān)者。 因此,主要步驟包括:
- 記錄代碼以及整個項目的方法和過程。
- 創(chuàng)建儀表板,例如voila或具有自我解釋的可視化效果的演示文稿。
- 寫博客/報告,記錄您如何分析功能,測試不同的轉(zhuǎn)換等。記錄你的學習成功(失敗的方法和有效的技術(shù))
- 總結(jié)主要結(jié)果和未來的應用范圍(如有)
8、在開發(fā)環(huán)境中部署監(jiān)視器模型--Monitor!
如果你的項目需要在實時數(shù)據(jù)上進行測試和部署,則應創(chuàng)建一個Web應用程序或 REST API,在所有平臺(Web,Android,iOS)上使用。 主要步驟(會因項目而異)包括:
- 將最終訓練好的模型保存到h5或pickle文件中。
- 使用Web服務為模型服務,你可以使用Flask開發(fā)這些Web服務。
- 連接輸入數(shù)據(jù)源并設(shè)置ETL管道。
- 使用Pipenv,Docker / Kubernetes管理依賴項(基于擴展要求)
- 你可以使用AWS,Azure或Google Cloud Platform部署服務。
- 監(jiān)控實時數(shù)據(jù)的性能,或僅供人們使用你的模型和數(shù)據(jù)。
注意:可以根據(jù)項目的復雜性來調(diào)整清單。