取消
顯示的結果
而不是尋找
你的意思是:

性能調優的CrossValidator火花工作

mradassaad
新的貢獻者三世

我運行一個三倍交叉驗證的ML管道利用“GBTClassifier”的最後一步。運行需要18個小時和我在尋找反饋到如何提高性能,因為我希望這個更快。

上下文是集群配置:

{"自動定量":{“min_workers”: 1、“max_workers”: 4},“cluster_name”:“model_training”、“spark_version”:“10.3.x-cpu-ml-scala2.12”、“spark_conf”: {spark.databricks.io.cache“spark.conf.set (\”。啟用\”,“:“\”真正的\“)”,"spark.databricks.delta.preview.enabled": "true" }, "azure_attributes": { "first_on_demand": 1, "availability": "ON_DEMAND_AZURE", "spot_bid_max_price": -1 }, "node_type_id": "Standard_E8_v3", "driver_node_type_id": "Standard_E8_v3", "ssh_public_keys": [], "custom_tags": {}, "spark_env_vars": {}, "autotermination_minutes": 60, "enable_elastic_disk": true, "cluster_source": "UI", "init_scripts": [], "cluster_id": "0224-222219-94q7zutd" }

下麵定義了管道:

#定義功能組裝彙編= VectorAssembler (inputCols = feature_layers outputCol =“組裝”,handleInvalid =“保持”)#定義多項式的擴張特性px = PolynomialExpansion (= 3, inputCol =“組裝”,outputCol =“擴大”)#定義標準定標器standardScaler = standardScaler (withMean = True, withStd = True, inputCol =“擴大”,outputCol =“特性”)# Define梯度增加樹分類器gbt = GBTClassifier (stepSize = 0.3,麥克斯特= 50)= # Define管道管道管道(階段=[彙編,px, standardScaler gbt])

參數網格包含的maxDepth的3參數值。交叉驗證器使用3折疊和並行性。

paramGrid = (ParamGridBuilder ()。addGrid (gbt。maxDepth, [7、10、15])。build ()) crossval = CrossValidator(估計量=管道,estimatorParamMaps = paramGrid,評估者= BinaryClassificationEvaluator (metricName = ' areaUnderPR '), numFolds = 3, collectSubModels = False,並行性= 3)gbt_pipe = crossval.fit(火車)

火車從一個數據集,重新分區成500個分區,然後“緩存”:

df = df.na.drop () .repartition (500) df.cache () df_label = df \ .withColumn(“標簽”,F。當(df (“threshold_runoff”) < runoff_amount, 1) .otherwise (0)) .drop (threshold_runoff)火車、測試= df_label.randomSplit ([0.95, 0.05])

這是其中一個的屏幕截圖的工作:

隨機森林工作

工作總結:

隨機森林的工作總結

上半部分的存儲選項卡:

GBT存儲上半部分

你會如何診斷這個問題呢?性能改進的任何建議嗎?

我試著增加和減少分區的數量但不同算法(邏輯回歸)和500個分區相同數據集似乎工作得很好。我欣賞你的輸入!

1接受解決方案

接受的解決方案

cchalc
新的貢獻者三世

你好@Assaad Mrad,

這看起來像試圖決定將管道之間的交叉驗證器或管道中的交叉驗證器。因為你是做多項式擴張作為管道的一部分,你可能想要考慮把簡曆的管道,因為它不需要每次改裝。

所以類似:

簡曆= CrossValidator(估計量= gbt,評估者=評估者,estimatorParamMaps = paramGrid numFolds = 3,並行性= 3,種子= 42)stagesWithCV = =(彙編,px, standardScalar cv)管道管道(階段= stagesWithCV) pipelineModel = pipeline.fit (trainDF)

最安全的方法是將管道內CV防止數據泄漏。但如果這不是一個問題然後你可以得到一些性能改進。

在原帖子查看解決方案

4回複4

cchalc
新的貢獻者三世

你好@Assaad Mrad,

這看起來像試圖決定將管道之間的交叉驗證器或管道中的交叉驗證器。因為你是做多項式擴張作為管道的一部分,你可能想要考慮把簡曆的管道,因為它不需要每次改裝。

所以類似:

簡曆= CrossValidator(估計量= gbt,評估者=評估者,estimatorParamMaps = paramGrid numFolds = 3,並行性= 3,種子= 42)stagesWithCV = =(彙編,px, standardScalar cv)管道管道(階段= stagesWithCV) pipelineModel = pipeline.fit (trainDF)

最安全的方法是將管道內CV防止數據泄漏。但如果這不是一個問題然後你可以得到一些性能改進。

Kaniz
社區經理
社區經理

嗨@Assaad Mrad,隻是一個友好的後續。你還需要幫助,或@Chris Chalcraft’s響應幫助你找到解決方案了嗎?請讓我們知道。

mradassaad
新的貢獻者三世

我得到了我需要的響應。謝謝你Kaniz !

@Assaad Mrad,謝謝你的更新。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map