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

标签:
机器学习数据分析数据挖掘数据分析师培训 |
一、回顾
介绍了支持向量机的基本概念,线性可分支持向量机的原理以及线性支持向量机的原理,线性可分支持向量机是线性支持向量机的基础。对于线性支持向量机,选择一个合适的惩罚参数,并构造凸二次规划问题:
http://cda.pinggu.org/uploadfile/image/20170321/20170321190246_31478.png
求得原始问题的对偶问题的最优解,由此可求出原始问题的最优解:
http://cda.pinggu.org/uploadfile/image/20170321/20170321190224_50056.png
其中http://cda.pinggu.org/uploadfile/image/20170321/20170321190110_75388.png
以及分类决策函数:http://cda.pinggu.org/uploadfile/image/20170321/20170321190050_97174.png
二、非线性问题的处理方法
http://cda.pinggu.org/uploadfile/image/20170321/20170321190028_27948.png
(非线性转成线性问题)
通过一种映射可以将输入空间转换到对应的特征空间,体现在特征空间中的是对应的线性问题。核技巧就可以完成这样的映射工作。
1、核函数的定义(摘自《统计机器学习》)
使得对所有http://cda.pinggu.org/uploadfile/image/20170321/20170321185816_34699.png
则称http://cda.pinggu.org/uploadfile/image/20170321/20170321185752_77529.png为核函数,为映射函数。
2、常用核函数
多项式核函数(Polynomial Kernel Function)
高斯核函数(Gaussian Kernel Function)
三、非线性支持向量机
http://cda.pinggu.org/uploadfile/image/20170321/20170321185626_55258.png
求得对应的最优解http://cda.pinggu.org/uploadfile/image/20170321/20170321185537_34804.png。
四、实验仿真
http://cda.pinggu.org/uploadfile/image/20170321/20170321185417_12671.png
(原始空间中的图像)
MATLAB代码
主程序
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
%% 非线性支持向量机
% 清空内存
clear all;
clc;
% 导入测试数据
A = load('testSetRBF.txt');
%% 区分开训练数据与测试数据
m = size(A);%得到整个数据集的大小
trainA = A(11:m(1,1),:);
testA = A(1:10,:);
% 训练和测试数据集的大小
mTrain = size(trainA);
mTest = size(testA);
% 区分开特征与标签
Xtrain = trainA(:,1:2);
Ytrain = trainA(:,mTrain(1,2))';
Xtest = testA(:,1:2);
Ytest = testA(:,mTest(1,2))';
%% 对偶问题,用二次规划来求解,以求得训练模型
sigma = 0.5;%高斯核中的参数
H = zeros(mTrain(1,1),mTrain(1,1));
for i = 1:mTrain(1,1)
end
f = ones(mTrain(1,1),1)*(-1);
B = Ytrain;
b = 0;
lb = zeros(mTrain(1,1),1);
% 调用二次规划的函数
[x,fval,exitflag,output,lambda] = quadprog(H,f,[],[],B,b,lb);
% 定义C
C = max(x);
% 求解原问题
n = size(x);
k = 1;
for i = 1:n(1,1)
end
b = mean(b);
%% 决策函数来验证训练准确性
trainOutput = zeros(mTrain(1,1),1);
for i = 1:mTrain(1,1)
end
for i = 1:mTrain(1,1)
end
% 统计正确个数
countTrain = 0;
for i = 1:mTrain(1,1)