我有一个很好的管道,可以执行以下操作:
pipeline = Pipeline([
("first transformer", ct),
("second transformer", OHE),
('standard_scaler', MinMaxScaler()),
("logistic regression", estimator)
])
估算器部分是这样的:
estimator = MultiOutputClassifier(
estimator = LogisticRegression(penalty="l2", C=2)
)
Label DataFrame 的形状为 (1000, 2),到目前为止一切正常。
为了调整模型,我现在尝试添加 SelectKBest 以限制用于计算的特征。不幸的是,将此代码添加到管道中:
('feature_selection', SelectKBest(score_func=f_regression, k=9))
返回此错误:
ValueError: y should be a 1d array, got an array of shape (20030, 2) instead.
我知道它从何而来,仅使用一个标签 (1000, 1) 即可解决问题,但这意味着我需要为每个标签创建两个单独的管道。
有没有什么方法可以在这个管道中包含特征选择而不诉诸于此?
最佳答案
由于您希望(可能)为每个输出使用不同的功能子集,您应该将 SelectKBest
放入带有 LogisticRegression
的管道中 MultiOutputClassifier
。
clf = Pipeline([
("feature_selection", SelectKBest(score_func=f_regression, k=9)),
("logistic regression", LogisticRegression(penalty="l2", C=2)),
])
estimator = MultiOutputClassifier(clf)
pipeline = Pipeline([
("first transformer", ct),
("second transformer", OHE),
('standard_scaler', MinMaxScaler()),
("select_and_model", estimator),
])
关于python - 对流水线中的同一个估计器使用不同的特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72275487/