【问题标题】:Spark MLlib: Including categorical featuresSpark MLlib:包括分类特征
【发布时间】:2017-03-24 22:24:35
【问题描述】:

将分类变量(字符串和整数)包含到 MLlib 算法的特征中的正确或最佳方法是什么?

在分类变量上使用OneHotEncoders 然后在VectorAssembler 中包含其他列的输出列是否正确,如下面的代码?

原因是我最终得到了一个包含这样行的数据框,其中看起来像 feature3feature4 组合起来看起来它们与单独的两个分类特征具有相同的重要性“级别”。

+------------------+-----------------------+---------------------------+
|prediction        |actualVal |features                                |
+------------------+-----------------------+---------------------------+
|355416.44924898935|990000.0  |(17,[0,1,2,3,4,5,10,15],[1.0,206.0])    |
|358917.32988024893|210000.0  |(17,[0,1,2,3,4,5,10,15,16],[1.0,172.0]) |
|291313.84175674635|4600000.0 |(17,[0,1,2,3,4,5,12,15,16],[1.0,239.0]) |

这是我的代码:

val indexer = new StringIndexer()
  .setInputCol("stringFeatureCode")
  .setOutputCol("stringFeatureCodeIndex")
  .fit(data)
val indexed = indexer.transform(data)

val encoder = new OneHotEncoder()
  .setInputCol("stringFeatureCodeIndex")
  .setOutputCol("stringFeatureCodeVec")

var encoded = encoder.transform(indexed)

encoded = encoded.withColumn("intFeatureCodeTmp", encoded.col("intFeatureCode")
  .cast(DoubleType))
  .drop("intFeatureCode")
  .withColumnRenamed("intFeatureCodeTmp", "intFeatureCode")

val intFeatureCodeEncoder = new OneHotEncoder()
  .setInputCol("intFeatureCode")
  .setOutputCol("intFeatureCodeVec")

encoded = intFeatureCodeEncoder.transform(encoded)

val assemblerDeparture =
  new VectorAssembler()
    .setInputCols(
      Array("stringFeatureCodeVec", "intFeatureCodeVec", "feature3", "feature4"))
    .setOutputCol("features")
var data2 = assemblerDeparture.transform(encoded)

val Array(trainingData, testData) = data2.randomSplit(Array(0.7, 0.3))

val rf = new RandomForestRegressor()
  .setLabelCol("actualVal")
  .setFeaturesCol("features")
  .setNumTrees(100)

【问题讨论】:

    标签: apache-spark apache-spark-mllib


    【解决方案1】:
    • 一般来说这是推荐的方法。
    • 在工作树模型时,它是不必要的,应该避免。您只能使用StringIndexer

    【讨论】:

    • 这是什么意思?只有字符串索引器?如何将索引列提供给决策树?他们采用一列特征向量...
    猜你喜欢
    • 2016-12-10
    • 2016-03-01
    • 2015-08-24
    • 2016-09-04
    • 2016-12-03
    • 2017-10-24
    • 2016-04-22
    • 1970-01-01
    • 2017-01-28
    相关资源
    最近更新 更多