Модель регрессионного хребта с использованием метода перекрестной проверки и метода Grid-поиска - PullRequest
0 голосов
/ 13 января 2020

Я создал python код для регрессии гребня. Для этого я использовал метод перекрестной проверки и поиска по сетке вместе. я получил выходной результат. Я хочу проверить, правильны ли мои этапы построения регрессионной модели или нет? кто-нибудь может это объяснить?

from sklearn.linear_model import Ridge
ridge_reg = Ridge()
from sklearn.model_selection import GridSearchCV
params_Ridge = {'alpha': [1,0.1,0.01,0.001,0.0001,0] , "fit_intercept": [True, False], "solver": ['svd', 'cholesky', 'lsqr', 'sparse_cg', 'sag', 'saga']}
Ridge_GS = GridSearchCV(ridge_reg, param_grid=params_Ridge, n_jobs=-1)
Ridge_GS.fit(x_train,y_train)
Ridge_GS.best_params_

вывод - {'alpha': 1, 'fit_intercept': True, 'solver': 'cholesky'}

Ridgeregression = Ridge(random_state=3, **Ridge_GS.best_params_)
from sklearn.model_selection import cross_val_score
all_accuracies = cross_val_score(estimator=Ridgeregression, X=x_train, y=y_train, cv=5)
all_accuracies

вывод - массив ([0,93335508, 0,8984485, 0,91529146, 0,89309012, 0,90829416]) *

print(all_accuracies.mean())

вывод - 0,909695864130532

Ridgeregression.fit(x_train,y_train)
Ridgeregression.score(x_test,y_test)

output - 0,9113458623386644

Является ли 0,9113458623386644 моей точностью регрессии гребня (R squred)? если это так, то что означает значение 0,909695864130532.

1 Ответ

1 голос
/ 13 января 2020

Да, метод score из регрессии Риджа возвращает ваше значение R-квадрата ( документы ).

Если вы не знаете, как работает метод CV, он разбивает ваши данные на 5 равных кусков. Затем для каждой комбинации параметров он соответствует модели пять раз, используя каждый блок один раз в качестве оценочного набора, а оставшуюся часть данных - в качестве обучающего набора. Наилучшим набором параметров выбирается набор, дающий наивысшую среднюю оценку.

Ваш главный вопрос, по-видимому, заключается в том, почему среднее значение вашей оценки CV меньше, чем значение полной тренировки, оцененной на наборе тестов. , Это не обязательно удивительно, так как полный обучающий набор будет больше, чем любой из образцов CV, которые используются для значений all_accuracies. Большее количество обучающих данных, как правило, поможет вам получить более точную модель.

Оценка набора тестов (т. Е. Ваша вторая «оценка», 0,91 ...), скорее всего, будет отражать то, как ваша модель будет обобщена для невидимых данных. Это то, что вы должны указать в качестве «балла» вашей модели. Производительность по набору CV является предвзятой, поскольку именно эти данные основаны на выборе параметров.

В целом ваш метод выглядит правильно. Шаг, на котором вы переформируете регрессию гребня с помощью cross_val_score, кажется необходимым. После того, как вы нашли свои лучшие параметры из GridSearchCV, я бы go сразу подошел к подгонке к полному набору обучающих данных (как вы делаете в конце).

...