Как передать только необходимые функции в трубопровод после SelectKBestPython

Программы на Python
Anonymous
Как передать только необходимые функции в трубопровод после SelectKBest

Сообщение Anonymous »

У меня есть обычный табличный набор данных, 100 функций из базы данных добавляются < /p>
Я хочу подтолкнуть его в обычную Sklearn.pipeline, в которой будет предварительная обработка, кодировка, некоторые пользовательские Трансформаторы и т. Д. < /p>
предпоследняя оценка будет SelectKbest (k = 10) < /p>
Для модели на самом деле необходимы только 10 функций, и Трубопровод потребует всех 100 функций < /p>
, и я хотел бы использовать в производственной модели только «необходимые» функции. Я хочу избежать дополнительных функций, чтобы сократить время расчета. Я не знаю, сколько это «стандартная» практика < /p>
Я понимаю, почему она просто не работает, потому что 150 функций могут на самом деле перейти к вводу SelectKbest. В этом случае не очевидно, как определить эти «необходимые» функции. /> Основной пример: < /p>
from sklearn.datasets import load_diabetes
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest, f_regression
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline

data = load_diabetes(as_frame=True)
X, y = data.data, data.target

X = X.iloc[:, :10]

pipeline = Pipeline([
('scaler', StandardScaler()),
('feature_selection', SelectKBest(score_func=f_regression, k=4)),
('model', LinearRegression())
])

pipeline.fit(X, y)

selected_features = pipeline.named_steps['feature_selection'].get_support()
selected_features = X.columns[selected_features]
print(f"Selected features: {selected_features}")
# Selected features: Index(['bmi', 'bp', 's4', 's5'], dtype='object')

prod_data = X[selected_features]

pred = pipeline.predict(prod_data)

# Here will be an Exception
# ValueError: The feature names should match those that were passed during fit.
# Feature names seen at fit time, yet now missing:
# - age
# - s1
# - s2
# - s3
# - s6
# - ...


Подробнее здесь: https://stackoverflow.com/questions/769 ... electkbest

Вернуться в «Python»