如何在给定 RDD 的情况下训练 Spark ML 梯度提升分类器

How to train SparkML gradient boosting classifer given a RDD

给出以下rdd

training_rdd = rdd.select(
    # Categorical features
    col('device_os'), # 'ios', 'android'

    # Numeric features
    col('30day_click_count'), 
    col('30day_impression_count'),
    np.true_divide(col('30day_click_count'), col('30day_impression_count')).alias('30day_click_through_rate'),

    # label
    col('did_click').alias('label')
)

我对训练梯度提升分类器的语法感到困惑。

我正在学习本教程。 https://spark.apache.org/docs/latest/ml-classification-regression.html#gradient-boosted-tree-classifier

但是,我不确定如何将我的 4 个特征列放入向量中。因为 VectorIndexer 假定所有特征都已经在一列中。

您可以使用VectorAssembler生成特征向量。请注意,您必须先将 rdd 转换为 DataFrame

from pyspark.ml.feature import VectorAssembler
vectorizer = VectorAssembler()

vectorizer.setInputCols(["device_os",
                         "30day_click_count",
                         "30day_impression_count",
                         "30day_click_through_rate"])

vectorizer.setOutputCol("features")

因此,您需要将 vectorizer 作为第一阶段放入 Pipeline:

pipeline = Pipeline([vectorizer, ...])