我正在尝试为功能选择实现sequentialfs。我看到这篇文章:Sequential feature selection Matlab
试图按照给出的示例作为实施的解决方案。
我的TrainVec是尺寸为268 x1475的矩阵,而TestVec为116x1475,TestLabel为116 x 1,TestLabel为268 x 1.
我实施的代码是
f = @(TrainVec,TrainLabel,TestVec,TestLabel) sum(TestLabel ~= predict_label);
fs = sequentialfs(f,Vec,Label);
我得到的错误是:
??? Error using ==> crossval>evalFun at 505
The function
'@(TrainVec,TrainLabel,TestVec,TestLabel)sum(TestLabel~=predict_label)'
generated the following error:
Matrix dimensions must agree.
Error in ==> crossval>getFuncVal at 524
funResult = evalFun(funorStr,arg(:));
Error in ==> crossval at 363
funResult = getFuncVal(1, nData, cvp, data, funorStr, []);
Error in ==> sequentialfs>callfun at 495
funResult = crossval(fun,x,other_data{:},...
我检查了所有矩阵并确保它们具有相同的尺寸。不确定有什么问题。需要一些指导。 ==>中的错误sequentialfs at 357 crit(k)= callfun(fun,x,other_data,cv,mcreps);
答案 0 :(得分:0)
我不确定predict_label
是变量还是输入参数为零的函数。我猜想如果它是变量,它与TestLabel
的大小不同;如果它是一个函数,它要么不返回与TestLabel
大小相同的东西,要么它有一些错误的中间计算。
无论哪种方式,您通常都希望写作
f = @(TrainVec,TrainLabel,TestVec,TestLabel) sum(TestLabel ~= predict_label(TrainVec,TrainLabel,TestVec));
其中predict_label
现在是一个接收TrainVec
和TrainLabel
的函数,构建模型,在TestVec
上对其进行评估,并返回预测标签的数组与TestLabel
相同的大小。