matlab自带的分类器的测试和分类

来源:互联网 发布:什么是软件质量 编辑:程序博客网 时间:2024/06/01 15:55

代码如下:

复制代码
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
复制代码
原创粉丝点击