我目前有一个perl脚本,它需要一个完整的文件列表,并将列表平均分成一列火车和测试集。我现在想做k-fold交叉验证,为此我需要perl脚本来进行调整。将完整列表划分为k折培训和测试集?
但鉴于目前的实施,我似乎很难想出一个简单的解决方案。
#!/usr/bin/env perl
$full_list = $ARGV[0];
$test_list = $ARGV[1];
$train_list = $ARGV[2];
open FL, $full_list;
$nol = 0;
while ($l = <FL>)
{
$nol++;
}
close FL;
$i = 0;
open FL, $full_list;
open TESTLIST, ">$test_list";
open TRAINLIST, ">$train_list";
while ($l = <FL>)
{
chomp($l);
$i++;
if ($i <= $nol/2)
{
print TRAINLIST "$l\n";
}
else
{
print TESTLIST "$l\n";
}
}
我使得能够创建A K折叠的简单的尝试是通过引入两个新的输入参数是part
为argv[4]
和k
argv[3]
。因此,$nol
的一部分用于生成测试集,其余部分将作为列车集。
#!/usr/bin/env perl
$full_list = $ARGV[0];
$test_list = $ARGV[1];
$train_list = $ARGV[2];
$k = $ARGV[3]
$part_index_end = $ARGV[4]
$part_index_start = $ARGV[4]-1
print "Hi";
open FL, $full_list;
$nol = 0;
while ($l = <FL>)
{
$nol++;
}
close FL;
$i = 0;
open FL, $full_list;
open TESTLIST, ">$test_list";
open TRAINLIST, ">$train_list";
while ($l = <FL>)
{
chomp($l);
$i++;
if ($i <= ($nol/$k)*$part_index_end $$ $i => ($nol/$k)*$part_index_end)
{
print TESTLIST "$l\n";
}
else
{
print TRAINLIST "$l\n";
}
}
这虽然需要调用这个脚本随着部分参数,使得它们也被正确放置,并且不会覆盖同一文件的其它脚本。
脚本的结果应该是3组列车/测试列表。
好吧,你已经证明你的出发点,但是你有没有显示你已经尝试将其转换的东西。你知道K-fold交叉验证是什么吗?你知道你想让你的程序产生什么吗? – Borodin
我添加了我的尝试,以及我希望如何。 – Lamda