如何在给定 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')
)
我对训练梯度提升分类器的语法感到困惑。
但是,我不确定如何将我的 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, ...])
给出以下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')
)
我对训练梯度提升分类器的语法感到困惑。
但是,我不确定如何将我的 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, ...])