源程序为:
TrainLabel = [zeros(length(TrainData_background),1); ...
ones(length(TrainData_foreground),1)];
TrainData = [TrainData_background;TrainData_foreground];
model = svmtrain(TrainLabel, TrainData,'-t 1 -d 1');
%svm调用出现问题 原函数为svmtrain '-t 1 -d 1'
preTrainLabel = svmpredict(TrainLabel, TrainData, model);
[m,n,k] = size(pic);
TestData = double(reshape(pic,m*n,k));
% whos TestData;
TestLabal = svmpredict(zeros(length(TestData),1), TestData, model);
ind = reshape([TestLabal,TestLabal,TestLabal],m,n,k);
ind = logical(ind);
因为近期重新装了系统,并且重新安装了matlab2018b出现提示svmtrain函数调用过期,需要更改为fitcsvm的提示,也跟着网上其他博客安装libsvm包,mex -setup,make,但还是没有解决我的问题
我就开始看fitcsvm的介绍网址,进行这两者的转换
TrainLabel = [zeros(length(TrainData_background),1); ...
ones(length(TrainData_foreground),1)];
TrainData = [TrainData_background;TrainData_foreground];
SVMModel = fitcsvm( TrainData,TrainLabel,'KernelScale','auto','Standardize',true,...
'OutlierFraction',0.05); %设置5%的观察值是离群点
svInd = SVMModel.IsSupportVector;
[m,n,k] = size(pic);
TestData = double(reshape(pic,m*n,k));
% whos TestData;
TestLabal = predict(SVMModel,TestData );
ind = reshape([TestLabal,TestLabal,TestLabal],m,n,k);
ind = logical(ind);
关键点在于:
1、输入的数据类型是不变的,但是位置需要调换。生成model
svmtrain:
model = svmtrain(TrainLabel, TrainData,'-t 1 -d 1');
fitcsvm:
SVMModel = fitcsvm( TrainData,TrainLabel,'KernelScale','auto','Standardize',true,...
'OutlierFraction',0.05); %设置5%的观察值是离群点
svInd = SVMModel.IsSupportVector;
2、调用模型
svmtrain:
TestLabal = svmpredict(zeros(length(TestData),1), TestData, model);
fitcsvm:
TestLabal = predict(SVMModel,TestData );