SVM 中查看支持向量的权重。

我想验证一下,在 SVM 中是不是支持向量离分类线越近,权重越大。

matlab代码如下:

function [sv_num, err_rate] = play_svm(class_sample_num)
    %缺省类样本数是10。
    if nargin == 0
        class_sample_num = 10;
    end
    
    %生成满足二维高斯分布的两类数据,为了能让它们分开,假设一类均值是5,另一类是8。
    x1 = randn(class_sample_num,2) + 5;
    x2 = randn(class_sample_num,2) + 8;
    %把两类数据装入一个训练集x和一个标签集y。
    for i=1:class_sample_num
        x(i,1) = x1(i,1);
        x(i,2) = x1(i,2);
        x(i+class_sample_num,1) = x2(i,1);
        x(i+class_sample_num,2) = x2(i,2);
        y(i,1) = 1;
        y(i+class_sample_num,1) = -1;
    end
    
    %使用缺省参数做svm训练。
    svmModel = svmtrain(x, y, 'showplot', true);
    sv_num = size(svmModel.SupportVectors, 1);
    
    %使用缺省参数做svm测试,为了简单用训练集充当测试集。
    z = svmclassify(svmModel, x, 'showplot', true); 
    err_rate = sum(y ~= z)/size(y,1);
        
    %写出支持向量的权重。
    hold on;
    for i=1:sv_num
        idx = svmModel.SupportVectorIndices(i);
        if idx < class_sample_num
            weightstr = ['\color{red}',num2str(svmModel.Alpha(i))];
        else
            weightstr = ['\color{blue}',num2str(svmModel.Alpha(i))];
        end
        %这里加0.1是让文字和数据点不要重合。
        text(x(idx,1)+0.1, x(idx,2), weightstr);
    end
    hold off;
end


你可能感兴趣的:(模式识别,svm,支持向量权重)