如何将(py)spark中的GradientBoostedTrees等训练算法添加到管道

时间:2016-05-13 10:44:11

标签: python apache-spark pyspark apache-spark-mllib

我有一个正在运行的代码,但是训练模型不是管道的一部分,有没有办法在这里做到这一点。

注意:char_cols& num_cols是包含字符串&的名称的列表。数字数据。

以下代码效果很好

string_indexers = [
   StringIndexer(inputCol=x, outputCol="int_{0}".format(x))
   for x in char_cols]

assembler = VectorAssembler(
    inputCols= ["int_"+x for x in char_cols] + num_cols,
    outputCol="features"
)
pipeline = Pipeline(stages=string_indexers + [assembler])
features_model = pipeline.fit(df)
indexed = features_model.transform(df)

ml_df = indexed.select(col("OutputVar").cast("int").alias("label"), col("features")).map(lambda row: LabeledPoint(row.label, row.features))

gbm = GradientBoostedTrees.trainRegressor(sc.parallelize(ml_df.collect()), categoricalFeaturesInfo={0:24,1:3,2:4,3:5,4:107},  numIterations=3, maxBins=120)

但是在尝试在GradientBoostedTrees的管道中添加训练模型(gbm)时,似乎没有直接的方法。 我需要这样的东西:

pipeline = Pipeline(stages=string_indexers + [assembler] + [gbm])

并直接执行此操作:

model = pipeline.fit(trainingData)
predictions = model.transform(testData)

虽然pyspark.ml.regression中的GBTRegressor输入了" labelCol"和" featuresCol"这可以帮助我们,但对于GradientBoostedTrees我找不到相同的方法。 是否可以管道" LabeledPoint"生成步骤?或任何其他帮助?

此致

1 个答案:

答案 0 :(得分:0)

只需将其添加到"阶段" PARAM:

from pyspark.ml.regression import GBTRegressor

gr = GBTRegressor()
pipeline = Pipeline(stages=string_indexers + [assembler, gr])