多类分类火花2.x的RandomForestClassifier



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

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

我有一个带有许多字符串类型列的数据框。我为每个人创建了一个StringIndexer。

我是通过使用VectorAssembler链接StringIndexer的弦线来创建管道,最后是Label Converter跟随的RantlyForestClassifier。

我已经使用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'

然后在转换内,定义元数据时存在此错误:

错误评估方法:org $ apache $ spark $ ml $ $ stringIndexermodel $$ labeltoindex 方法抛出了'java.lang.nullpointerexception'异常。无法评估org.apache.spark.sql.types.metadata.tostring((

这是因为我在索引的某些列上无效。

我可以通过以下示例重现错误。

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/src/main/scala/scala/scala/org/apache/spark/spark/spark/ml/feature/stringindexer.scala

可以使用此处存在的解决方案,在Spark 2.2.0上,该问题已固定在上游。

您可以使用dataframe.na.fill(map(" colname1",val1(,(" colname2",val2(,..((

其中:

dataFrame -DataFrame对象;" colname" - 列的名称&val-替换nulls的值,如果在" colname"列中发现了任何。

使用特征转换,填充所有nulls。

您可以在AS的所有列中检查以下所有列中的null数量:

for(column< - dataframe.columns({dataframe.filter(dataframe(column(=== null || dataframe(column(.isnull || dataframe(column(.isnan(.count((

}

dataframe.count((将为您提供数据帧中的总行数。然后可以通过dataframe.describe((

来判断null的数量

相关内容

  • 没有找到相关文章

最新更新