apache-spark – Spark ML:使用ChiSqSelector进行特征选择后的训练问题

我是新来的.我正在研究分类模型,并希望使用ChiSqSelector来选择模型训练的重要特征.但是,当我使用ChiSqSelector选择的功能进行训练时,会抛出以下错误:

“IllegalArgumentException:u’Feature 0被标记为Nominal(分类),但它没有指定值的数量.”

有趣的是,当我使用任何基于树的算法时,我得到了上述错误.对于,天真的偏见和逻辑回归,我没有得到错误.

当我使用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

如果有人对此有所了解,我将非常感激.提前致谢.

最佳答案 我也遇到了这个问题.功能列SparseVector – > DenseVector可以让它运行

我不知道是否有更好的方法

点赞