计算多元线性回归的交叉验证
Compute cross validation for multi-variate linear regression
我正在为一个回归问题训练不同的模型。因为我想在选择之间找到最佳模型,所以我想执行 k = 20 的交叉验证,以表征模型的 MSE,并统计确定它们之间哪个模型更好。
该问题有多个因变量,我想分别为两个因变量确定 MSE,但 cross_val_score 不允许我明确地这样做。
这是我的一个模型的一些示例代码:
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.metrics import mean_squared_error
model = LinearRegression()
model.fit(x, y)
y_pred = model.predict(x_test)
mse = mean_squared_error(scaler2.inverse_transform(y_test), scaler2.inverse_transform(y_pred), multioutput="raw_values")
我如何在k次交叉验证中对k个训练和测试的模型对应的k次进行迭代训练?
Scikit 提供了一个 Kfold 但它只是一种指定折叠次数的方法,它实际上并没有 returns 训练和测试折叠,所以我想不出一种使用 kfold 交叉验证理论实际训练不同模型的方法.另外,我需要对每个因变量单独评估 MSE,因为它是一个多元回归问题
您可以通过简单的 for
循环使用 Scikit Learn KFold 交叉验证。
这是一个在 bayes 分类器 上测试 5 折交叉验证的示例:
from sklearn.model_selection import KFold
k = 5
kf = KFold(n_splits=k)
res = []
for train_index , test_index in kf.split(X_train_concat):
X_train_kf , X_test_kf = X_train_concat[train_index,:],X_train_concat[test_index,:]
y_train_kf , y_test_kf = y_train_concat[train_index] , y_train_concat[test_index]
X_train = np.append(X_train_concat, np.reshape(y_train_concat, (len(y_train_concat),1)), axis=1)
W_bayes = trainBayes(X_train)
y_pred = predict(X_test_kf, W_bayes)
mis_classification = len(y_pred)-np.count_nonzero(y_pred == y_test_kf)
e = (mis_classification / y_test_kf.shape[0]) * 100
res.append(e)
avg_res = sum(res)/k
print('Result of each fold - {}'.format(res))
print('Avg result : {}'.format(avg_res))
更多检查this
我正在为一个回归问题训练不同的模型。因为我想在选择之间找到最佳模型,所以我想执行 k = 20 的交叉验证,以表征模型的 MSE,并统计确定它们之间哪个模型更好。 该问题有多个因变量,我想分别为两个因变量确定 MSE,但 cross_val_score 不允许我明确地这样做。 这是我的一个模型的一些示例代码:
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.metrics import mean_squared_error
model = LinearRegression()
model.fit(x, y)
y_pred = model.predict(x_test)
mse = mean_squared_error(scaler2.inverse_transform(y_test), scaler2.inverse_transform(y_pred), multioutput="raw_values")
我如何在k次交叉验证中对k个训练和测试的模型对应的k次进行迭代训练? Scikit 提供了一个 Kfold 但它只是一种指定折叠次数的方法,它实际上并没有 returns 训练和测试折叠,所以我想不出一种使用 kfold 交叉验证理论实际训练不同模型的方法.另外,我需要对每个因变量单独评估 MSE,因为它是一个多元回归问题
您可以通过简单的 for
循环使用 Scikit Learn KFold 交叉验证。
这是一个在 bayes 分类器 上测试 5 折交叉验证的示例:
from sklearn.model_selection import KFold
k = 5
kf = KFold(n_splits=k)
res = []
for train_index , test_index in kf.split(X_train_concat):
X_train_kf , X_test_kf = X_train_concat[train_index,:],X_train_concat[test_index,:]
y_train_kf , y_test_kf = y_train_concat[train_index] , y_train_concat[test_index]
X_train = np.append(X_train_concat, np.reshape(y_train_concat, (len(y_train_concat),1)), axis=1)
W_bayes = trainBayes(X_train)
y_pred = predict(X_test_kf, W_bayes)
mis_classification = len(y_pred)-np.count_nonzero(y_pred == y_test_kf)
e = (mis_classification / y_test_kf.shape[0]) * 100
res.append(e)
avg_res = sum(res)/k
print('Result of each fold - {}'.format(res))
print('Avg result : {}'.format(avg_res))
更多检查this