如何解决在 sklearn Pipeline 中为每列使用特定的 IterativeImputer
我正在运行回归算法并使用 sklearn Pipelines 进行预处理。最初,我对所有数字列都使用了迭代输入法,但我更愿意为某些列添加一些额外的步骤,因此对每个列或至少某些列使用不同的预处理步骤。在某些列中,零值是有效的,而在其他列中,缺失值就是这样标记的。
from sklearn.impute import IterativeImputer
from sklearn.impute import KNNImputer
from sklearn.ensemble import ExtraTreesRegressor,RandomForestRegressor
import sklearn.preprocessing
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(df_ml.iloc[:,:].drop(columns=['ClosePrice']),df_ml.iloc[:,:]['ClosePrice'],test_size=.33
)
tic = time.perf_counter()
cat_pipe = Pipeline([
('imputer',SimpleImputer(strategy='most_frequent'))
])
# Define numerical pipeline
# IterativeImputer(estimator=ExtraTreesRegressor())
num_pipe = Pipeline([
('imputer',IterativeImputer(estimator=ExtraTreesRegressor(),missing_values=-1))
preprocessor = ColumnTransformer(transformers=[('cat',cat_pipe,categorical),('num',num_pipe,numerical)
pipe = Pipeline(steps=[('preprocessor',preprocessor)])
#pipe.fit(X_train,y_train)
X_train_pre = pipe.fit_transform(X_train)
X_test_pre = pipe.fit_transform(X_test)
print(X_train_pre.shape,X_test_pre.shape)
此处的数值表示单个列,其中 -1 是缺失值指示符。当我运行此代码时,所有缺失值都变成了相同的值 - 6.77。
pd.DataFrame(X_train_pre).iloc[:,-1].value_counts().head()
6.000000 899
7.000000 823
8.000000 673
5.000000 671
6.772953 511
我可以看到这是因为估算器只考虑标记为数字的一列并取平均值。如何使它能够考虑数据集中的所有列,尤其是目标变量?
更新:当我包含多个列时,结果不再相同,但我仍然无法指定在为每个列使用特定管道时要添加哪些列以供输入器考虑。>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。