gpt4 book ai didi

python - Keras交叉验证过度拟合: is my model carrying over information across different folds?

转载 作者:行者123 更新时间:2023-11-30 21:58:08 25 4
gpt4 key购买 nike

我想确保运行 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 行内。

我怀疑的原因:

  1. 查看为所有时期生成的训练日志,模型性能似乎在不同的折叠上持续存在。假设对于第一次折叠,模型的准确度为 75%。在第二次折叠中,它开始报告准确度高达 75.x%
  2. 模型似乎过度拟合,因为它很快输出训练准确度为 1.0
  3. 对于数据集中只有 1 个实例的一些罕见类别,在某些情况下,模型甚至会报告这些类别的 100% F1,但这是没有意义的。
所有这些似乎都表明模型参数和学习的类别分布似乎在折叠之间进行。我认为解决这个问题的唯一方法是在每个折叠中重新创建模型。这是正确的吗?

谢谢

最佳答案

不,这段代码没有正确执行交叉验证,对于每次折叠,您都从头开始训练一个新模型,在这里您重复使用前一次折叠中的模型,这是不正确的。

我会这样做:

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

关于python - Keras交叉验证过度拟合: is my model carrying over information across different folds?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55031256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com