python - 对流水线中的同一个估计器使用不同的特征

标签 python machine-learning scikit-learn pipeline feature-selection

我有一个很好的管道,可以执行以下操作:

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/

相关文章:

python - 如何根据 python 中的位置将 1 列数据框转换为 3 列

python - 使用 ftplib 连接到 FTP TLS 1.2 服务器

python - 如何在 tensorflow 中恢复 session ?

python - 使用 scikit-learn 的顺序 k-means 聚类

python - 处理 sklearn MultinomialNB 中的负值

python - 在双引号和单引号中打印

Python:使用 Pony ORM 进行简单排序

matlab - lib Linear 的 50% 准确度问题

python - 获取类型错误 : '(slice(None, None, None), 0)' is an invalid key

python - 大型文档语料库上的 Sklearn TFIDF