摘要:雖然我們可以在網上參照各種模板項目文章博客等創建一個數據科學項目,但是目前也沒有教科書對這些知識做一個統一的回答。舉個例子來說,數據科學分析項目通常就不需要部署和監控這兩個過程。創建文件描述源數據及位置。進一步探索和報告在整個數據科學項目中
摘要:?在一個新的數據科學項目,你應該如何組織你的項目流程?數據和代碼要放在那里?應該使用什么工具?在對數據處理之前,需要考慮哪些方面?讀完本文,會讓你擁有一個更加科學的工作流程。
假如你想要開始一個新的數據科學項目,比如對數據集進行簡單的分析,或者是一個復雜的項目。你應該如何組織你的項目流程?數據和代碼要放在那里?應該使用什么工具?在對數據處理之前,需要考慮哪些方面?
數據科學是當前一個不太成熟的行業,每個人都各成一家。雖然我們可以在網上參照各種模板項目、文章、博客等創建一個數據科學項目,但是目前也沒有教科書對這些知識做一個統一的回答。每個數據科學家都是從經驗和錯誤中不斷的探索和學習。現在,我逐漸了解到什么是典型的“數據科學項目”,應該如何構建項目?需要使用什么工具?在這篇文章中,我希望把我的經驗分享給你。
盡管數據科學項目的目標、規模及技術所涉及的范圍很廣,但其基本流程大致如下:
如上圖所示,項目不同,其側重點也會有所不同:有些項目的某個過程可能特別復雜,而另一些項目可能就不需要某一過程。舉個例子來說,數據科學分析項目通常就不需要“部署”(Deployment)和“監控”(Monitoring)這兩個過程。現在,我們逐一來細說各個過程。
不管是你接觸到人類基因組還是iris.csv,通常都會有?“原始源數據”這一概念。數據有很多種形式,可以是固定的,也可以是動態變化的,可以存儲在本地或云端。其第一步都是對源數據訪問,如下所示:
源數據是*.csv文件集合。使用Cookiecutter工具在項目的根文件夾中創建一個data/raw/子目錄,并將所有的文件存儲在這里;創建docs/data.rst文件描述源數據的含義。
源數據是*.csv文件集合。啟動SQL服務器,創建一個raw表,將所有的CSV文件作為多帶帶的表導入。創建docs/data.rst文件描述源數據及SQL Server位置。
源數據是基因組序列文件、患者記錄、excel及word文檔組合等,后續還會以不可預測的方式增長。這樣可以在云服務器中創建SQL數據庫,將表導入。你可以在data/raw/目錄存儲特別大的基因組序列,在data/raw/unprocessed目錄存儲excel和word文件;還可以使用DVC創建Amazon S3存儲器,并將data/raw/目錄推送過去;也可以創建一個Python包來訪問外部網站;創建docs/data.rst目錄,指定SQL服務器、S3存儲器和外部網站。
源數據中包含不斷更新的網站日志。可以使用ELK stack?并配置網站以流式傳輸新日志。
源數據包含10萬張大小為128128像素的彩色圖像,所有圖像的大小則為100,0001281283,將其保存在HDF5文件images.h5中。創建一個Quilt數據包并將其推送給自己的私人Quilt存儲庫;創建/docs/data.rst文件,為了使用數據,必須首先使用quilt install mypkg/images導入工作區,然后再使用?from quilt.data.mypkg import images導入到代碼中。
源數據是模擬數據集。將數據集生成實現為Python類,并在README.txt文件中記錄其使用。
通常來說,在設置數據源的時候可以遵循以下規則:
存儲數據的方式有意義,另外還要方便查詢、索引。
保證數據易于共享,可以使用NFS分區、Amazon S3存儲器、Git-LFS存儲器、Quilt包等。
確保源數據是只讀狀態,且要備份副本。
花一定的時間,記錄下所有數據的含義、位置及訪問過程。
上面這個步驟很重要。后續項目會你可能會犯任何錯誤,比如源文件無效、誤用方法等等,如果沒有記住數據的含義、位置及訪問過程,那將很麻煩。
數據處理的目的是將數據轉化為“干凈”的數據,以便建模。在多數情況下,這種“干凈”的形式就是一個特征表,因此,“數據處理”通常歸結為各種形式的特征工程(feature engineering),其核心要求是:確保特征工程的邏輯可維護,目標數據集可重現,整個管道可以追溯到源數據表述。計算圖(computation graph)即滿足以上要求。具體例子如下:
根據cookiecutter-data-science規則,使用Makefile來描述計算圖。通過腳本實現每個步驟,該腳本將一些數據文件作為輸入,然后輸出一個新的數據文件并存儲在項目的data/interim或data/processed目錄中。可以使用?make -j
使用DVC來描述和執行計算圖,其過程與上面類似,此外還有共享生成文件等功能。
還可以使用Luigi、Airflow或其他專用工作流管理系統來描述和執行計算圖。除此之外,還可以在基于web的精美儀表板上查看計算進度。
所有源數據都以表的形式存儲在SQL數據庫中,在SQL視圖中實現所有的特征提取邏輯。此外,還可以使用SQL視圖來描述對象的樣本。然后,你可以根據這些特征和樣本視圖創建最終的模型數據集。
首先,允許用戶輕松的跟蹤當前所定義的特征,而不用存儲在大型數據表中。特征定義僅在代碼運行期間有效;其次,模型從部署到生產非常簡單,假設實時數據庫使用相同的模式,你就只需要復制相應的視圖。此外,還可以使用CTE語句將所有的特征定義編譯為模型最終預測的單個查詢語句。
在進行數據處理時,請注意一下問題:
1.重復以計算圖的形式處理數據。
2.考慮計算基礎架構。是否進行長時間計算?是否需要并行計算還是聚類?是否可以從具有跟蹤任務執行的管理UI作業中獲益?
3.如果想要將模型部署到生產環境中,請確保系統支持該用例。如果正在開發一個包含JAVA Android應用程序模型,但是還是想用Python開發,為了避免不必要的麻煩,就可以使用一個專門設計的DSL,然后將這個DSL轉換為Java或PMML之類的中間格式。
4.考慮存儲特征或臨時計算的元數據。可以將每個特征列保存在多帶帶的文件中,或使用Python函數注釋。
完成數據處理和特征設計后即可開始進行建模。在一些數據科學項目中,建模可以歸結為單個m.fit(X,y)或某個按鈕;而在其他項目中則可能會涉及數周的迭代和實驗。通常來說,你可以從“特征工程”建模開始,當模型的輸出構成了很多特征時,數據處理和建模這兩個過程并沒有明確的界限,它們都涉及到計算。盡管如此,將建模多帶帶列出來作為一個步驟,仍然很有意義,因為這往往會涉及到一個特殊的需求:實驗管理(experiment management)。具體例子如下:
如果你正在訓練一個模型,用于在iris.csv數據集中對Irises進行分類。你需要嘗試十個左右的標準sklearn模型,每個模型都有多個不同的參數值,并且測試不同的特征子集。
如果你正在設計一個基于神經網絡的圖像分類模型。你可以使用ModelDB(或其他實驗管理工具,如TensorBoard,Sacred,FGLab,Hyperdash,FloydHub,Comet.ML,DatMo,MLFlow,...)來記錄學習曲線和實驗結果,以便選擇最佳的模型。
使用Makefile(或DVC、工作流引擎)實現整個管道。模型訓練只是計算圖中的一個步驟,它輸出model-
實驗管理/模型版本控制的UI外觀如下:
在實際應用中,模型最終都要部署到生產環境中,一定要有一個有效的計劃,下面有些例子:
建模管道輸出一個訓練過模型的pickle文件。所有的數據訪問和特征工程代碼都是由一系列Python函數實現。你需要做的就是將模型部署到Python應用程序中,創建一個包含必要函數和模型pickle文件的Python包。
管建模道輸出一個訓練過的模型的pickle文件。部署模型需要使用Flask創建一個REST服務將其打包為一個docker容器,并通過公司的Kubernetes云服務器提供服務。
訓練管道生成TensorFlow模型。可以將TensorFlow服務當做REST服務。每次更新模型時,都要創建測試并運行。
訓練管道生成PMML文件。你可以用Java中的JPMML庫來讀取,一定要確保PMML導出器中要有模型測試。
訓練管道將模型編譯為SQL查詢,將SQL查詢編碼到應用程序中。
我們對模型部署做一下總結:
1.模型部署的方式有很多種。在部署之前一定要了解實際情況,并提前做計劃:是否需要將模型部署到其他語言編寫的代碼庫中?如果使用REST服務,服務的負載時多少?能否進行批量預測?如果打算購買服務,費用是多少?如果決定使用PMML,那么就要確保它能夠支持你的預期預處理邏輯。如果在訓練期間使用第三方數據源,那么就要考慮是否在生產中能夠與它們集成,以及如何在管道導出模型中對訪問信息進行編碼。
2.模型一旦部署到生產環境,它就轉變為一行行實際的代碼,所以也要滿足所有需求,因此,這就需要測試。在理想情況下,部署管道應該產生用于部署的模型包以及測試時需要的所有內容。
將模型成功部署到生產環境,也許訓練集中的輸入分布與現實不同,模型需要重新練或重新校準;也許系統性能沒有達到預期。因此,你需要收集模型性能的數據并對其進行監控。這就需要你設置一個可視化儀表板,具體事例如下:
將模型的輸入和輸出保存在logstash或數據表中,設置Metabase(或Tableau,MyDBR,Grafana等)并創建可視化模型性能和校準指標報告。
在整個數據科學項目中,你還需要嘗試不同的假設,以生成圖標和報告。這些任務與構建管道有所不同,主要體現在兩個方面:
首先,大部分任務不需要可再現性,即不用包含在計算圖中。另外,也沒必要使用模型的可重復性,在Jupyter中手動繪制圖即可。
其次,這些“進一步探索”的問題往往具有不可預測性:可能需要分析性能監控日志中的一個異常值;或者測試一個新的算法。這些探索會塞滿你的筆記本中,團隊中的其他人可能看不懂你的記錄。因此按照日期排列子項目很重要。
在項目中創建project目錄,子文件夾命名格式為:projects/YYYY-MM-DD -項目名稱。如下所示:
./2017-01-19 - Training prototype/
??????????????? (README, unsorted files)
./2017-01-25 - Planning slides/
??????????????? (README, slides, images, notebook)
./2017-02-03 - LTV estimates/
???????????????? README
???????????????? tasks/
?????????????????? (another set of?
??????????????????? date-ordered subfolders)
./2017-02-10 - Cleanup script/
?????????????? ??README
???????????????? script.py
./... 50 folders more ...
注意,你可以根據需要自由組織每個子項目的內部目錄,因為每個子項目很可能也是一個“數據科學項目”。在任何情況下,在每個子項目中都要有個README文件夾或README.txt文件,簡要列出每個子項目目錄的信息。
如果項目列表太長,你需要重新組織項目目錄,比如壓縮一部分文件移動到存檔文件夾中。“探索性”的任務有兩種形式,即一次性分析和可重復性使用的代碼,這時候建立一些約定很有必要。
數據科學項目可能會依賴一些服務,可以指定提供以下9個關鍵服務,來描述期望:
1.文件存儲。任何一個數據科學項目都必須有個存儲項目的地方,且需要整個團隊共享。它是網絡驅動器上的一個文件夾?還是Git存儲庫中的一個文件夾?
2.數據服務。如何存儲和訪問數據?這里的“數據”指的是計算機讀取或輸出的所有內容,包括源數據、中間結果及第三方數據集訪問、元數據、模型及報告等。
3.版本。代碼、數據、模型、報告和文檔都需要有版本控制,另外一定要備份!
4.元數據和文檔。如何記錄項目及子項目?是否有任何機器都可讀的特征、腳本、數據集或模型的元數據?
5.交互式計算。在交互式計算中,你選擇JupyterLab、RStudio、ROOT、Octave還是Matlab?您是否為交互式并行計算設置了一個聚類(如ipyparallel或dask)?
6.作業隊列和調度程序。代碼如何運行?是否需要安排定期維護?
7.計算圖。如何描述計算圖并建立可重復性?
8.實驗管理。如何收集、查看和分析模型培訓進度和結果?使用?ModelDB、Hyperdash還是?FloydHub?
9.監控儀表板。如何收集和跟蹤模型在生產環境中的具體表現?使用元數據庫、Tableau、?PowerBI還是Grafana?
最后,我總結了一個電子表格,包含了本文提到的所有工具,可自行下載使用。
閱讀原文
本文為云棲社區原創內容,未經允許不得轉載。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/8891.html
摘要:安裝安裝用于數據科學的的最佳方法是使用發行版。但這只是展示了構建數據科學問題的不同方式中的機器學習這是一個重要的主題,機器學習正在風靡世界,是數據科學家工作的重要組成部分。 作為編程界的頭牌名媛,Python平易近人的態度和精明婉約的靈動深得各個大佬歡心。比如:人工智能、web開發、爬蟲、系統運維、數據分析與計算等等。這幾位風流多金的行業精英隨便哪個都能逆轉未來。 本文為你精心準備了一...
摘要:所以克拉姆卡創辦了洞察力數據科學公司來為博士們提供面向業界數據科學的職業培訓。舊金山公司的數據實驗室主管伊萊巴塞特建議,學習更符合業界胃口的編程工具如和語言。 伊萊·巴塞特(Eli Bressert)計劃把自己的學術生涯都放在針對恒星形成的研究上。他在英國埃克塞特大學(University of Exeter)獲得博士學位,又在澳洲悉尼附近完成了針對射電天文學的博士后研究。他發表論文的引用量...
摘要:今天就我和大家來談談大數據領域的一些新變化新趨勢。結語以上四個方面是數據科學在實踐發展中提出的新需求,誰能在這些方面得到好的成績,誰便會在這個大數據時代取得領先的位置。 從2012年開始,幾乎人人(至少是互聯網界)言必稱大數據,似乎不和大數據沾點邊都不好意思和別人聊天。從2016年開始,大數據系統逐步開始在企業中進入部署階段,大數據的炒作逐漸散去,隨之而來的是應用的蓬勃發展期,一些代表...
摘要:今天就我和大家來談談大數據領域的一些新變化新趨勢。結語以上四個方面是數據科學在實踐發展中提出的新需求,誰能在這些方面得到好的成績,誰便會在這個大數據時代取得領先的位置。 從2012年開始,幾乎人人(至少是互聯網界)言必稱大數據,似乎不和大數據沾點邊都不好意思和別人聊天。從2016年開始,大數據系統逐步開始在企業中進入部署階段,大數據的炒作逐漸散去,隨之而來的是應用的蓬勃發展期,一些代表...
閱讀 909·2021-09-09 09:32
閱讀 2849·2021-09-02 10:20
閱讀 2685·2021-07-23 11:24
閱讀 824·2019-08-30 15:54
閱讀 3631·2019-08-30 15:54
閱讀 1346·2019-08-30 11:02
閱讀 2844·2019-08-26 17:40
閱讀 1122·2019-08-26 13:55