2017-10-07 32 views
0

我正尝试使用内置于Matlab的crossval函数。我有一个Logistic回归函数,并准备好了,但我得到的行为不是我期望的文档。Matlab中的crossval-Predfun只有在参数为零时才会运行?

Crossval documentation page,过载:

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

似乎符合我需要的东西最好。所述doocumentation说

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来拟合 回归模型,然后将拟合值返回到列向量 yfit中。 yfit的每行包含XTEST对应行的预测值。 crossval计算yfit和相应的响应测试集之间的平方误差 ,并返回所有测试集的整体平均值。

所以我在同一目录下的另一个文件中定义的函数,与签名:

function ytest = logRegTester(XTRAIN, ytrain, XTEST) 

Matlab的是给我的错误

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

做实验,我试着减少参数logRegTester预期的数字,发现crossval只会调用我的函数,如果它有零个参数。这似乎与文档相矛盾,它需要一个带有三个参数的函数。

+2

是否有可能根据需要不使用函数句柄,而是直接使用logRegTester?要获得一个函数句柄,可以使用@logRegTester(https://de.mathworks.com/help/matlab/ref/functions.html) – Marcus

回答

相关问题