如何在scikit-learn的FunctionTransformer中使用feature_names_out?
解决FunctionTransformer中feature_names_out参数报错问题
错误原因
feature_names_out是scikit-learn 1.2.0版本才新增的参数,你的scikit-learn版本低于1.2.0,所以初始化FunctionTransformer时会抛出TypeError: __init__() got an unexpected keyword argument 'feature_names_out'。
解决方案
方案1:升级scikit-learn版本
执行以下命令将scikit-learn升级到1.2.0及以上版本:
pip install --upgrade scikit-learn
升级后,原代码即可正常运行:
from sklearn.preprocessing import FunctionTransformer import pandas as pd import numpy as np X = pd.Series(data=[1, 2, 3], name='numbers') transformer = FunctionTransformer(np.log, feature_names_out='one-to-one') transformed_X = transformer.transform(X) print(transformer.get_feature_names_out()) # 输出['numbers']
方案2:不升级版本,自定义特征名返回逻辑
如果无法升级版本,可以通过继承FunctionTransformer自定义get_feature_names_out方法:
from sklearn.preprocessing import FunctionTransformer import pandas as pd import numpy as np class CustomFunctionTransformer(FunctionTransformer): def get_feature_names_out(self, input_features=None): # 直接返回输入的特征名,实现one-to-one的效果 return input_features if input_features is not None else [] X = pd.Series(data=[1, 2, 3], name='numbers') transformer = CustomFunctionTransformer(np.log) transformed_X = transformer.transform(X) print(transformer.get_feature_names_out(['numbers'])) # 输出['numbers']
内容的提问来源于stack exchange,提问作者saad
相关产品推荐
相关产品推荐

