Matlab中的crossval-Predfun只有在零参数的情况下才会运行?

时间:2017-10-07 15:58:37

标签: matlab machine-learning cross-validation

我试图使用Matlab内置的crossval函数。我已经设置了Logistic回归函数并准备好了,但我得到的行为并不是我对文档的期望。

Crossval documentation page,重载:

mse = crossval('mse',X,y,'Predfun',predfun)

似乎符合我最需要的东西。该文件说

  

mse = crossval(' mse',X,y,' Predfun',predfun)返回mse,一个标量   包含10倍交叉验证估计的均方误差   对于函数predfun。 X可以是列向量,矩阵或数组   预测因子。 y是响应值的列向量。 X和Y必须   具有相同的行数。

     

predfun是一个用X的训练子集调用的函数句柄   训练y的子集,X的测试子集如下:

     

yfit = predfun(XTRAIN,ytrain,XTEST)

     

每次调用它时,predfun都应该使用XTRAIN和ytrain来拟合a   回归模型,然后在列向量中返回拟合值   yfit。 yfit的每一行都包含预测值   相应的XTEST行。 crossval计算平方误差   在yfit和相应的响应测试集之间,并返回   所有测试集的总体平均值。

所以我在同一目录中的另一个文件中定义了一个函数,其中包含签名:

function ytest = logRegTester(XTRAIN, ytrain, XTEST)

Matlab给了我错误

  

使用logRegTester时出错(第11行)   没有足够的输入参数。

为了进行实验,我尝试减少了logRegTester期望的参数数量,发现crossval只有在参数为零时才会调用我的函数。这似乎与文档相矛盾,后者需要一个带有三个参数的函数。

1 个答案:

答案 0 :(得分:0)

请根据predfun()的要求使用function handle @logRegTester,而不是直接使用logRegTester。