思想:寻找能够成功分开两类样本并且具有最大分类间隔的最优超平面。

1.原理解析

空间中任何一个平面的方程都可以表示为wx+b =0,如上图,设最优超平面方程H为wx+b=0,支持向量x-到H的距离为,要使分类间隔最大,即该距离最大,而该距离只与|w|有关,分子为一个常数,为了简单优美,设分子常数为-1,则H1平面方程为wx+b = -1,同理H2平面方程为wx+b = 1。

则H1H2间的距离为(  -  ) . = 

间隔最大等价于最小化,故目标函数为J(w)= 

这个编辑器很难用,不想打公式了,直接上草稿 :

2.实例

  1. #1、读入数据
  2. import numpy as np
  3. dataList = []
  4. labelList = []
  5. def loadData(fileName):
  6. f = open(fileName)
  7. for line in f.readlines():
  8. lineStr = line.split('\t')
  9. dataList.append([float(lineArr[0]),float(lineArr[1])])
  10. labelList.append(float(lineArr[2]))
  11. return dataList,labelList
  12. dataList,labelList = loadData('testSet.txt')
  1. #2、训练支持向量机
  2. from sklearn import svm
  3. #基于libsvm工具箱,SVC非线性支持向量分类,可通过核定义其核函数,如‘linear’为线性,‘rbf’为径向基核函数
  4. clf = svm.SVC(kernel='linear')
  5. clf.fit(dataList,labelList)#训练
  1. #3、预测
  2. clf.predict([[7.5,-1.5]])#预测类别
  3. clf.decision_function([[7.5,-1.5]])#该SVC方法decision_function为每个样本提供每个类别的分数相当于回归
  4. #支持向量
  5. clf.support_vectors_#获得支持向量
  6. clf.support_#获得支持向量索引
  7. clf.n_support_#获得支持向量属于不同类别的个数
  1. #4、绘制决策边界和支持向量
  2. labelArr = np.array(labelList)
  3. x_min, x_max = dataArr[:, 0].min() - 1, dataArr[:, 0].max() + 1
  4. y_min, y_max = dataArr[:, 1].min() - 1, dataArr[:, 1].max() + 1
  5. xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))#meshgrid在空间上取点
  6. Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])#ravel平铺,相当于np.hstack(xx)
  7. row = len(np.arange(y_min,y_max,0.02))
  8. col = len(np.arange(x_min,x_max,0.02))
  9. Z = Z.reshape([row,col])
  10. #plt.cm中cm全称表示colormap,paired表示两个两个相近色彩输出,比如浅蓝、深蓝;浅红、深红;浅绿,深绿这种
  11. plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
  12. plt.scatter(dataArr[:, 0], dataArr[:, 1], c=labelList)#画出数据点
  13. plt.scatter(dataArr[clf.support_,0],dataArr[clf.support_,1],c = 'red',s = 100,marker='o')#画出支持向量

             <script>(function(){function setArticleH(btnReadmore,posi){var winH = $(window).height();var articleBox = $("div.article_content");var artH = articleBox.height();if(artH > winH*posi){articleBox.css({'height':winH*posi+'px','overflow':'hidden'})btnReadmore.click(function(){articleBox.removeAttr("style");$(this).parent().remove();})}else{btnReadmore.parent().remove();}}var btnReadmore = $("#btn-readmore");if(btnReadmore.length>0){if(currentUserName){setArticleH(btnReadmore,3);}else{setArticleH(btnReadmore,1.2);}}})()</script></article>

支持向量机 - 从原理到算法的实现相关推荐

  1. 支持向量机算法的实现和应用(Python3超详细的源码实现+图介绍)

    支持向量机算法的实现和应用,因为自己推到过SVM,建议自己推到一遍, 这里不对SVM原理做详细的说明. 原理公式推到推荐看:https://blog.csdn.net/jcjx0315/article ...

  2. 53.垃圾回收算法的实现原理、启动Java垃圾回收、Java垃圾回收过程、垃圾回收中实例的终结、对象什么时候符合垃圾回收的条件、GC Scope 示例程序、GC OutOfMemoryError的示例

    53.垃圾回收算法的实现原理 53.1.目录 53.2.启动Java垃圾回收 53.3.Java垃圾回收过程 53.4.垃圾回收中实例的终结 53.5.对象什么时候符合垃圾回收的条件? 53.5.1. ...

  3. 垃圾回收算法的实现原理_有关垃圾回收算法工作原理的动画指南

    垃圾回收算法的实现原理 Garbage Collection is the process of cleaning up a computer's memory by getting rid of d ...

  4. 【分布式ID】理解Snowflake算法的实现原理

    1.概述 转载:冷饭新炒:理解Snowflake算法的实现原理 我上次也看了一个视频讲解:[分布式ID]键高并发 分布式 全局唯一 ID 雪花算法 snowflake 2.前提# Snowflake( ...

  5. 几种随机算法的实现原理

    在日常工作中,经常需要使用随机算法.比如面对大量的数据, 需要从其中随机选取一些数据来做分析. 又如在得到某个分数后, 为了增加随机性, 需要在该分数的基础上, 添加一个扰动, 并使该扰动服从特定的概 ...

  6. 冒泡算法的实现原理:(从小到大排序)

    冒泡算法的实现原理:(从小到大排序) 1:比较相邻的两个元素,如果第一个比第二个大就交换位置 2:对每一对相邻的元素进行比较,从开始第一对到结尾的最后一对,这样最后的元素就是最大的了 3:每一次这样循 ...

  7. matlab中注水算法的实现和原理

    注水算法的实现及详细原理 注水算法的公式 算法的相关公式用图片展示 注水算法的公式 这公式怎么编辑啊,有点复杂啊 算法的相关公式用图片展示 前段时间学习使用注水算法,CSDN上分享的代码有很多,大同小 ...

  8. 统计学习方法|支持向量机(SVM)原理剖析及实现

    欢迎直接到我的博客查看最近文章:www.pkudodo.com.更新会比较快,评论回复我也能比较快看见,排版也会更好一点. 原始blog链接: http://www.pkudodo.com/2018/ ...

  9. 计算机图形学 区域填充,计算机图形学 区域填充算法的实现

    . '. 实验四区域填充算法的实现班级 08信计学号 58 姓名陈瑞雪分数 一.实验目的和要求: 1.掌握区域填充算法基本知识 2.理解区域的表示和类型,能正确区分四连通和八连通的区域 3.了解区域填 ...

最新文章

  1. 76 从OpenCV学习C++ 高级语言特性
  2. javascript 迁移 typescript 实践
  3. Android ListView几个重要属性
  4. date转timestamp格式_技术分享 | MySQL:timestamp 时区转换导致 CPU %sys 高的问题
  5. 如果年轻,就出发吧!
  6. TDengine安装教程
  7. 技术面试问项目难题如何解决的_技术创新 | 降本增效,青海农信社项目小伙刻苦钻研解决联合支架设计难题!...
  8. 485通信实现自动收发功能
  9. 2014年国内最热门的.NET开源项目TOP25
  10. html宽度满屏,宽度满屏的代码怎么样写?
  11. 返回两个时间范围内的一个随机时间
  12. 【转载】SI 9000 及阻抗匹配学习笔记(一)
  13. 数据可视化工具软件哪个最好
  14. 周立功USBCAN-II的Python调用
  15. 海康播放视频Demo
  16. 如何打开windows的服务管理
  17. Image data cannot be converted to float
  18. 注塑工艺工程师视频教程 注塑机调机成型参数教程
  19. 8/人天,小记一次 JAVA(APP后台) 项目改造 .NET 过程(后台代码已开源于 Github)
  20. HTML怎么设艺术字体,用CSS设计艺术字集锦(二)

热门文章

  1. Core Data系列三——基本使用
  2. Unity 官方网站
  3. 第十七节(is-a 、is-like-a 、has-a,包和 import )
  4. 平面方程(Plane Equation)
  5. SkipList 以及高度的确定
  6. Linux内核入门之路 (非广告)
  7. 安卓9.0Sensor框架
  8. C语言结构体用法很多,坑也很多
  9. STM32——串口通信
  10. vmwaretools安装