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】:可以使用fitted
Transformers
追溯此信息。与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
并将selectedFeatures
与vocabulary
进行比较:
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 特征选择和可解释性的主要内容,如果未能解决你的问题,请参考以下文章