实现Sequentialfs

时间:2012-02-03 08:15:56

标签: matlab select machine-learning selection

我正在尝试为功能选择实现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);

1 个答案:

答案 0 :(得分:0)

我不确定predict_label是变量还是输入参数为零的函数。我猜想如果它是变量,它与TestLabel的大小不同;如果它是一个函数,它要么不返回与TestLabel大小相同的东西,要么它有一些错误的中间计算。

无论哪种方式,您通常都希望写作

f = @(TrainVec,TrainLabel,TestVec,TestLabel) sum(TestLabel ~= predict_label(TrainVec,TrainLabel,TestVec));

其中predict_label现在是一个接收TrainVecTrainLabel的函数,构建模型,在TestVec上对其进行评估,并返回预测标签的数组与TestLabel相同的大小。