Я пытаюсь понять, как создать рабочий процесс для sklearn.neighbors.KNeighborsRegressor
, который включает:
- нормализовать особенности
- выбор функций (лучшее подмножество из 20 числовых функций, без конкретного итога)
- перекрестная проверка гиперпараметра K в диапазоне от 1 до 20
- перекрестная проверка модели
- использует RMSE в качестве метрики ошибок
В scikit-learn так много разных вариантов, что я немного ошеломлен, пытаясь решить, какие классы мне нужны.
Кроме sklearn.neighbors.KNeighborsRegressor
, мне, кажется, нужно:
sklearn.pipeline.Pipeline
sklearn.preprocessing.Normalizer
sklearn.model_selection.GridSearchCV
sklearn.model_selection.cross_val_score
sklearn.feature_selection.selectKBest
OR
sklearn.feature_selection.SelectFromModel
Не могли бы вы показать мне, как может выглядеть определение этого конвейера / рабочего процесса? Думаю должно быть примерно так:
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import Normalizer
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import cross_val_score, GridSearchCV
# build regression pipeline
pipeline = Pipeline([('normalize', Normalizer()),
('kbest', SelectKBest(f_classif)),
('regressor', KNeighborsRegressor())])
# try knn__n_neighbors from 1 to 20, and feature count from 1 to len(features)
parameters = {'kbest__k': list(range(1, X.shape[1]+1)),
'regressor__n_neighbors': list(range(1,21))}
# outer cross-validation on model, inner cross-validation on hyperparameters
scores = cross_val_score(GridSearchCV(pipeline, parameters, scoring="neg_mean_squared_error", cv=10),
X, y, cv=10, scoring="neg_mean_squared_error", verbose=2)
rmses = np.abs(scores)**(1/2)
avg_rmse = np.mean(rmses)
print(avg_rmse)
Это не похоже на ошибку, но некоторые из моих проблем:
- Правильно ли я выполнил вложенную перекрестную проверку, чтобы моя RMSE была беспристрастной?
- Если я хочу, чтобы окончательная модель была выбрана в соответствии с наилучшей среднеквадратичной среднеквадратической среднеквадратической среднеквадратической среднеквадратической среднеквадратической ошибки, должен ли я использовать
scoring="neg_mean_squared_error"
как дляcross_val_score
, так и дляGridSearchCV
? - Является ли
SelectKBest, f_classif
лучшим вариантом для выбора функций для моделиKNeighborsRegressor
? - How can I see:
- which subset of features was selected as best
- который K был выбран как лучший
Любая помощь приветствуется!