У меня около 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()
вне цикла?Если так, то как мне проверить окончательную модель?
Я также думал о том, как я должен получить коэффициенты и перехват из моей модели.Если я хочу сохранить линейную регрессию в цикле, это означает, что я получу коэффициенты для каждого тренировочного набора.Было бы разумно сделать из этого какое-то подлое?
Большое вам спасибо за внимание!