sequentialfs matlab,Matlab功能选择

我试图通过从它作为我的测试数据并在其上应用sequentialfs的随机行来学习300 * 299训练矩阵中的相关特征.我使用了以下代码:

>> Md1=fitcdiscr(xtrain,ytrain);

>> func = @(xtrain, ytrain, xtest, ytest) sum(ytest ~= predict(Md1,xtest));

>> learnt = sequentialfs(func,xtrain,ytrain)

xtrain和ytrain分别为299 * 299和299 * 1.预测将给出xtest的预测标签(这是来自原始xtrain的一些随机行).

但是,当我运行我的代码时,我收到以下错误:

Error using crossval>evalFun (line 480)

The function '@(xtrain,ytrain,xtest,ytest)sum(ytest~=predict(Md1,xtest))' generated the following error:

X must have 299 columns.

Error in crossval>getFuncVal (line 497)

funResult = evalFun(funorStr,arg(:));

Error in crossval (line 343)

funResult = getFuncVal(1, nData, cvp, data, funorStr, []);

Error in sequentialfs>callfun (line 485)

funResult = crossval(fun,x,other_data{:},...

Error in sequentialfs (line 353)

crit(k) = callfun(fun,x,other_data,cv,mcreps,ParOptions);

Error in new (line 13)

learnt = sequentialfs(func,xtrain,ytrain)

我哪里做错了?

最佳答案 你应该在func中构建你的分类器,而不是之前.

sequentialfs每次在不同的集合上调用该函数,并且必须仅为每个集合构建一个分类器,仅使用为该迭代选择的特征sequentialfs.

我不确定我是否能够清楚,实际上你应该将你的代码的第一行移到func体内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值