sklearn KFold() - 将所有折叠保存到 csv 文件
sklearn KFold() - save all the folds to the csv file
我正在学习 Jeff Heaton 深度学习课程 Course link
并进行练习。在第一个编程作业的问题 5 中,在最后一个任务中,他要求将 KFold(5)
交叉验证输入数据的输出写入 csv 文件。基本上在 KFold(5) 之后我们将有 5 组数据 (train/test)。我需要的是将它们粘合在一起并将它们保存在一个文件中。我尝试这样做,但我的数据被覆盖了,我只得到了输出中的最后一次折叠数据。
我从 Python 开始,我想我看不出如何使循环正确执行 pandas 追加。
Link到习题:Exercise 5
我的部分代码:df_car
是原始的 pandas df。 df_cars1
是 df_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])
所以它结合了以前的折叠和这个。希望对你有帮助。
我正在学习 Jeff Heaton 深度学习课程 Course link
并进行练习。在第一个编程作业的问题 5 中,在最后一个任务中,他要求将 KFold(5)
交叉验证输入数据的输出写入 csv 文件。基本上在 KFold(5) 之后我们将有 5 组数据 (train/test)。我需要的是将它们粘合在一起并将它们保存在一个文件中。我尝试这样做,但我的数据被覆盖了,我只得到了输出中的最后一次折叠数据。
我从 Python 开始,我想我看不出如何使循环正确执行 pandas 追加。
Link到习题:Exercise 5
我的部分代码:df_car
是原始的 pandas df。 df_cars1
是 df_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])
所以它结合了以前的折叠和这个。希望对你有帮助。