[英]RandomForestClassifier for multiclass classification Spark 2.x
我正在嘗試使用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'
然后在轉換內部,定義元數據時會出現以下錯誤:
錯誤評估方法: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
可以使用此處提供的解決方案,並且在Spark 2.2.0上 ,此問題已在上游修復。
您可以使用DataFrame.na.fill(Map(“ colName1”,val1),(“ colName2”,val2),..))
哪里:
DataFrame-DataFrame對象; “ colName”-列名,val-替換為“ colName”列中的空值的值。
填充所有空值后,使用特征轉換。
您可以在as的所有列中檢查空數:
for(列<-DataFrame.columns){DataFrame.filter(DataFrame(column)=== null || DataFrame(column).isNull || DataFrame(column).isNan).count()
}
要么
DataFrame.count()將為您提供DataFrame中的總行數。 然后可以通過DataFrame.describe()判斷空數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.