【问题标题】:How to train SparkML gradient boosting classifer given a RDD如何在给定 RDD 的情况下训练 Spark ML 梯度提升分类器
【发布时间】:2016-09-15 15:59:39
【问题描述】:

鉴于以下 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 假定所有特征都已经在一个列中。

【问题讨论】:

  • 链接教程假定DataFrame,但不是RDD

标签: apache-spark pyspark apache-spark-ml


【解决方案1】:

您可以使用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 转换为数据帧,是否意味着它必须被评估?我的数据集太大而无法放入内存
  • Spark DataFrame 仍然是一个分布式数据集。您可以通过rdd.toDF() 进行此操作。
猜你喜欢
  • 2019-09-05
  • 2020-04-10
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 2016-11-09
  • 2019-06-27
相关资源
最近更新 更多