與三角洲湖Productionizing機器學習
得到的早期預覽O ' reilly的新電子書一步一步的指導你需要開始使用三角洲湖。
嚐試這個筆記本係列磚-第1部分(三角洲湖),第2部分(三角洲湖+毫升)
對於許多數據科學家,構建和優化機器學習模型的過程隻有一小部分他們每天做的工作。絕大多數的時間花在做的並不那麼迷人的(但至關重要的)工作執行ETL、構建數據管道,並將模型投入生產。
在本文中,我們將介紹的過程建立一個生產數據科學管道循序漸進。在這個過程中,我們將演示如何三角洲湖是機器學習生命周期的理想平台,因為它提供了工具和特性,統一數據科學、工程、數據和生產工Beplay体育安卓版本作流程,包括:
- 新數據流表,可以連續過程從曆史和實時流媒體來源,極大地簡化了數據科學生產流水線。
- 模式執行,確保表保持整潔,無列汙染,為機器學習做好準備。
- 模式演化,它允許新列添加到現有的數據表,即使這些表是用於生產,不會造成破壞的變化。
- 時間旅行,也稱為數據版本控製,允許更改任何三角洲湖表審核,如果需要複製,甚至回滾時無意更改由於用戶錯誤。
- 與MLflow集成,使實驗能夠被自動記錄實驗參數,跟蹤和複製的結果,模型和陰謀。
這些特征的三角洲湖允許數據工程師和科學家設計可靠、有彈性、自動數據管道和機器學習模型比以往更快。
建立一個機器學習的數據管道與三角洲湖
種架構
常見的體係結構使用表,對應於不同的數據質量水平工程管道、逐步增加結構數據:數據攝入(“青銅”表),轉換/特性工程(“銀”表),和機器學習培訓或預測(“黃金”表)。結合起來,我們將這些表作為一個“種”的架構。它允許數據工程師建立管道,從原始數據作為開始“single source of truth ”所有的流動。隨後轉換和聚合可以重新計算和驗證,以確保業務級總表仍然反映底層數據,即使下遊用戶細化數據,引入上下文特定的結構。
值得潛水深入一點數據作為水的類比來理解三角洲湖管道是如何工作的(如果你允許我們擴展示例)。而不是安排一係列不同的批處理作業的移動數據通過管道階段,三角洲湖允許數據通過像水一樣流動:無縫地不斷,在實時。
銅表作為典型的湖泊,大量的水(數據)在不斷滴。當它到達時,它的髒,因為它來自不同來源,其中一些不是很幹淨。從那裏,數據不斷流入銀表,就像小溪的源頭連接到湖,快速移動,不斷流動。水(或數據,在本例中)下遊流動,清洗和過濾的曲折,動作變得純淨。當它到達水下遊加工廠(我們的黃金表)接收一些最終的淨化和嚴格的測試,讓它準備好消費,因為消費者(在這種情況下,ML算法)非常挑剔,不會容忍汙染水。最後,從淨化裝置,輸送到每一個下遊消費者的水龍頭(無論是ML算法,或BI分析師),準備消費以最純粹的形式。
準備機器學習數據的第一步是創建一個青銅表,一個地方,可以捕獲數據粗淺和留存。讓我們看看如何做到這一點,但首先,讓我們來談談為什麼三角洲湖的顯而易見的選擇數據湖。
數據湖困境
這些天,我們看到的是最常見的模式為企業收集實時流數據(如客戶網站上的點擊行為)使用Azure事件中心或AWS運動,並將其保存到便宜,豐富的雲存儲,如Blob存儲或S3 bucket。公司經常想補充這個實時流數據與曆史數據(如客戶過去的購買曆史)得到一個完整的過去和現在的照片。
因此,企業往往有很多生,非結構化數據,他們從各種來源收集停滯坐在數據湖泊。沒有一種可靠地將曆史數據與實時流媒體數據,並添加結構數據,以便它可以被送入機器學習模型,這些數據湖泊很快就變得複雜,無組織的混亂提出了一項“數據沼澤。”
單個數據點之前被轉換或分析,數據工程師已經跑到他們的第一個困境:如何彙集曆史(“批處理”)的數據,處理和實時流數據。傳統上,一個可能使用一個λ架構填補這一缺口,但提出了自己的問題源於λ的複雜性,以及其造成數據丟失或腐敗的傾向。
三角洲湖的解決方案:結合過去和現在在一個單一的表
的解決方案是利用“數據湖困境”三角洲湖。三角洲湖是一個開源數據存儲層之上。它構建分布式計算和100%兼容Apache火花,所以你可以很容易地將現有的數據表從他們目前的格式存儲在(CSV、拚花等)和拯救他們作為銅表在三角洲湖格式使用您喜歡的火花api,如下所示。
#讀loanstats_2012_2017.parquetloan_stats_ce = spark.read.parquet (PARQUET_FILE_PATH)#將表保存為三角洲湖loan_stats_ce.write。格式(“δ”).mode (“覆蓋”).save (DELTALAKE_FILE_PATH)#重讀三角洲湖loan_stats = spark.read。格式(“δ”).load (DELTALAKE_FILE_PATH)
一旦你建立了一個青銅表原始數據和三角洲湖格式轉換現有的表,你已經解決了數據工程師的第一個困境:結合過去和現在的數據。如何?三角洲湖表可以處理連續的數據流從曆史和實時流媒體來源,無縫。因為它使用火花,這是近乎普遍的兼容不同的流數據輸入格式和源係統,卡夫卡,運動,卡桑德拉或其他。
為了演示三角洲湖表可以同時處理兩個批處理和流數據,看看下麵的代碼。在加載初始數據集從文件夾中DELTALAKE_FILE_PATH
湖成三角洲表在前麵的代碼塊(如圖所示),我們可以使用友好的SQL語法對我們當前的數據運行一個批處理查詢,之前流新的數據表。
%sql選擇addr_state,總和(“計數”)作為貸款從loan_by_state_delta集團通過addr_state
正如上麵你可以看到的,最初,加州和德州最高數量的貸款。
既然我們已經演示了三角洲湖運行批處理查詢的能力,我們的下一步是展示其同時流數據上運行查詢的能力。
我們將創建一個流數據來源,不斷將新數據添加到三角洲湖表,結合現有的批處理數據我們之前策劃。注意,loan_by_state_readStream
讀取來自同一位置,DELTALAKE_FILE_PATH
批量查詢一樣,在前麵的代碼塊。
loan_by_state_readStream = spark.readStream。格式(“δ”).load (DELTALAKE_FILE_PATH)loan_by_state_readStream.createOrReplaceTempView (“loan_by_state_readStream”)
實際上,批處理和流數據可以在相同的位置(即土地。DELTALAKE_FILE_PATH
)和三角洲湖可以回應查詢兩種類型的數據,同時,因此三角洲湖表提供的格言“統一批處理和流源和下沉。”
三角洲湖流程流,可視化更新在我們眼前,我們開始看到一個不同的模式出現。
如你所見,愛荷華州(國家越來越深在中西部)最多的貸款由於最近的數據流。的loan_by_state_delta
表更新,即使新數據流表同時使用loan_by_state_readStream
。
既然我們已經看到了三角洲湖允許我們可靠地分析批處理和流媒體來源的數據同時,下一步是做一些數據清洗、轉換和功能工程準備好了機器學習的工作。
創建高質量的特性與三角洲湖店
數據清洗和轉換
到目前為止,我們已經成功地將我們的數據轉換為三角洲湖格式,並創建了一個青銅表作為著陸區曆史和實時數據處理無縫。目前,數據是在正確的地方,但有用的當前形式:它需要大量的清洗、轉換和結構之前,可用於機器學習模型。毫升建模庫不提供了(如果有的話)的靈活性在數據類型,null值,和丟失的數據,所以數據工程師的下一份工作是清潔和處理原始數據。由於三角洲湖是100%兼容Apache火花,我們可以執行數據綠豆我們的心的內容在我們的三角洲湖表使用火花的熟悉的API,如下所示。
打印(“多級映射到一個因素水平verification_status……”)loan_stats = loan_stats.withColumn (“verification_status”的削減(regexp_replace (loan_stats.verification_status“源驗證”,“驗證”)))打印(“計算收入的總額或失去每貸款……”)loan_stats = loan_stats.withColumn (“淨”,輪(loan_stats。total_pymnt loan_stats.loan_amnt,2))
執行ETL之後我們可以節省清洗,處理過的數據到一個新的三角洲湖銀表,我們可以將結果保存為一個新表,無需修改原始數據。
中間步驟的重要性
一個中間銀表很重要,因為它可能作為來源多個下遊黃金表,由不同的業務單位和用戶控製。例如,你可以想象一個銀表代表“產品銷售”流入幾個黃金表有不同用途:更新供應鏈儀表板,計算工資獎金為銷售人員,或為董事會成員提供高層次的kpi,例如。
的原因,我們不隻是黃金表直接連接到原始數據在銅表是它會導致大量的重複工作。這就要求每個業務單位執行相同的ETL數據。相反,我們可以執行它。作為附帶的好處,這一步可以避免混亂由於不同數據,像獨立的業務單位計算相同的指標略有不同。
遵循這個藍圖,我們可以放心,數據保存或湧入我們最後的黃金桌子是幹淨的,符合,一致。
模式執行
既然我們已經改變了我們的數據,下一步是把結構介紹給我們的三角洲湖銀表執行我們的模式。模式執行數據科學家和工程師是一個重要的特性,因為它確保我們能夠保持我們的表完美整潔。沒有模式執行,有可能在單個列數據類型混合在一起,在我們的數據的可靠性造成了損害。例如,如果我們不小心介紹StringType
數據轉換成一列FloatType
數據,我們可以無意中使我們的機器學習模型無法讀取列,打破我們寶貴的數據管道。
三角洲湖了模式驗證在寫,這意味著它將新記錄寫入一個表,三角洲湖檢查以確保這些記錄匹配表的預定義的模式。如果記錄不匹配的表的模式,三角洲湖將會引發一個異常,防止不匹配數據汙染與衝突的數據類型的列。這種方法比模式驗證在閱讀,因為它是很難“把魔鬼重新放回瓶子裏”一旦不正確的數據類型已經被汙染的一列。
三角洲湖很容易定義模式,使用下麵的代碼和執行它。注意輸入數據被拒絕,因為它不匹配表的模式。
#生成示例貸款金額貸款= sql (“選擇addr_state,演員(蘭德(10)*算作bigint)計數,演員(蘭德(10)* 10000 *算作雙)從loan_by_state_delta”)顯示器(貸款)#讓我們寫這個數據差值表loans.write.format (“δ”).mode (“添加”).save (DELTALAKE_SILVER_PATH)< span風格=“顏色:紅色;>/ / AnalysisException:模式匹配檢測到寫作時三角洲表。< / span >
如果錯誤不是由於一個列包含的數據錯誤的類型,但是因為我們(故意)添加一個新列,並不是體現在當前的模式,我們可以添加列,使用模式演化過程中糾正這個錯誤,我們會稍後解釋。
一旦數據已經通過模式執行達到這個階段,我們可以將其保存在其最終形式在三角洲湖黃金表。現在徹底清洗、轉換和準備消耗我們的機器學習模型——相當挑剔如何結構化數據!通過流媒體數據從原始狀態的銅和銀表,我們已經建立了一個可再生的數據科學管道可以把所有新數據和得到它ML-ready狀態。這些流可以低延遲或手動觸發,消除需要管理日程安排和工作在傳統的管道。
運行與三角洲湖時間旅行和MLflow可再生的實驗
既然我們已經改變了我們的數據和添加結構通過使用模式執行,我們已經準備好開始運行試驗和與我們的數據建立模型。這就是“科學”在數據科學真的踢。我們創建零和替代假說,構建和測試模型,衡量我們的模型能夠預測我們的因變量。事實上,這個階段就是我們中的許多人閃耀!
數據科學家需要能夠運行可再生的實驗。再現性是所有的基礎科學探究:如果觀察結果不能測試,測試,和複製,它是不可能得到任何接近真相。然而,我們中有誰是嚴格線性進步當有這麼多不同的方式接近相同的問題嗎?
毫無疑問,我們很多人認為有點“魔法”的路,我們走的事情,和我們到達目的地後的不確定和迂回的路線調查和探索。這是好的,隻要我們使用工具,使我們能夠顯示我們的工作,往回走,留下麵包屑,有點科學方法添加到瘋狂,如果你願意。三角洲湖的時間旅行和MLflow上麵,更多的是可能的。
三角洲湖時間旅行
數據科學家,三角洲湖最有用的功能之一是能夠回到過去使用數據版本控製,或者說“時間旅行。“三角洲湖保持有序事務日誌上執行的每個操作任何三角洲湖表,所以如果你想恢複到早期版本的表,撤銷一項意想不到的操作,或者隻是看看你的數據看上去像在一定的時間內,你可以。
很容易使用時間旅行選擇數據表的一個早期版本。用戶可以查看表的曆史,看看像此時的數據使用一個版本曆史數量(如以下代碼所示,當選擇表loan_by_state_delta版本的0
),或者通過時間戳。
%sql描述曆史loan_by_state_delta
選擇前一個版本的表,您可以使用熟悉的SQL語法,如下所示。
%sql選擇*從loan_by_state_delta版本作為的0
而不是使用表版本號,您還可以使用一個時間戳數據快照的數據是什麼樣子在一個特定的時間點。
%sql選擇*從loan_by_state_delta時間戳作為的“2019-07-14 16:30:00”
隨著MLflow(下麵討論),三角洲湖的時間旅行可以確保所有的轉換和實驗,你執行數據可追蹤、可再生的、可逆的。它可以用來:
- 創建一個數據集的狀態或表,因為它是在一個特定的時間點(創建數據“快照”)。
- 重現和驗證訓練和測試數據集,和繁殖實驗。
- 回滾任何意想不到的改變或轉換表。
命令事務日誌創建一個可核查的數據血統,這是特別有用的GRC(治理、風險和合規)應用程序。等監管GDPR CCPA,公司需要的能力證明數據被正確刪除或匿名(集體還是個人層麵)。更新、合並、刪除、插入等都可以為審計確認和驗證。
最後,數據工程師可以睡眠更容易知道人為錯誤像無意中掉行或錯誤使用時間旅行列100%是可逆的。墨菲定律著名的規定,如果任何事情都有可能出錯,它將和數據管道也不例外——錯誤,不可避免地會出現由於人為錯誤。失去的數據更可能發生,因為有人無意中編輯一個表比由於硬件故障,和這些錯誤可以撤銷。
事務日誌是有益的另一種方式是在調試一個錯誤,你看——你可以回到過去,發現一個問題是如何創建的,並修複或恢複數據集的問題。
在MLflow跟蹤實驗和工件
MLflow是一個開源的Python庫,工作跟三角洲湖密切相關,使數據科學家能夠毫不費力地日誌和跟蹤指標,工件參數和文件和圖像。用戶可以運行多個不同的實驗,改變變量和參數,知道輸入和輸出記錄和記錄。你甚至可以節省訓練模型自動hyperparameters你嚐試不同的組合,所以該模型權重已經救了,準備好一旦你選擇表現最好的模型。
在磚,MLflow是自動啟用高5.5,你可以查看MLflow運行使用MLflow運行欄,如下所示。
https://www.youtube.com/watch?v=o6SBBlhqw2A
采用數據管道與模式演化適應新的或更改要求
通常,數據工程師和科學家發現的初始建設數據管道比維護容易。更改表模式隨著時間的推移,都不可避免的由於不斷變化的業務需求,業務定義,產品更新,和時間序列數據的性質,所以重要的是要使用的工具,使這些變化更容易管理。三角洲湖不僅提供了工具模式執行模式演化過程中使用mergeSchema
選項,如下所示。
#添加mergeSchema選項loans.write.option (“mergeSchema”,“真正的”).format .mode(“δ”)(“追加”).save (DELTALAKE_SILVER_PATH)%sql內,審查當前貸款loan_by_state_delta三角洲湖表選擇addr_state,總和(“金額”)作為量從loan_by_state_delta集團通過addr_state訂單通過總和(“金額”)DESC限製10
通過添加.option (“mergeSchema”,“真正的”)
您的查詢,任何列中DataFrame而不是目標三角洲湖表添加自動寫事務的一部分。數據工程師和科學家可以使用這個選項來添加新列(也許一個新指標跟蹤,或本月的銷售數字的列)現有的機器學習生產表在不破壞現有的模型依賴於舊的列。
捆綁在一起:構建機器學習模型從三角洲湖表
與MLflow在後台記錄我們的參數和結果,我們準備將我們的數據分為訓練集和測試集,和訓練我們的機器學習模型。我們已經創建了黃金表,我們的火車模型通過轉換後的數據從我們的銀,和執行模式,使我們確信所有的數據已經進入最後一個表是符合和錯誤。我們已經建立了管道使用我們之前介紹的“種”的體係結構,使新數據不斷流入我們的管道,然後加工和保存在中間表。
完成機器學習生命周期,我們將建立一個全球語言監測模型的網格與標準化和交叉驗證的縮寫代碼所示。我們的目標是預測是否給定貸款借款人拖欠。查看完整代碼在這裏。
#使用邏輯回歸lr = LogisticRegression(麥克斯特=10elasticNetParam =0.5featuresCol =“scaledFeatures”)#構建毫升管道管道=管道(階段= model_matrix_stages +(標量)+ (lr))調優#構建參數網格模型paramGrid = ParamGridBuilder () \.addGrid (lr)。regParam, (0.1,0.01])\.build ()#執行CrossValidator模型調優crossval = CrossValidator(估計量=管道,estimatorParamMaps = paramGrid,評估者= BinaryClassificationEvaluator (),numFolds =5)#訓練調整模型,建立我們最好的模型cvModel = crossval.fit(火車)glm_model = cvModel.bestModel#返回中華民國lr_summary = glm_model.stages [len(glm_model.stages) -1].summary顯示器(lr_summary.roc)
由此產生的情節接受者操作特征(ROC)曲線如下所示。
然後我們去其他幾個比較該模型廣義線性模型的完整代碼筆記本,發現在這裏。後選擇最好的模型(一個XGBoost模型),我們用它來預測我們的測試集,情節的錢我們保存或失去了基於每個正確的或不正確的分類。數據科學家所知,挑繡你的分析在這樣艱難的美元和美分總是一個好主意,因為它讓你結果混凝土和容易理解。
顯示器(glm_valid。groupBy(“標簽”,“預測”).agg ((總和(坳(“淨”))).alias (“sum_net”)))
你可以找到一個博客進入更深度與這個例子在Scala中在這裏。
總結
三角洲湖是理想的機器學習生命周期,因為它提供了一些特性,統一數據科學、工程、數據和生產工作流程。它使連續的數據流從原始結構形式,允許新的ML模式訓練有素的新鮮,輸入數據,而現有生產模型是預測服務。它提供了模式執行確保數據處理是正確的格式通過機器學習模型,和模式演化防止模式變化,打破現有的生產模式。最後,三角洲湖“時間旅行”,即數據版本控製有序事務日誌,允許數據變更審計,如果需要複製,甚至回滾。
作為一個整體,這些特征的三角洲湖代表數據工程師和科學家的一步,使他們能夠設計可靠、有彈性、自動數據管道和機器學習模型比以往更快。
相關內容
有關更多信息,手表獲取數據準備數據的科學。