我正在為回歸問題訓練不同的模型。由于我想在選擇之間找到最佳模型,因此我想使用 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")
我如何在與在 ak 折疊交叉驗證中訓練和測驗的 k 個模型相對應的 k 次上迭代訓練?Scikit 提供了一個 Kfold,但它只是一種指定折疊數量的方法,它實際上并沒有回傳訓練和測驗折疊,所以我想不出一種使用 kfold 交叉驗證理論來實際訓練不同模型的方法。另外,我需要對每個因變數分別評估 MSE,因為它是一個多元回歸問題
uj5u.com熱心網友回復:
for您只需一個簡單的回圈即可使用 Scikit Learn KFold 交叉驗證。
這是一個在貝葉斯分類器上測驗 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))
更多檢查這個
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/442577.html
上一篇:線性回歸預測值是負數和大小數
