我有一個很好的管道,它執行以下操作:
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) 可以解決這個問題,但這意味著我需要為每個標簽創建兩個單獨的管道。
有沒有辦法在這個管道中包含特征選擇而不訴諸于此?
uj5u.com熱心網友回復:
由于您希望(可能)為每個輸出使用不同的功能子集,因此您應該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),
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/479022.html
標籤:Python 机器学习 scikit-学习 管道 特征选择
上一篇:僅在某些列上使用onehot編碼器時如何獲取特征名稱sklearn
下一篇:在樸素貝葉斯中應用交叉驗證