Построение модели линейной регрессии с перекрестной проверкой в ​​Python - PullRequest
0 голосов
/ 26 ноября 2018

У меня около 1,3 тыс. Образцов температуры листа, и я пытаюсь предсказать эту температуру, используя атмосферные переменные, такие как температура воздуха, солнечная радиация, ветер и влажность.

Я начал с простой модели многомерной линейной регрессии, но я хотел поднять ее на ступеньку выше с точки зрения точности, поэтому я решил опробовать метод перекрестной проверки с одним пропуском, чтобы получитьлучшая модель выхода.В конечном итоге я пытаюсь собрать коэффициенты и перехватить, чтобы я мог использовать эту модель для дальнейшего использования.

Теперь, насколько я понимаю, перекрестная проверка может иметь две цели.Первое, кажется, состоит в том, чтобы сравнить точность вашей модели с точностью других моделей и решить, какая из них лучше, пройдя многочисленные тренировочные данные.

Вторая цель (и та, которую я пытаюсь использовать) состоит в том, что вы можете использовать перекрестную проверку для повышения точности одной модели.Другими словами, окончательная модель, которую я пытаюсь построить, была построена после рассмотрения всех возможных тренировочных наборов.У меня такое чувство, будто я могу ошибаться для этой второй цели.

В любом случае, вдохновленный увиденным (прежде всего это и это ),Я разработал следующий код:

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import LeaveOneOut
#Leave ont out cross validation (LOOCV)
#Y_data and X_data are both pandas df
loo = LeaveOneOut()
loo.get_n_splits(X_data)
ytests = []
ypreds = []
All_coef = list()
All_intercept = list()
for train_index, test_index in loo.split(X_data):
     X_train, X_test = X_data.iloc[train_index], X_data.iloc[test_index]
     Y_train, Y_test = Y_data.iloc[train_index], Y_data.iloc[test_index]

     model = LinearRegression()
     model.fit(X=X_train, y=Y_train)
     Y_pred = model.predict(X_test)

     All_coef.append(model.coef_)
     All_intercept.append(model.intercept_)

     ytests += Y_test.values.tolist()[0]
     ypreds += list(Y_pred)
rr = metrics.r2_score(ytests, ypreds)
ms_error = metrics.mean_squared_error(ytests, ypreds)

Но это странно, потому что линейная регрессия находится внутри петли перекрестной проверки, а не вне ее, поэтому я не могу получить окончательную модельиз этого.Полагаю ли я также, что LinearRegression() и .fit() вне цикла?Если так, то как мне проверить окончательную модель?

Я также думал о том, как я должен получить коэффициенты и перехват из моей модели.Если я хочу сохранить линейную регрессию в цикле, это означает, что я получу коэффициенты для каждого тренировочного набора.Было бы разумно сделать из этого какое-то подлое?

Большое вам спасибо за внимание!

...