Matlab错误:Y must be a vector or a character array

原因:应该调用libsvm\matlab中的svmtrain,但是在matlab自带的工具箱中也有svmtrain这个函数,matlab会跑去调用它自带的函数。


解决办法:
1、在setpath中可以把libsvm\matlab和libsvm\windows添加进来,或者置顶
2、把matlab自带工具箱中的svmtrain改一个名字,svmtrain所在位置:your_matlab_ location\Matlab\toolbox\stats\stats
3、我遇到过这个问题两次,第一次用上述的第二种方法解决了,结果过几天又不行了,于是我在一篇关于libsvm配置的文章中看到可以去改libsvm中svmtrain的名字,于是有了如下方法:
修改libsvm\matlab中有关svmtrain的名字,如libsvmtrian,然后修改libsvm\windows中有关svmtrain的名字,和前一个一致就行。注意两个子文件夹中的名字都要改。


测试svmtrain能否使用:
在命令窗中输入以下命令:

>> [heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');
>> model = libsvmtrain(heart_scale_weight, heart_scale_label, heart_scale_inst, '-c 1');
>> [predict_label, accuracy, dec_values] = libsvmpredict(heart_scale_label, heart_scale_inst, model);

如果配置成功的话,会显示一下内容:

*
optimization finished, #iter = 166
obj = -107.553365, rho = 0.449867
nSV = 131, nBSV = 103
Total nSV = 131
Accuracy = 86.2963% (233/270) (classification)

附:
我在运行matlab >> [heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');时,报错说找不到heart_scale,这是因为heart_scale在上一级目录中,复制到当前目录就行了,很奇怪,不知道为啥别人都可以。

你可能感兴趣的:(Bugs,Matlab)