matlab使用svmtrain和svmpredict函数对数据样本进行分类,设置参数为‘-b 1’后显示Model does not support probabiliy estimates解决办法

困惑了很久,也试了网上的很多办法,最后发现只需要将cmd中的‘-t 0’和‘-b 1’写在同一对单引号中就可以解决(代码如下),libsvmpredict中也要写上‘-b 1’,希望能帮到大家。

cmd=['-t 0 -b 1','-c',num2str(bestc),'-g',num2str(bestg)];
model=libsvmtrain(t_train,p_train,cmd);

[T_sim2,~ ,decision_values_test ]=libsvmpredict(t_test ,p_test ,model,'-b 1');
 

以下是使用`ga`函数和`svmtrain`、`svmpredict`函数实现遗传算法与支持向量机联合进行参数寻优的MATLAB代码: ```matlab % 遗传算法与支持向量机联合进行参数寻优 % 设置遗传算法参数 pop_size = 100; % 种群大小 chrom_length = 6; % 染色体长度 pcross = 0.8; % 交叉概率 pmutation = 0.01; % 变异概率 maxgen = 50; % 最大迭代次数 % 定义适应度函数 fitness = @(pop) svm_fitness(pop); % 定义非线性约束函数 nonlcon = @(pop) svm_nonlcon(pop); % 设置优化参数 options = gaoptimset('PopulationSize', pop_size, 'Generations', maxgen, ... 'CrossoverFraction', pcross, 'MutationFcn', {@mutationuniform, pmutation}, ... 'Display', 'iter', 'PlotFcn', @gaplotbestf); % 开始优化 [x, fval] = ga(fitness, chrom_length, [], [], [], [], zeros(1, chrom_length), ones(1, chrom_length), nonlcon, options); % 输出结果 disp(['最优解为:', num2str(x)]); disp(['最优解对应的适应度为:', num2str(fval)]); % SVM适应度函数 function fit = svm_fitness(pop) % 解码染色体 C = bi2de(pop(:, 1:3), 'left-msb') * 0.1 + 0.1; % 惩罚因子 gamma = bi2de(pop(:, 4:6), 'left-msb') * 0.1 + 0.1; % 核函数参数 % 计算SVM分类器的准确率 load fisheriris X = meas(:, 1:2); Y = (strcmp('versicolor', species) | strcmp('virginica', species)) + 0; model = svmtrain(X, Y, 'Kernel_Function', 'rbf', 'BoxConstraint', C, 'RBF_Sigma', gamma); Y_pred = svmpredict(Y, X, model); fit = 1 - sum(Y ~= Y_pred) / length(Y); end % SVM非线性约束函数 function [c, ceq] = svm_nonlcon(pop) % 解码染色体 C = bi2de(pop(:, 1:3), 'left-msb') * 0.1 + 0.1; % 惩罚因子 gamma = bi2de(pop(:, 4:6), 'left-msb') * 0.1 + 0.1; % 核函数参数 % 计算SVM分类器的准确率 load fisheriris X = meas(:, 1:2); Y = (strcmp('versicolor', species) | strcmp('virginica', species)) + 0; model = svmtrain(X, Y, 'Kernel_Function', 'rbf', 'BoxConstraint', C, 'RBF_Sigma', gamma); Y_pred = svmpredict(Y, X, model); err = sum(Y ~= Y_pred) / length(Y); % 非线性约束:准确率必须大于等于0.7 c = 0.7 - err; ceq = []; end ``` 在该代码中,遗传算法的参数和适应度函数的定义与之前相同。不同的地方在于使用了`ga`函数进行优化。`ga`函数的输入参数包括适应度函数、染色体长度、线性和非线性约束等,输出最优解和对应的适应度。在适应度函数和非线性约束函数中,使用了`svmtrain`和`svmpredict`函数来训练和测试SVM分类器,并计算分类器的准确率。这里还使用了`mutationuniform`函数来实现均匀变异。最终输出遗传算法得到的最优解以及对应的适应度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值