博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(原)Matlab的svmtrain和svmclassify
阅读量:6233 次
发布时间:2019-06-22

本文共 7718 字,大约阅读时间需要 25 分钟。

转载请注明出处:

参考网址:

 

代码如下:

clcclear allclose alldata = load('data.txt');% 为了svmtrain能使用'showplot',true,此处使用数据的前2维。data = data(:, 1:2); % 由于svmtrain只能处理二分类问题,因而此处使用前100个数据。data = data(1:100, :);label = [ones(50, 1); zeros(50, 1)];trainData = data(1:40, :);                  % 每组前40个用于训练trainData = [trainData; data(51:90, :)];    % 每组前40个用于训练testData = data(41:50, :);                  % 每组后10个用于测试testData = [testData; data(91:100, :)];     % 每组后10个用于测试trainLabel = label(1:40, :);                % 每组前40个用于训练trainLabel = [trainLabel; label(51:90, :)]; % 每组前40个用于训练testLabel = label(41:50, :);                % 每组后10个用于测试testLabel = [testLabel; label(91:100, :)];  % 每组后10个用于测试% 将距离和类别传入svm中,trainLabel为标签,即类别,trainData为特征svmModel = svmtrain(trainData, trainLabel,'kernel_function','linear','showplot',true);predict_label = svmclassify(svmModel,testData,'showplot',true); fprintf('使用svmclassify,正确率:%f\n' ,sum(predict_label==testLabel)/size(testLabel,1));%% 以下两种方式均使用linear核,其他的核还不清楚怎么算testScale = [];for c = 1:size(testData, 2)    testScale = [testScale, svmModel.ScaleData.scaleFactor(c) * (testData(:,c) +  svmModel.ScaleData.shift(c))];end% 方式1:使用矩阵形式predictValMat = (svmModel.SupportVectors * testScale')' * svmModel.Alpha + svmModel.Bias; % 测试样本个数*1的列矩阵predictValMat1 = ones(size(predictValMat));predictValMat1(predictValMat>0) = 0;fprintf('使用矩阵形式,正确率:%f\n' ,sum(predictValMat1==testLabel)/size(testLabel,1));% 方式2:一个一个计算[m,n]=size(testScale);predict_label2=zeros(m,1); for k = 1:size(testScale, 1)    % svmModel.SupportVectors为 支持向量个数*特征维数 的矩阵    % testScale(k, :)为 1*特征维数 的行向量。    % svmModel.SupportVectors * testScale(k, :)'为 支持向量个数*1 的列矩阵    % (svmModel.SupportVectors * testScale(k, :)')' * svmModel.Alpha 即为 sum(w*x)    % predictVal为 sum(w*x)+b    predictVal = (svmModel.SupportVectors * testScale(k, :)')' * svmModel.Alpha + svmModel.Bias;    if predictVal>0       predict_label2(k) = 0;    else       predict_label2(k) = 1;    endendfprintf('一个一个计算,正确率:%f\n' ,sum(predict_label2==testLabel)/size(testLabel,1));

分类结果:

 

svmtrain后的结果(包含了svmclassify的结果),其中蓝色圈出来的点为分错的点。

实际上,如果4个特征都使用的话,对上面的程序,正确率为100%。

ps:测试数据为参考网址中给出的数据。

鹫尾花数据集共分为3类花(前50个样本为一类,中间50个样本为一类,后50个样本为一类。由于matlab的svmtrain只能处理二分类问题,因而程序中使用了前100个数据。其中,每组前40个用作训练,后10个用作测试。因而,训练样本80个,测试样本20个。除此之外,为了在调用svmtrain时能显示分类结果,该函数参数'showplot'设置为true。

 

data.txt如下:

5.1        3.5        1.4        0.24.9        3.0        1.4        0.24.7        3.2        1.3        0.24.6        3.1        1.5        0.25.0        3.6        1.4        0.25.4        3.9        1.7        0.44.6        3.4        1.4        0.35.0        3.4        1.5        0.24.4        2.9        1.4        0.24.9        3.1        1.5        0.15.4        3.7        1.5        0.24.8        3.4        1.6        0.24.8        3.0        1.4        0.14.3        3.0        1.1        0.15.8        4.0        1.2        0.25.7        4.4        1.5        0.45.4        3.9        1.3        0.45.1        3.5        1.4        0.35.7        3.8        1.7        0.35.1        3.8        1.5        0.35.4        3.4        1.7        0.25.1        3.7        1.5        0.44.6        3.6        1.0        0.25.1        3.3        1.7        0.54.8        3.4        1.9        0.25.0        3.0        1.6        0.25.0        3.4        1.6        0.45.2        3.5        1.5        0.25.2        3.4        1.4        0.24.7        3.2        1.6        0.24.8        3.1        1.6        0.25.4        3.4        1.5        0.45.2        4.1        1.5        0.15.5        4.2        1.4        0.24.9        3.1        1.5        0.15.0        3.2        1.2        0.25.5        3.5        1.3        0.24.9        3.1        1.5        0.14.4        3.0        1.3        0.25.1        3.4        1.5        0.25.0        3.5        1.3        0.34.5        2.3        1.3        0.34.4        3.2        1.3        0.25.0        3.5        1.6        0.65.1        3.8        1.9        0.44.8        3.0        1.4        0.35.1        3.8        1.6        0.24.6        3.2        1.4        0.25.3        3.7        1.5        0.25.0        3.3        1.4        0.27.0        3.2        4.7        1.46.4        3.2        4.5        1.56.9        3.1        4.9        1.55.5        2.3        4.0        1.36.5        2.8        4.6        1.55.7        2.8        4.5        1.36.3        3.3        4.7        1.64.9        2.4        3.3        1.06.6        2.9        4.6        1.35.2        2.7        3.9        1.45.0        2.0        3.5        1.05.9        3.0        4.2        1.56.0        2.2        4.0        1.06.1        2.9        4.7        1.45.6        2.9        3.6        1.36.7        3.1        4.4        1.45.6        3.0        4.5        1.55.8        2.7        4.1        1.06.2        2.2        4.5        1.55.6        2.5        3.9        1.15.9        3.2        4.8        1.86.1        2.8        4.0        1.36.3        2.5        4.9        1.56.1        2.8        4.7        1.26.4        2.9        4.3        1.36.6        3.0        4.4        1.46.8        2.8        4.8        1.46.7        3.0        5.0        1.76.0        2.9        4.5        1.55.7        2.6        3.5        1.05.5        2.4        3.8        1.15.5        2.4        3.7        1.05.8        2.7        3.9        1.26.0        2.7        5.1        1.65.4        3.0        4.5        1.56.0        3.4        4.5        1.66.7        3.1        4.7        1.56.3        2.3        4.4        1.35.6        3.0        4.1        1.35.5        2.5        4.0        1.35.5        2.6        4.4        1.26.1        3.0        4.6        1.45.8        2.6        4.0        1.25.0        2.3        3.3        1.05.6        2.7        4.2        1.35.7        3.0        4.2        1.25.7        2.9        4.2        1.36.2        2.9        4.3        1.35.1        2.5        3.0        1.15.7        2.8        4.1        1.36.3        3.3        6.0        2.55.8        2.7        5.1        1.97.1        3.0        5.9        2.16.3        2.9        5.6        1.86.5        3.0        5.8        2.27.6        3.0        6.6        2.14.9        2.5        4.5        1.77.3        2.9        6.3        1.86.7        2.5        5.8        1.87.2        3.6        6.1        2.56.5        3.2        5.1        2.06.4        2.7        5.3        1.96.8        3.0        5.5        2.15.7        2.5        5.0        2.05.8        2.8        5.1        2.46.4        3.2        5.3        2.36.5        3.0        5.5        1.87.7        3.8        6.7        2.27.7        2.6        6.9        2.36.0        2.2        5.0        1.56.9        3.2        5.7        2.35.6        2.8        4.9        2.07.7        2.8        6.7        2.06.3        2.7        4.9        1.86.7        3.3        5.7        2.17.2        3.2        6.0        1.86.2        2.8        4.8        1.86.1        3.0        4.9        1.86.4        2.8        5.6        2.17.2        3.0        5.8        1.67.4        2.8        6.1        1.97.9        3.8        6.4        2.06.4        2.8        5.6        2.26.3        2.8        5.1        1.56.1        2.6        5.6        1.47.7        3.0        6.1        2.36.3        3.4        5.6        2.46.4        3.1        5.5        1.86.0        3.0        4.8        1.86.9        3.1        5.4        2.16.7        3.1        5.6        2.46.9        3.1        5.1        2.35.8        2.7        5.1        1.96.8        3.2        5.9        2.36.7        3.3        5.7        2.56.7        3.0        5.2        2.36.3        2.5        5.0        1.96.5        3.0        5.2        2.06.2        3.4        5.4        2.35.9        3.0        5.1        1.8

 

 

 

你可能感兴趣的文章
对‘初学者应该选择哪种编程语言’的回答——计算机达人成长之路(38)
查看>>
如何申请开通微信多客服功能
查看>>
Sr_C++_Engineer_(LBS_Engine@Global Map Dept.)
查看>>
非监督学习算法:异常检测
查看>>
jquery的checkbox,radio,select等方法总结
查看>>
Linux coredump
查看>>
Ubuntu 10.04安装水晶(Mercury)无线网卡驱动
查看>>
我的友情链接
查看>>
nginx在reload时候报错invalid PID number
查看>>
ElasticSearch 2 (32) - 信息聚合系列之范围限定
查看>>
VS2010远程调试C#程序
查看>>
[MicroPython]TurniBit开发板DIY自动窗帘模拟系统
查看>>
Python3.4 12306 2015年3月验证码识别
查看>>
从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
查看>>
windows查看端口占用
查看>>
Yii用ajax实现无刷新检索更新CListView数据
查看>>
JDBC的事务
查看>>
Io流的概述
查看>>
App 卸载记录
查看>>
JavaScript变量和作用域
查看>>