我试图使用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
只有在参数为零时才会调用我的函数。这似乎与文档相矛盾,后者需要一个带有三个参数的函数。