SVM多分类(利用libsvm工具箱)

%SVM 采用RBF函数 解决多分类问题。

%测试用的样本特征及标签存在文件'test.scale'中。

%针对新的多分类问题,只需要按'test.scale'中的格式替换成所需类别的特征及标签即可。
clc;clear;
%读取数据
[iris_label, iris_data] = libsvmread('test.scale');   

% test.scale下载地址:http://download.csdn.net/detail/liuyifang0810680/6216713

numInst = size(iris_data, 1);   %数据集大小
numLabels = max(iris_label);    %数据种类
 
%将数据随机分成训练/测试数据集
idx = randperm(numInst);
numTrain = 4;  %训练集的数据大小为100
numTest = numInst - numTrain;
trainData = iris_data(idx(1:numTrain),:);       %训练数据集
testData = iris_data(idx(numTrain+1:end),:);    %测试数据集
trainLabel = iris_label(idx(1:numTrain));
testLabel = iris_label(idx(numTrain+1:end)); 
 
%寻找最佳c/g参数--交叉验证方法
% [c,g] = meshgrid(-10:0.2:10, -10:0.2:10);
% [m, n] = size(c);
% cg = zeros(m, n);
% eps = 10^(-4);
% v = 5;     %设置为5折交叉验证
% bestc = 1;
% bestg = 0.1;
% bestacc = 0;
% for i = 1:m
    for j = 1:n
        cmd = ['-v ', num2str(v), ' -c ', num2str(2^c(i,j)), ' -g ', num2str(2^g(i,j))];
        cg(i,j) = svmtrain(trainLabel, trainData, cmd);
        if cg(i,j) > bestacc
            bestacc = cg(i,j);
            bestc = 2^c(i,j);
            bestg = 2^g(i,j);
        end
        if abs(cg(i,j)-bestacc) <= eps && bestc > 2^c(i,j)
            bestacc = cg(i,j);
            bestc = 2^c(i,j);
            bestg = 2^g(i,j);
        end
    end
% end
 
% cmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg), ' -b 1'];
cmd = ['-c ', num2str(0.8), ' -g ', num2str(0.6), ' -b 1'];

%使用libsvm创建/训练 SVM模型
model = svmtrain(trainLabel, trainData, cmd);
 
%用测试数据集检测训练的模型
[predictLabel, accuracy, prob] = svmpredict(testLabel,testData, model, '-b 1');
result = [testLabel predictLabel];
 
% %%绘图
% figure
% plot(1:length(testLabel), testLabel, 'r- *')
% hold on
% plot(1:length(testLabel), predictLabel, 'b:o')
% grid on
% legend('真实类别', '预测类别')
% xlabel('测试集样本编号')
% ylabel('测试集样本类别')
% string = strcat('测试集SVM预测结果对比 accuracy= ',num2str(accuracy(1)), '%');
% title(string)

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值