PySpark 特征选择和可解释性

Posted

技术标签:

【中文标题】PySpark 特征选择和可解释性【英文标题】:PySpark feature selection and interpretability 【发布时间】:2017-12-14 23:22:15 【问题描述】:

PySpark 中是否有一种方法可以执行特征选择,但保留或获取到原始特征索引/描述的映射?

例如:

    我有一个原始特征字符串的 StringArray 列(col = “原始特征”)。 我已使用以下方法将它们转换为数字计数 CountVectorizer (col = "功能")。 然后我运行了ChiSqSelector 选择前 1000 个特征 (col = "selectedFeatures)。

如何获得与前 1000 个特征相对应的原始特征字符串(或者甚至只是步骤 #2 中原始“特征”列中这些选定特征的相应索引)?

【问题讨论】:

【参考方案1】:

可以使用fittedTransformers 追溯此信息。与Pipeline 一样:

from pyspark.ml.feature import *
from pyspark.ml import Pipeline
import numpy as np

data = spark.createDataFrame(
    [(1, ["spark", "foo", "bar"]), (0, ["kafka", "bar", "foo"])],
    ("label", "rawFeatures"))

model = Pipeline(stages = [
    CountVectorizer(inputCol="rawFeatures", outputCol="features"),
    ChiSqSelector(outputCol="selectedFeatures", numTopFeatures=2)
]).fit(data)

你可以提取Transformers:

vectorizer, chisq = model.stages

并将selectedFeaturesvocabulary 进行比较:

np.array(vectorizer.vocabulary)[chisq.selectedFeatures]
array(['spark', 'kafka'], dtype='<U5')

很遗憾,Transformers 的这种组合不保留标签元数据:

features_meta, selected_features_meta = (f.metadata for f in model
    .transform(data).select("features", "selectedFeatures")
    .schema
    .fields)

features_meta

selected_features_meta
'ml_attr': 'attrs': 'nominal': ['idx': 0, 'idx': 1], 'num_attrs': 2

【讨论】:

以上是关于PySpark 特征选择和可解释性的主要内容,如果未能解决你的问题,请参考以下文章

特征选择: 卡方检验F 检验和互信息

Pyspark 和 PCA:如何提取此 PCA 的特征向量?我如何计算他们解释的方差有多大?

特征选择之FeatureSelector工具

特征工程之特征选择----降维算法PCA初探

特征工程之特征选择----降维算法PCA重要参数

特征选择:11 种特征选择策略总结!