在KerasRegressor上使用交叉验证时,如何获得不同拟合的历史?

我有一个回归问题,我使用的是keras完全连接层来对我的问题进行建模。我正在使用cross_val_score,我的问题是:如何提取cross_val_score的模型和每个训练/验证组合的历史?

假设此示例:

from sklearn import datasets
from sklearn.model_selection import cross_val_score,KFold
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
seed = 1

diabetes = datasets.load_diabetes()
X = diabetes.data[:150]
y = diabetes.target[:150]

def baseline_model():
    model = Sequential()
    model.add(Dense(10,input_dim=10,activation='relu'))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error',optimizer='adam')
    return model

estimator = KerasRegressor(build_fn=baseline_model,nb_epoch=100,batch_size=100,verbose=False)
kfold = KFold(n_splits=10,random_state=seed)
results = cross_val_score(estimator,X,y,cv=kfold)
print("Results: %.2f (%.2f) MSE" % (results.mean(),results.std()))


我的理解是,我只能得出每折的总体信息。 但是我想在每次折叠的模型时期比较火车与验证毫秒,即在这种情况下为10次。

如果不使用kfold,而是简单的训练/验证拆分,则可以执行以下操作:

hist = model.fit(X_tr,y_tr,validation_data=val_data,epochs=100,verbose=1)

plt.plot(history.history['loss'])
plt.plot(history.history['loss'])

这将返回一个表示w.r.t的mse演变的图。到训练和验证数据集的时代,从而发现过度/不足。 有什么想法在使用交叉验证时如何针对每一折?

SophiaBJ 回答:在KerasRegressor上使用交叉验证时,如何获得不同拟合的历史?

您可以进行“手动” CV程序,并为每一折绘制损失(或可能要使用的任何其他可用度量),即:

from sklearn.metrics import mean_squared_error
cv_mse = []

for train_index,val_index in kfold.split(X):
    history = estimator.fit(X[train_index],y[train_index])
    pred = estimator.predict(X[val_index])
    err = mean_squared_error(y[val_index],pred)
    cv_mse.append(err)
    plt.plot(history.history['loss'])

在这种情况下,cv_mse列表将包含每个折叠的最终MSE,并且您还将获得每个折叠每个时期的演变图。

本文链接:https://www.f2er.com/3159268.html

大家都在问