【问题标题】:SparkException: Chi-square test expect factorsSparkException:卡方检验期望因子
【发布时间】: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) 谢谢

标签: python apache-spark pyspark chi-squared


【解决方案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 --------提前谢谢
猜你喜欢
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
  • 2021-06-16
  • 2017-01-07
  • 2019-12-12
  • 2020-12-01
相关资源
最近更新 更多