【问题标题】:RandomForestClassifier for multiclass classification Spark 2.x用于多类分类 Spark 2.x 的 RandomForestClassifier
【发布时间】:2018-07-22 20:05:59
【问题描述】:

我正在尝试通过 spark 2.1.1 使用随机森林进行多类分类

像往常一样定义我的管道后,它在索引阶段失败了。

我有一个包含许多字符串类型列的数据框。我为它们中的每一个创建了一个 StringIndexer。

我通过将 StringIndexers 与 VectorAssembler 链接起来创建一个管道,最后是一个 RandomForestClassifier,然后是一个标签转换器。

我用distinct().count()检查了我所有的专栏,以确保我没有太多的类别等等......

经过一些调试,我了解到每当我开始对某些列进行索引时,都会出现以下错误... 调用时:

  val indexer = udf { label: String =>
  if (labelToIndex.contains(label)) {
    labelToIndex(label)
  } else {
    throw new SparkException(s"Unseen label: $label.")
  }
}

Error evaluating methog: 'labelToIndex'
Error evaluating methog: 'labels'

然后在transformation里面,定义元数据的时候出现这个错误:

错误评估方法:org$apache$spark$ml$feature$StringIndexerModel$$labelToIndex 方法引发了“java.lang.NullPointerException”异常。无法评估 org.apache.spark.sql.types.Metadata.toString()

发生这种情况是因为我在索引的某些列上有 null。

我可以用下面的例子重现错误。

val df = spark.createDataFrame(
  Seq(("asd2s","1e1e",1.1,0), ("asd2s","1e1e",0.1,0), 
      (null,"1e3e",1.2,0), ("bd34t","1e1e",5.1,1), 
      ("asd2s","1e3e",0.2,0), ("bd34t","1e2e",4.3,1))
).toDF("x0","x1","x2","x3")

val indexer = new 
StringIndexer().setInputCol("x0").setOutputCol("x0idx")

indexer.fit(df).transform(df).show

// java.lang.NullPointerException

https://issues.apache.org/jira/browse/SPARK-11569

https://github.com/apache/spark/blob/branch-2.1/mllib/src/main/scala/org/apache/spark/ml/feature/StringIndexer.scala

【问题讨论】:

标签: scala apache-spark apache-spark-mllib random-forest multiclass-classification


【解决方案1】:

你可以使用 DataFrame.na.fill(Map("colName1", val1), ("colName2", val2),..))

地点:

DataFrame - DataFrame 对象; "colName" - 列的名称 & val - 如果在 "colName" 列中找到任何空值,则替换它的值。

在填充所有空值后使用特征转换。

您可以检查 as 的所有列中的空值数:

for ( 列

}

DataFrame.count() 将为您提供 DataFrame 中的总行数。然后可以通过DataFrame.describe()判断null的个数

【讨论】:

    【解决方案2】:

    可以使用here 提供的解决方案,在Spark 2.2.0 上,问题已在上游修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-11
      • 2016-12-24
      • 2017-07-16
      • 2016-03-03
      • 2021-08-20
      • 2015-11-08
      • 2016-08-17
      • 2017-01-03
      相关资源
      最近更新 更多