一、回顾

    前面三篇博文主要介绍了支持向量机的基本概念,线性可分支持向量机的原理以及线性支持向量机的原理,线性可分支持向量机是线性支持向量机的基础。对于线性支持向量机,选择一个合适的惩罚参数,并构造凸二次规划问题:
求得原始问题的对偶问题的最优解,由此可求出原始问题的最优解:
其中中满足的分量。这样便可以求得分离超平面
以及分类决策函数:
    线性可分支持向量机算法是线性支持向量机算法的特殊情况。

二、非线性问题的处理方法

    在处理非线性问题时,可以通过将分线性问题转化成线性问题,并通过已经构建的线性支持向量机来处理。如下图所示:
(非线性转成线性问题)
(图片摘自:http://www.cnblogs.com/gghost/archive/2013/09/02/3296297.html)
通过一种映射可以将输入空间转换到对应的特征空间,体现在特征空间中的是对应的线性问题。核技巧就可以完成这样的映射工作。

1、核函数的定义(摘自《统计机器学习》)

   设是输入空间(欧式空间的子集或离散集合),又设为特征空间(希尔伯特空间),如果存在一个从的映射
使得对所有,函数满足条件
则称为核函数,为映射函数。
   在实际的问题中,通常使用已有的核函数。

2、常用核函数

  • 多项式核函数(Polynomial Kernel Function)
  • 高斯核函数(Gaussian Kernel Function)

三、非线性支持向量机

    1、选取适当的核函数和适当的参数,构造原始问题的对偶问题:
求得对应的最优解
    2、选择的一个满足的分量,求:
    3、构造决策函数

四、实验仿真

    对于非线性可分问题,其图像为:
(原始空间中的图像)
MATLAB代码
主程序
[plain] view plaincopy
  1. %% 非线性支持向量机
  2. % 清空内存
  3. clear all;
  4. clc;
  5. % 导入测试数据
  6. A = load('testSetRBF.txt');
  7. %% 区分开训练数据与测试数据
  8. m = size(A);%得到整个数据集的大小
  9. trainA = A(11:m(1,1),:);
  10. testA = A(1:10,:);
  11. % 训练和测试数据集的大小
  12. mTrain = size(trainA);
  13. mTest = size(testA);
  14. % 区分开特征与标签
  15. Xtrain = trainA(:,1:2);
  16. Ytrain = trainA(:,mTrain(1,2))';
  17. Xtest = testA(:,1:2);
  18. Ytest = testA(:,mTest(1,2))';
  19. %% 对偶问题,用二次规划来求解,以求得训练模型
  20. sigma = 0.5;%高斯核中的参数
  21. H = zeros(mTrain(1,1),mTrain(1,1));
  22. for i = 1:mTrain(1,1)
  23. for j = 1:mTrain(1,1)
  24. H(i,j) = GaussianKernalFunction(Xtrain(i,:),Xtrain(j,:),sigma);
  25. H(i,j) = H(i,j)*Ytrain(i)*Ytrain(j);
  26. end
  27. end
  28. f = ones(mTrain(1,1),1)*(-1);
  29. B = Ytrain;
  30. b = 0;
  31. lb = zeros(mTrain(1,1),1);
  32. % 调用二次规划的函数
  33. [x,fval,exitflag,output,lambda] = quadprog(H,f,[],[],B,b,lb);
  34. % 定义C
  35. C = max(x);
  36. % 求解原问题
  37. n = size(x);
  38. k = 1;
  39. for i = 1:n(1,1)
  40. Kernel = zeros(n(1,1),1);
  41. if x(i,1) > 0 && x(i,1)<C
  42. for j = 1:n(1,1)
  43. Kernel(j,:) = GaussianKernalFunction(Xtrain(j,:),Xtrain(i,:),sigma);
  44. Kernel(j,:) = Kernel(j,:)*Ytrain(j);
  45. end
  46. b(k,1) = Ytrain(1,i)-x'*Kernel;
  47. k = k +1;
  48. end
  49. end
  50. b = mean(b);
  51. %% 决策函数来验证训练准确性
  52. trainOutput = zeros(mTrain(1,1),1);
  53. for i = 1:mTrain(1,1)
  54. Kernel_train = zeros(mTrain(1,1),1);
  55. for j = 1:mTrain(1,1)
  56. Kernel_train(j,:) = GaussianKernalFunction(Xtrain(j,:),Xtrain(i,:),sigma);
  57. Kernel_train(j,:) = Kernel_train(j,:)*Ytrain(j);
  58. end
  59. trainOutput(i,1) = x'*Kernel_train+b;
  60. end
  61. for i = 1:mTrain(1,1)
  62. if trainOutput(i,1)>0
  63. trainOutput(i,1)=1;
  64. elseif trainOutput(i,1)<0
  65. trainOutput(i,1)=-1;
  66. end
  67. end
  68. % 统计正确个数
  69. countTrain = 0;
  70. for i = 1:mTrain(1,1)
  71. if trainOutput(i,1) == Ytrain(i)
  72. countTrain = countTrain+1;
  73. end
  74. end
  75. trainCorrect = countTrain./mTrain(1,1);
  76. %% 决策函数来验证测试准确性
  77. testOutput = zeros(mTest(1,1),1);
  78. for i = 1:mTest(1,1)
  79. Kernel_test = zeros(mTrain(1,1),1);
  80. for j = 1:mTrain(1,1)
  81. Kernel_test(j,:) = GaussianKernalFunction(Xtrain(j,:),Xtest(i,:),sigma);
  82. Kernel_test(j,:) = Kernel_test(j,:)*Ytrain(j);
  83. end
  84. testOutput(i,1) = x'*Kernel_train+b;
  85. end
  86. for i = 1:mTest(1,1)
  87. if testOutput(i,1)>0
  88. testOutput(i,1)=1;
  89. elseif testOutput(i,1)<0
  90. testOutput(i,1)=-1;
  91. end
  92. end
  93. % 统计正确个数
  94. countTest = 0;
  95. for i = 1:mTest(1,1)
  96. if testOutput(i,1) == Ytest(i)
  97. countTest = countTest+1;
  98. end
  99. end
  100. testCorrect = countTest./mTest(1,1);
  101. disp(['训练的准确性:',num2str(trainCorrect)]);
  102. disp(['测试的准确性:',num2str(testCorrect)]);

核函数

[plain] view plaincopy
  1. %% 高斯核函数,其中输入x和y都是行向量
  2. function [ output ] = GaussianKernalFunction( x,y,sigma )
  3. output = exp(-(x-y)*(x-y)'./(2*sigma^2));
  4. end

最终的结果为:

注:在这个问题中,有两个参数需要调整,即核参数和惩罚参数,选取合适的参数对模型的训练起着很重要的作用。在程序中,我是指定的参数。这里的程序只是为帮助理解算法的过程。

机器学习算法(分类算法)—支持向量机(4)相关推荐

  1. [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. 机器学习分类算法_达观数据:5分钟带你理解机器学习及分类算法

    1.本文介绍内容:什么是机器学习,机器学习有哪些分类算法,分类算法之k-近邻,决策树,随机森林2.本文适合人群:本文通过通俗易懂的语言和例子介绍核心思想,不拽高大上的名词,适合于不懂机器学习的小白3. ...

  3. 朴素贝叶斯算法-分类算法

    朴素贝叶斯算法-分类算法 1 概率基础 概率定义为一件事情发生的可能性 联合概率:包含多个条件,且所有条件同时成立的概率,记作P(A,B) 条件概率:事件A在另一个事件B已经发生条件下的发送概率,记作 ...

  4. 机器学习:分类算法SVM(支持向量机)

    支持向量机(Support Vector Machine ,SVM)的主要思想是:建立一个最优决策超平面,使得该平面两侧距离该平面最近的两类样本之间的距离最大化,从而对分类问题提供良好的泛化能力.对于 ...

  5. 15 分钟带你入门 sklearn 与机器学习(分类算法篇)

    众所周知,Scikit-learn(以前称为scikits.learn)是一个用于Python编程语言的免费软件机器学习库.它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度增强,k-me ...

  6. Sklearn 损失函数如何应用到_15 分钟带你入门 sklearn 与机器学习(分类算法篇)...

    众所周知,Scikit-learn(以前称为scikits.learn)是一个用于Python编程语言的免费软件机器学习库.它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度增强,k-me ...

  7. 机器学习中分类算法的优缺点

    决策树 一.  决策树优点 1.决策树易于理解和解释,可以可视化分析,容易提取出规则. 2.可以同时处理标称型和数值型数据. 3.测试数据集时,运行速度比较快. 4.决策树可以很好的扩展到大型数据库中 ...

  8. 机器学习经典分类算法 —— C4.5算法(附python实现代码)

    目录 理论介绍 什么是分类 分类的步骤 什么是决策树 决策树归纳 信息增益 相关理论基础 计算公式 ID3 C4.5 python实现 参考资料 理论介绍 什么是分类 分类属于机器学习中监督学习的一种 ...

  9. 【机器学习】分类算法-K-近邻算法

    目标 说明K-近邻算法的距离公式 说明K-近邻算法的超参数K值以及取值问题 说明K-近邻算法的优缺点 应用KNeighborsClassifier实现分类 了解分类算法的评估标准准确率 应用:Face ...

  10. 机器学习5—分类算法之随机森林(Random Forest)

    随机森林(Random Forest) 前言 一.随机森林 1.什么是随机森林 2.随机森林的特点 3.随机森林的生成 二.随机森林的函数模型 三.随机森林算法实现 1.数据的读取 2.数据的清洗和填 ...

最新文章

  1. vue引入图片路径的三种主要方法
  2. HDU1530(最大团问题)
  3. Android分级部门选择界面(一)
  4. 当心啊!仅仅50行Python,就可以在手机端看小姐姐的电脑桌面!
  5. qt5使用触屏 偶尔没响应_Qt5+VS2015编程入门示例及注意事项——打印九九乘法表...
  6. Requirements of an SAP system administrator
  7. JQuery AJAX基本使用
  8. Maven入门基础-环境篇
  9. 3.5 将 Batch Norm 拟合进神经网络
  10. Hyper-V 测试
  11. SVPWM算法原理及详解
  12. 日记侠:我为什么学习网络营销
  13. python画正态分布_python 画正态曲线
  14. vc语言c1083错误,vc++常见错误之二:“fatal error C1083: ”无法打开包括文件-Go语言中文社区...
  15. 【FinalIK】Full Body Biped IK
  16. proxyconnect tcp: dial tcp: lookup proxy.example.com on 8.8.8.8:53: no such host
  17. bugkuCTF---flag在index里
  18. 固态硬盘比机器硬盘好很多吗?
  19. ps还原上一步快捷键,ps还原上一步快捷键_photoshop恢复上一步操作的快捷键是什么...
  20. 史莱姆方块java_史莱姆 - Minecraft Wiki,最详细的官方我的世界百科

热门文章

  1. 《深入解析Windows操作系统》笔记第1章
  2. 计算机教育专业,关于计算机教育专业论文
  3. abaqus Linux 中文,SIMULIA ABAQUS 2016.0 Win64 Linux64 2DVD工程模拟的有限元
  4. 驰骋工作流程引擎——流程设计器操作说明书
  5. 如何编写发明专利说明书
  6. 服务器上虚拟内存怎么设置方法,服务器的虚拟内存设置方法
  7. excel批量修改文件名方法
  8. js 获取ulr问号后参数,返回Object对象
  9. 【思维导图软件哪个好】万彩脑图大师教程 | 编辑思维导图背景
  10. GIS教程之哪种语言更适合地理可视化:R 还是 Python?