sklearn KFold() - 将所有折叠保存到 csv 文件

Posted

技术标签:

【中文标题】sklearn KFold() - 将所有折叠保存到 csv 文件【英文标题】:sklearn KFold() - save all the folds to the csv file 【发布时间】:2017-10-18 17:19:58 【问题描述】:

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

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

我的部分代码:df_car 是原始的 pandas 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,我需要所有五个折叠。 任何帮助将不胜感激

【问题讨论】:

你需要缩进df_cars1 = pd.concat([validateDF,trainDF])这一行 @gnub,我的错误,错误的代码复制/粘贴,但结果还是一样。 【参考方案1】:

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

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

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

改成:

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

这样它将以前的折叠与这个结合起来。希望对您有所帮助。

【讨论】:

非常感谢伙计。有效。它使用 NaN 添加了整个 df,但在使用 df_cars1.dropna(inplace=True) 删除它们之后,数字现在是正确的。 @kuatroka 是的,因为它会在循环的第一次迭代中添加空的df。

以上是关于sklearn KFold() - 将所有折叠保存到 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

为啥用 shuffle 调用 KFold 生成器会给出相同的索引?

为啥用 shuffle 调用 KFold 生成器会给出相同的索引?

sklearn.model_selection 'KFold' 对象不可迭代

使用 sklearn 的 KFold 分离 pandas 数据框

sklearn可视化不同数据划分方法的差异:KFold, ShuffleSplit,StratifiedKFold, GroupKFold, StratifiedShuffleSplit.......

在 KFold 交叉验证的情况下如何显示平均分类报告和混淆矩阵