我正在关注Jeff Heaton深度学习课程Course link

以及练习。在第一个编程分配(问题5)中,在最后一个任务中,他要求将KFold(5)交叉验证的输入数据的输出写入csv文件。基本上在KFold(5)之后,我们将有5组数据(训练/测试)。我需要将它们粘合在一起并保存在文件中。我尝试这样做,但是我的数据被覆盖,并且我只在输出中得到最后折叠的数据。
我从Python开始,我想我看不到如何使循环正确执行熊猫添加。
链接到练习:Exercise 5

我的代码的一部分:df_car是原始的熊猫df。 df_cars1df_cars的副本,但我将其设为空以便以后添加数据

kf = KFold(5)
#     df_cars.insert(0,'set', 'str')
df_cars.insert(1,'iteration', 0)
df_cars1 = pd.DataFrame(data=None, columns=df_cars.columns,index=df_cars.index)
df_cars1.dropna()

fold = 1
for train_index, validate_index in kf.split(df_cars):
    trainDF = pd.DataFrame(df_cars.ix[train_index])
    validateDF = pd.DataFrame(df_cars.ix[validate_index])
    trainDF[['set', 'iteration']] = 'T', fold
    validateDF[['set', 'iteration']] = 'V', fold
    print("Fold #{}, Training Size: {}, Validation Size: {}".format(fold,len(trainDF),len(validateDF)))
    fold+=1
    df_cars1 = pd.concat([validateDF,trainDF])

df_cars1.to_csv("./data/auto-mpg-kfold5.csv")
print(df_cars1)


我的输出示例是:

    mpg iteration   set cylinders   displacement    horsepower  weight  acceleration    year    origin  name
319 0.997344    5   V   4   -0.705077   -0.767632   -0.506545   0.701436    80  3   mazda 626
320 1.727537    5   V   4   -0.714680   -0.322309   -0.634239   -0.206262   80  3   datsun 510 hatchback
321 1.112638    5   V   4   -0.820308   -0.767632   -0.834055   -0.133646   80  3   toyota corolla
322 2.957335    5   V   4   -1.031565   -1.029586   -1.017318   0.846667    80  3   mazda glc


如您所见,列iteration中的所有值都是5的值,这意味着只有最后一个第5个KFold附加在df_cars1上,我需要在那儿折叠五折。
任何帮助,将不胜感激

最佳答案

问题出在您的for循环的最后一行

...
df_cars1 = pd.concat([validateDF,trainDF])


这样做是用当前的训练和验证数据重新分配df_cars1变量,并且有关旧迭代的信息会丢失。

更改为:

df_cars1 = pd.concat([df_cars1, validateDF,trainDF])


这样就可以将先前的折页与此折页相结合。希望能帮助到你。

08-16 14:16