2013-07-11 155 views
2

我正在matlab中运行一个脚本来获得矩阵的随机排列测试,以获得交叉验证的准确性值。我的脚本如下:保存matlab输出到文本文件

%randperm 

labels = [zeros(40,1); ones(40,1)]; 

for i = 1:500 
    p = labels(randperm(length(labels))); 
end 


bestcv = 0; 
for log2c = -10:10, 
    for log2g = -10:10, 
     cmd = ['-s 0 -t 0 -v 20 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g) ' -q  ']; 
     cv = svmtrain(labels, p, cmd); 
     if (cv > bestcv), 
      bestcv = cv; bestc = 2^log2c; bestg = 2^log2g; 
      fprintf('%g %g %g (best c = %g, g = %g, rate = %g)\n', log2c, log2g, cv, bestc, bestg, bestcv); 
     end 
    end 
end 
cmd = ['-s 0 -t 0 -c ', num2str(bestc), ' -g ', num2str(bestg)]; 

我想知道我怎么可以保存输出(500交叉验证准确度值)到一个文本文件,如果有可能写入我的代码这一点。

由于提前,

了Andrea C

回答

0

您可以保存使用save包含您的交叉验证结果的变量(一个或多个),然后再使用load加载它们。例如,假设你有所谓的accuracies变量的结果:

save('cross-validation-results.txt',accuracies); 

后来

load('cross-validation-results.txt'); 

到reobtain变量accuracies

要在您的代码中实现此操作,请将调整参数和关联的准确性保存到数组中,然后保存所述数组。

+0

我理解的保存功能的文件,但为了做到这一点,我需要拯救我的整个for循环的变量(精度)。有没有办法做到这一点,而不会中断循环? (对不起 - 我对Matlab相当陌生) – user2532780

+0

你是什么意思*破坏循环*?如果你想保存*所有*中间结果(例如所有精度),你需要以某种方式存储它们。我害怕没有办法。 –

+0

好的。感谢您的帮助。我无法向产生精度的循环添加变量赋值而不会出现错误。 – user2532780

0

正如Marc Claesen所描述的那样,我建议您使用save。不过,如果你只是需要一种简单而快速的方式来保存你的值,你可以使用matlabs diary命令。

它将所有输入和输出保存到文本文件中。

diary('cross-validation-output.txt') 

要停止写信给你,需要调用

diary OFF