确定数据集的列在任何给定的 Scikit-Learn Transformer 下是否不变

Ale*_*xNe 5 python scikit-learn

给定 sklearn tranformer t,有没有办法确定是否t更改任何给定输入数据集的列/列顺序X而不将其应用于数据?

例如,和t = sklearn.preprocessing.StandardScaler的列之间存在一对一的映射,即,而 的情况显然不是这样。Xt.transform(X)X[:, i] -> t.transform(X)[:, i]sklearn.decomposition.PCA

其推论是:我们能否知道,通过应用 ,输入的列将如何改变t,例如已经安装的选择了哪些列sklearn.feature_selection.SelectKBest

不是在寻找针对特定变压器的解决方案,而是在寻找适用于所有或至少多种变压器的解决方案。

如果需要,请随意实现您自己的 Pipeline 类或包装器。

Stu*_*olf 2

并不是所有的“变形金刚”都有这个.get_feature_names_out方法。sklearn github中讨论了它的实现。在同一个链接中,您可以看到,引用@thomasjpfan,_OneToOneFeatureMixin变压器使用一个类,在输入和输出特征之间具有简单的一对一对应关系

仅限于 sklearn,我们可以检查 Transformer 或 Estimator 是否是 的子类_OneToOneFeatureMixin,例如:

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest
from sklearn.base import _OneToOneFeatureMixin

tf = {'pca':PCA(),'standardscaler':StandardScaler(),'kbest':SelectKBest()}

[i+":"+str(issubclass(type(tf[i]),_OneToOneFeatureMixin)) for i in tf.keys()]

['pca:False', 'standardscaler:True', 'kbest:False']
Run Code Online (Sandbox Code Playgroud)

这些将是_OneToOneFeatureMixin 的源代码