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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值