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

並行運行多個線性回歸(循環加速)

mbejarano89
新的貢獻者三世

你好,

我運行多個線性回歸dataframe,我運行一個回歸每獨特價值列“項目”,將模型應用於一個新的數據集(vector_new),最後聯合循環運行的結果。問題是,性能很差,有其他的方法,我可以加快這一進程?

這是代碼的一個片段:

emptyRDD = spark.sparkContext.emptyRDD () lm_results = spark.createDataFrame (emptyRDD、模式),因為我在項目:df_item = df.where(坳(“項目”)= =我)vectorAssembler = vectorAssembler (inputCols = [' x '], outputCol =“特性”)vector_df = vectorAssembler.transform premodel_df = vector_df (dt)。選擇([‘功能’,' Y ']) lr = LinearRegression (featuresCol =“特性”,labelCol = y_pred,麥克斯特= 10,regParam = 0, elasticNetParam = 0) lr_model = lr.fit r_squared = lr_model.summary (premodel_df)。r2項目結果=我= (lr_model.transform vector_new .select (“x”y_pred”) .withColumn(“項目”,點燃(i))) lm_results = lm_results.union(結果)

1接受解決方案

接受的解決方案

匿名
不適用

@Marcela Bejarano:

加快這一進程的一個方法是避免使用一個循環,而是使用火花的groupBy和地圖功能。這是一個例子:

從pyspark。毫升從pyspark.ml進口管道。從pyspark.ml進口VectorAssembler特性。回歸進口LinearRegression vectorAssembler = vectorAssembler (inputCols = [' x '], outputCol =“特性”)#集團通過“物品”列和線性回歸模型#適用於每組lr_models = df.groupBy(“項目”)。gg (F.collect_list (x) .alias (“x”), F.collect_list (y_pred) .alias (y)) .rdd。地圖(λ行:(行(“項目”),LinearRegression (featuresCol =“特性”,labelCol = y_pred,麥克斯特= 10,regParam = 0, elasticNetParam = 0)。適合(vectorAssembler。變換(火花。createDataFrame (zip(行“x”,行[y]),模式= [' x ', ' y_pred ']))。選擇(“特性”,“y_pred”)))) .collectAsMap() #應用模型的新數據集的結果=沒有項目,在lr_models.items lr_model (): temp_result = lr_model.transform (vector_new.select (x)) temp_result = temp_result。withColumnRenamed(“預測”、“y_pred”)。withColumn(“項目”,點燃(項目)),如果結果是沒有:結果=其他temp_result:結果= result.union (temp_result) # lm_results現在包含所有線性回歸的結果lm_results =結果

這種方式組織數據的“物品”列使用groupBy函數,然後應用線性回歸模型每組使用map函數。結果被收集到一個字典,其中的關鍵是項和值是訓練模型。然後,將模型應用於新的數據集和使用聯盟函數相結合的結果。

注意,這種方法使用collectAsMap函數,它收集結果變成一個字典,可以裝入內存。如果獨特的物品的數量非常大,您可能需要使用一種不同的方法來收集結果。

在原帖子查看解決方案

1回複1

匿名
不適用

@Marcela Bejarano:

加快這一進程的一個方法是避免使用一個循環,而是使用火花的groupBy和地圖功能。這是一個例子:

從pyspark。毫升從pyspark.ml進口管道。從pyspark.ml進口VectorAssembler特性。回歸進口LinearRegression vectorAssembler = vectorAssembler (inputCols = [' x '], outputCol =“特性”)#集團通過“物品”列和線性回歸模型#適用於每組lr_models = df.groupBy(“項目”)。gg (F.collect_list (x) .alias (“x”), F.collect_list (y_pred) .alias (y)) .rdd。地圖(λ行:(行(“項目”),LinearRegression (featuresCol =“特性”,labelCol = y_pred,麥克斯特= 10,regParam = 0, elasticNetParam = 0)。適合(vectorAssembler。變換(火花。createDataFrame (zip(行“x”,行[y]),模式= [' x ', ' y_pred ']))。選擇(“特性”,“y_pred”)))) .collectAsMap() #應用模型的新數據集的結果=沒有項目,在lr_models.items lr_model (): temp_result = lr_model.transform (vector_new.select (x)) temp_result = temp_result。withColumnRenamed(“預測”、“y_pred”)。withColumn(“項目”,點燃(項目)),如果結果是沒有:結果=其他temp_result:結果= result.union (temp_result) # lm_results現在包含所有線性回歸的結果lm_results =結果

這種方式組織數據的“物品”列使用groupBy函數,然後應用線性回歸模型每組使用map函數。結果被收集到一個字典,其中的關鍵是項和值是訓練模型。然後,將模型應用於新的數據集和使用聯盟函數相結合的結果。

注意,這種方法使用collectAsMap函數,它收集結果變成一個字典,可以裝入內存。如果獨特的物品的數量非常大,您可能需要使用一種不同的方法來收集結果。

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

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

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

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

Baidu
map