选择2000+列作为分类ML的功能

时间:2017-09-22 14:03:42

标签: scala apache-spark machine-learning apache-spark-mllib

我正在寻找如何从Dataframe中选择许多列(2000+)作为功能。我不想一个一个地写下这个名字。 我正在进行分类,我有大约2000个功能。

数据是一个包含大约2000列的Dataframe。 首先,我获取了DF的所有列名称并删除了9列,因为我不需要它们。

我的想法是使用所有列名称来提供VectorAssembler。结果应该是第一行的[第一个特征的值,第二个特征的值,第三个特征值...],这对于我的所有Dataframe都是如此。

但我有这个错误:

  

java.lang.IllegalArgumentException:Field" features"不存在。

编辑:如果有什么不清楚的地方,请告诉我,我可以解决它。

我删除了一些变形金刚,因为它不是我的问题所在。(StringIndexer,VectorIndexer,IndexToString)

val array = data.columns drop(9)

val assembler = new VectorAssembler()
  .setInputCols(array)
  .setOutputCol("features")    

val Array(trainingData, testData) = data.randomSplit(Array(0.8, 0.2))

val rf = new RandomForestClassifier()
  .setLabelCol("indexedLabel")
  .setFeaturesCol("features")
  .setNumTrees(50)


val pipeline = new Pipeline()
  .setStages(Array(assembler, rf))

val model = pipeline.fit(trainingData)

编辑2 我解决了我的问题。我取下了Vector Indexer并在VectorAssembler中使用了数组,它运行得很好。 至少,我得到一个结果。

0 个答案:

没有答案