SparkException:卡方检验期望因子
Posted
技术标签:
【中文标题】SparkException:卡方检验期望因子【英文标题】:SparkException: Chi-square test expect factors 【发布时间】:2019-10-29 13:20:59 【问题描述】:我有一个包含 42 个特征和 1 个标签的数据集。 我想在执行决策树之前应用库 spark ML 的选择方法卡方选择器来检测异常,但是在卡方选择器的应用过程中遇到了这个错误:
org.apache.spark.SparkException:作业因阶段失败而中止: 阶段 17.0 中的任务 0 失败 1 次,最近一次失败:丢失任务 17.0 阶段的 0.0(TID 45,本地主机,执行程序驱动程序):org.apache.spark.SparkException:卡方检验预期因素 (分类值),但发现超过 10000 个不同的值 第 11 列。
这是我的源代码:
from pyspark.ml.feature import ChiSqSelector
selector = ChiSqSelector(numTopFeatures=1, featuresCol="features",outputCol="features2", labelCol="label")
result = selector.fit(dfa1).transform(dfa1)
result.show()
【问题讨论】:
请添加 dfa1.show(1) 和 dfa1.printSchema() 的结果以便更好地理解您的问题,您确定您的特征 col 是数组/向量类型吗? @chlebek show(1): +--------------------+-----+ |特点|标签| +--------------------+-----+ |[0.121478,0.0,0.0...| 0| +--------------------+-----+ @chlebek printSchea(): |-- 特征:向量 (nullable = true) |-- 标签:整数 (nullable = true) 谢谢 【参考方案1】:正如您在错误消息中看到的那样,您的 features
列在向量中包含超过 10000 个不同的值,并且看起来它们是连续的而不是分类的,ChiSq 只能处理 10k 个类别,并且您无法增加此值。
/**
* Max number of categories when indexing labels and features
*/
private[spark] val maxCategories: Int = 10000
在这种情况下,您可以使用VectorIndexer
和.setMaxCategories()
参数
【讨论】:
请在我测试 VectorIndexer 时遇到同样的错误 -其他问题,我的目标是用最少的特征获得最好的准确性,我想测试 ChiSquare 以将其与其他选择方法进行比较。 -那么,争论并说其他方法比不支持特征的卡方更可靠,更兼容我的数据集是否有意义> 10K --------提前谢谢以上是关于SparkException:卡方检验期望因子的主要内容,如果未能解决你的问题,请参考以下文章