我有一个正在运行的代码,但是训练模型不是管道的一部分,有没有办法在这里做到这一点。
注意: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"生成步骤?或任何其他帮助?
此致
答案 0 :(得分:0)
只需将其添加到"阶段" PARAM:
from pyspark.ml.regression import GBTRegressor
gr = GBTRegressor()
pipeline = Pipeline(stages=string_indexers + [assembler, gr])