PySpark 有没有办法执行特征选择,但保留或获得映射回原始特征索引/描述?
例如:
“原始特征”)。
CountVectorizer
(col =“功能”)。 ChiSqSelector
选择前 1000 个特征 (col = "selectedFeatures)。如何获得与前 1000 个特征相对应的原始特征字符串(甚至只是步骤 2 中原始“特征”列中这些选定特征的相应索引)?
最佳答案
可以使用 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}}
关于apache-spark - PySpark 特征选择和可解释性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47823613/