在Python中使用交叉验证构建线性回归模型

时间:2018-11-26 20:52:59

标签: python machine-learning regression linear-regression cross-validation

我有大约1.3k的叶片温度样本,我正在尝试使用大气变量(例如气温,太阳辐射,风和湿度)来预测该温度。

我从多元线性回归模型开始,但是我想提高准确性,所以我决定尝试留一法交叉验证方法以获得最佳模型输出。我最终寻求收集系数并进行拦截,以便以后可以使用此模型。

现在,据我了解,交叉验证可以有两个目的。第一个似乎是将您的模型的准确性与其他模型的准确性进行比较,并通过大量的训练数据来确定哪一个最佳。

第二个目的(也是我要使用的目的)是可以使用交叉验证来提高单个模型的准确性。换句话说,我尝试构建的最终模型是在考虑所有可能的训练集之后构建的。我觉得我可能出于第二个目的错了。

无论如何,受我所见(最著名的是thisthis)的启发,我开发了以下代码:

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()放在循环之外?如果是这样,那么我如何验证最终模型?

我也在考虑应该如何从模型中获取系数和截距。如果我要在循环中保持线性回归,那意味着我将获得每个训练集的系数。用它来表达某种意思会明智吗?

非常感谢您的考虑!

0 个答案:

没有答案