机器学习算法 - 支持向量机SVM
在上两节中,我们讲解了机器学习的决策树和k-近邻算法,本节我们讲解另外一种分类算法:支持向量机SVM。
SVM是迄今为止最好使用的分类器之一,它可以不加修改即可直接使用,从而得到低错误率的结果。
【案例背景】
从前有两个地主,他们都是占山为王的一方霸主。本来各自吃饱自己的饭万事无忧,可是人心不知足蛇吞象啊,自己总是都想占对方的一亩三分地,冲突争吵从来都没有停歇过。当时的环境就是谁狠这土地就归谁,但是我们现在想从科学的角度来分析,如何让他们的地盘均分,画条边界线,从此互不干扰呢?
【演示代码】
import numpy as np
import matplotlib.pylab as plt
from sklearn import svm #生成随机分布的点
np.random.seed(1)
X=np.r_[np.random.randn(20,2)-[2,2],np.random.randn(20,2)+[2,2]]
Y=[0]*20+[1]*20 #在图中画出随机分布的点
plt.scatter(X[:,0],X[:,1],c=Y,s=80,cmap=plt.cm.Paired) #这里是SVM核心算法函数
clf=svm.SVC(kernel='linear')
clf.fit(X,Y) #画出分割线
w=clf.coef_[0]
a=-w[0]/w[1] #得到斜率
xx=np.linspace(-5,5)
yy=a*xx-(clf.intercept_[0])/w[1]
plt.plot(xx,yy,'k-') #在图中画出支持向量的点的两条直线
b=clf.support_vectors_[0]
yy_down=a*xx+(b[1]-a*b[0])
b=clf.support_vectors_[-1]
yy_up=a*xx+(b[1]-a*b[0])
plt.plot(xx,yy_down,'k--')
plt.plot(xx,yy_up,'k--') #将支持向量的点特殊显示
plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=100) #在图中显示需要预测的点
test_x1, test_y1 = (-3, -3)
test_x2, test_y2 = (0, 5)
plt.scatter([test_x1],[test_y1],s=100)
plt.scatter([test_x2],[test_y2],s=100)
Z1 = clf.predict([[test_x1, test_y1]])
Z2 = clf.predict([[test_x2, test_y2]])
print('预测结果:',Z1) #显示预测结果
print('预测结果:',Z2) #显示预测结果 plt.show()
【执行结果】
预测结果: [0]
预测结果: [1]
【结果分析】
在上图中,用了4种颜色的圆点和三条直线,他们分别表示如下:
浅色点:地主1的建筑物
紫色点:地主2的建筑物
蓝色点:地主1和地主2相邻的关键建筑物
黄色点:预测点1
绿色点:预测点2
实体直线:最终的分界线,即楚河汉界的分界线,直线下方是地主1的地盘,直线上方是地主2的地盘。
虚线:关键点连成的直线,他们到分界线是等距的。
我们看到预测结果,黄点预测结果显示0,表示它在地主1的地盘;绿点预测结果显示1,表示它在地主2的地盘。
当然我们从肉眼也可以判断本次预测结果是对的。
【算法总结】
1. SVM算法只能划分两类物体,当然多类的情况可以转化为多次两类进行划分。
2. SVM算法不仅能划分线性可分的情况,还可以划分更加复杂线性不可分的情况,核心思想是:变成高阶计算,然后映射到低阶,以后有机会再单独演示这种情况。
OK, 本讲到此结束,后续更多精彩内容,请持续关注我的博客。
本文为原创文章,请珍惜作者的劳动成果,转载请注明出处。
原文地址:http://www.cnblogs.com/robin201711/p/7998613.html
机器学习算法 - 支持向量机SVM的更多相关文章
- 机器学习之支持向量机—SVM原理代码实现
支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...
- 【机器学习】支持向量机SVM
关于支持向量机SVM,这里也只是简单地作个要点梳理,尤其是要注意的是SVM的SMO优化算法.核函数的选择以及参数调整.在此不作过多阐述,单从应用层面来讲,重点在于如何使用libsvm,但对其原理算法要 ...
- 吴裕雄--天生自然python机器学习:支持向量机SVM
基于最大间隔分隔数据 import matplotlib import matplotlib.pyplot as plt from numpy import * xcord0 = [] ycord0 ...
- python机器学习之支持向量机SVM
支持向量机SVM(Support Vector Machine) 关注公众号"轻松学编程"了解更多. [关键词]支持向量,最大几何间隔,拉格朗日乘子法 一.支持向量机的原理 Sup ...
- Python机器学习算法 — 支持向量机(SVM)
SVM--简介 <α∗j<C,可得: 构造决策函数: 5.求最优解 要求解的最优化问题如下: 考虑使用序列最小最优化算法(SMO,se ...
- 机器学习(十一) 支持向量机 SVM(上)
一.什么是支撑向量机SVM (Support Vector Machine) SVM(Support Vector Machine)指的是支持向量机,是常见的一种判别方法.在机器学习领域,是一个有监督 ...
- 机器学习-5 支持向量机SVM
一.概念和背景 SVM:Support Vector Machine 支持向量机. 最早是由Vladimir N. Vapnik和Alexey Ya. Chervonenkis在1963年提出的. 目 ...
- 机器学习:支持向量机(SVM)
SVM,称为支持向量机,曾经一度是应用最广泛的模型,它有很好的数学基础和理论基础,但是它的数学基础却比以前讲过的那些学习模型复杂很多,我一直认为它是最难推导,比神经网络的BP算法还要难懂,要想完全懂这 ...
- 机器学习(十一) 支持向量机 SVM(下)
支持向量机通过某非线性变换 φ( x) ,将输入空间映射到高维特征空间.特征空间的维数可能非常高.如果支持向量机的求解只用到内积运算,而在低维输入空间又存在某个函数 K(x, x′) ,它恰好等于在高 ...
随机推荐
- MongoDB查询分析
MongoDB 查询分析可以确保我们建立的索引是否有效,是查询语句性能分析的重要工具.MongoDB 查询分析常用函数有:explain() 和 hint(). 1. explain(): 提供查询信 ...
- Robot Framework自动化测试框架初探
Robot Framework是一款python语言编写,通用的功能自动化测试框架.它使用了比较易用的表格数据语法,基于关键字驱动测试,主要用来验收测试和验收测试驱动开发(ATDD). 本文主要介绍R ...
- 关于session共享的解决方法
当网站业务规模和访问量的逐步增大,原本由单台服务器.单个域名组成的网站架构可能已经无法满足发展需要 此时会购买更多的服务器,并且以频道化的方式启用多个二级子域名,然后根据业务功能将网站分别部署在独立的 ...
- 读书笔记-你不知道的JS上-词法作用域
JS引擎 编译与执行 Javascript引擎会在词法分析和代码生成阶段对运行性能进行优化,包含对冗余元素进行优化(例如对语句在不影响结果的情况下进行重新组合). 对于Javascript来说,大部分 ...
- Windows 安装 python2.7
Windows 安装 python2.7 python2.7下载地址: https://www.python.org/downloads/release/python-2714/ 安装过程: 设置系统 ...
- Problem V
Problem Description The aspiring Roy the Robber has seen a lot of American movies, and knows that th ...
- 使用ichartjs生成图表
官网:http://www.ichartjs.com/ ichartjs 是一款基于HTML5的图形库.使用纯javascript语言, 利用HTML5的canvas标签绘制各式图形. ichartj ...
- 一场围绕着‘Deeping Learning’的高考
Deep Learning的基本思想和方法 实际生活中,人们为了解决一个问题,如对象的分类(对象可是是文档.图像等),首先必须做的事情是如何来表达一个对象,即必须抽取一些特征来表示一个对象,如文本的处 ...
- CQRS微服务架构模式
什么是微服务? 这是维基百科里面的定义:“微服务是面向服务架构(SOA)架构风格的一种变体,它将应用程序构建为一系列松散耦合的服务.在微服务体系结构中,服务应该是细粒度的,协议应该是轻量级的.将应用 ...
- Unity 游戏框架搭建 (七) 减少加班利器-QApp类
本来这周想介绍一些框架中自认为比较好用的小工具的,但是发现很多小工具都依赖一个类----App. App类的职责: 1.接收Unity的生命周期事件. 2.做为游戏的入口. 3.一些框架级别的组件初始 ...