
[英]Is there a way to see the folds for cross-validation in GridSearchCV?
[英]Keras cross-validation overfitting: is my model carrying over information across different folds?
我想确保运行Keras模型的交叉验证的代码是正确的。 目前我怀疑这是错误的,因为结果似乎过于贴合。
我的代码结构通常如下所示:
def get_model():
....
#code to create a Keras Neural network model using the functional API
kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
splits = list(enumerate(kfold.split(X, y))) #X is the train feature matrix, y the target
model= get_model() #LINE A
model.compile(...) #LINE B
for k in range(0, len(splits)): #LINE C
split = splits[k]
X_split_train = ... #slice X into corresponding training parts
X_split_test
y_split_train = ... #slice y into corresponding parts
model.fit(X_split_train, y_split_train, ...)
prediction_prob = model.predict(X_split_test)
#... code for evaluating the result for this fold
我怀疑我的代码是错误的。 具体来说,A行和B行应该在循环内,C行。
我怀疑的原因:
所有这些似乎表明模型参数和学习类分布似乎在折叠之间进行。 我认为解决这个问题的唯一方法是在每个折叠中重新创建模型。 这个对吗?
谢谢
不,这段代码没有正确地进行交叉验证,对于从头开始训练新模型的每个折叠,这里你重复使用前一个折叠的模型,这是不正确的。
我会这样做:
for k in range(0, len(splits)): #LINE C
model= get_model() #LINE A
model.compile(...) #LINE B
split = splits[k]
X_split_train = ... #slice X into corresponding training parts
X_split_test
y_split_train = ... #slice y into corresponding parts
model.fit(X_split_train, y_split_train, ...)
prediction_prob = model.predict(X_split_test)
del model
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.