前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单易学的机器学习算法——线性支持向量机

简单易学的机器学习算法——线性支持向量机

作者头像
felixzhao
发布2018-03-16 17:22:28
7510
发布2018-03-16 17:22:28
举报
文章被收录于专栏:null的专栏null的专栏

一、线性支持向量机的概念

    线性支持向量机是针对线性不可分的数据集的,这样的数据集可以通过近似可分的方法实现分类。对于这样的数据集,类似线性可分支持向量机,通过求解对应的凸二次规划问题,也同样求得分离超平面

以及相应的分类决策函数

二、与线性可分支持向量机的比较   

三、线性支持向量机的原理   

四、线性支持向量机的过程

五、实验的仿真

1、解决线性可分问题

    与博文“简单易学的机器学习算法——线性可分支持向量机”实验一样,其中

中的最大值。

MATLAB代码为

代码语言:javascript
复制
%% 线性支持向量机

% 清空内存
clear all;
clc;

%简单的测试数据集
X = [3,3;4,3;1,1];
y = [1,1,-1];%标签
A = [X,y'];

m = size(A);%得到训练数据的大小


% 区分开特征与标签
X = A(:,1:2);
Y = A(:,m(1,2))';

for i = 1:m(1,1)
    X(i,:) = X(i,:)*Y(1,i);
end



%% 对偶问题,用二次规划来求解
H = X*X';

f = ones(m(1,1),1)*(-1);
B = Y;
b = 0;
lb = zeros(m(1,1),1);
% 调用二次规划的函数
[x,fval,exitflag,output,lambda] = quadprog(H,f,[],[],B,b,lb);

% 定义C
C = max(x);

% 求原问题的解
n = size(x);
w = x' * X;

k = 1;
for i = 1:n(1,1)
    if x(i,1) > 0 && x(i,1)<C
        b(k,1) = Y(1,i)-w*X(i,:)'*Y(1,i);
        k = k +1;
    end
end
b = mean(b);

% 求出分离超平面

y_1 = [0,4];
for i = 1:2
    y_2(1,i) = (-b-w(1,1)*y_1(1,i))./w(1,2);
end

hold on
plot(y_1,y_2);
for i = 1:m(1,1)
    if A(i,m(1,2)) == -1
        plot(A(i,1),A(i,2),'og');
    elseif A(i,m(1,2)) == 1
        plot(A(i,1),A(i,2),'+r')
    end
end
axis([0,7,0,7])  
hold off

实验结果为:

(线性可分问题的分离超平面)

2、解决线性不可分问题

问题为:

(线性不可分问题)

MATLAB代码:

代码语言:javascript
复制
%% 线性支持向量机

% 清空内存
clear all;
clc;

% 导入测试数据
A = load('testSet.txt');

% 处理数据的标签
m = size(A);%得到训练数据的大小
for i = 1:m(1,1)
    A(i,m(1,2)) = A(i,m(1,2))*2-1;
end



% 区分开特征与标签
X = A(:,1:2);
Y = A(:,m(1,2))';

for i = 1:m(1,1)
    X(i,:) = X(i,:)*Y(1,i);
end



%% 对偶问题,用二次规划来求解
H = X*X';

f = ones(m(1,1),1)*(-1);
B = Y;
b = 0;
lb = zeros(m(1,1),1);
% 调用二次规划的函数
[x,fval,exitflag,output,lambda] = quadprog(H,f,[],[],B,b,lb);

% 定义C
% C = mean(x);
C = max(x);

% 求原问题的解
n = size(x);
w = x' * X;

k = 1;
for i = 1:n(1,1)
    if x(i,1) > 0 && x(i,1)<C
        b(k,1) = Y(1,i)-w*X(i,:)'*Y(1,i);
        k = k +1;
    end
end
b = mean(b);

% 求出分离超平面

y_1 = [-4,4];
for i = 1:2
    y_2(1,i) = (-b-w(1,1)*y_1(1,i))./w(1,2);
end

hold on
plot(y_1,y_2);
for i = 1:m(1,1)
    if A(i,m(1,2)) == -1
        plot(A(i,1),A(i,2),'og');
    elseif A(i,m(1,2)) == 1
        plot(A(i,1),A(i,2),'+r')
    end
end
hold off

实验结果为:

(线性不可分问题的分离超平面)

注:这里的

的取值很重要,

的取值将决定分类结果的准确性。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、线性支持向量机的概念
  • 二、与线性可分支持向量机的比较   
  • 三、线性支持向量机的原理   
  • 四、线性支持向量机的过程
  • 五、实验的仿真
    • 1、解决线性可分问题
      • 2、解决线性不可分问题
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档