【问题标题】:Spark ML: Issue in training after using ChiSqSelector for feature selectionSpark ML:使用 ChiSqSelector 进行特征选择后的训练问题
【发布时间】:2018-02-26 09:35:10
【问题描述】:

我是新来的火花。我正在研究一个分类模型,想使用 ChiSqSelector 来选择模型训练的重要特征。但是,当我使用 ChiSqSelector 选择的特征进行训练时,它会抛出以下错误:

“IllegalArgumentException: u'Feature 0 被标记为 Nominal (categorical),但它没有指定数量的值。”

有趣的是,当我使用任何基于树的算法时,我得到了上述错误。因为,朴素偏差和逻辑回归,我没有得到错误。

当我使用 spark 文档中示例代码中提供的数据时,我发现了相同的结果。使用 spark 2.1.1 文档中的代码可以重现该错误:

from pyspark.ml.feature import ChiSqSelector
from pyspark.ml.linalg import Vectors

df = spark.createDataFrame([
    (7, Vectors.dense([0.0, 0.0, 18.0, 1.0]), 1.0,),
    (8, Vectors.dense([0.0, 1.0, 12.0, 0.0]), 0.0,),
    (9, Vectors.dense([1.0, 0.0, 15.0, 0.1]), 0.0,)], ["id", "features", 
"clicked"])
selector = ChiSqSelector(numTopFeatures=2, featuresCol="features",
                     outputCol="selectedFeatures", labelCol="clicked")
result = selector.fit(df).transform(df)
print("ChiSqSelector output with top %d features selected" % 
selector.getNumTopFeatures())
result.show()
from pyspark.ml.classification import DecisionTreeClassifier
dt = DecisionTreeClassifier(labelCol="clicked", 
featuresCol="selectedFeatures")
model = dt.fit(result)

有人在 Apache Spark 用户列表(以下链接)中报告了该问题,但没有人回应。 http://apache-spark-user-list.1001560.n3.nabble.com/Application-of-ChiSqSelector-results-in-quot-Feature-0-is-marked-as-Nominal-quot-td27040.html

如果有人对此有所了解,我将不胜感激。提前致谢。

【问题讨论】:

    标签: apache-spark machine-learning apache-spark-mllib feature-selection apache-spark-ml


    【解决方案1】:

    我也遇到了这个问题。特征列 SparseVector -> DenseVector 可以让它运行 不知道有没有更好的办法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 2020-07-30
      • 2015-08-10
      • 2021-04-20
      • 2017-06-03
      • 2023-03-04
      • 2012-01-08
      相关资源
      最近更新 更多