在上两节中,我们讲解了机器学习的决策树和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的更多相关文章

  1. 机器学习之支持向量机—SVM原理代码实现

    支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...

  2. 【机器学习】支持向量机SVM

    关于支持向量机SVM,这里也只是简单地作个要点梳理,尤其是要注意的是SVM的SMO优化算法.核函数的选择以及参数调整.在此不作过多阐述,单从应用层面来讲,重点在于如何使用libsvm,但对其原理算法要 ...

  3. 吴裕雄--天生自然python机器学习:支持向量机SVM

    基于最大间隔分隔数据 import matplotlib import matplotlib.pyplot as plt from numpy import * xcord0 = [] ycord0 ...

  4. python机器学习之支持向量机SVM

    支持向量机SVM(Support Vector Machine) 关注公众号"轻松学编程"了解更多. [关键词]支持向量,最大几何间隔,拉格朗日乘子法 一.支持向量机的原理 Sup ...

  5. Python机器学习算法 — 支持向量机(SVM)

    SVM--简介 <α∗j<C,可得:          构造决策函数:  5.求最优解         要求解的最优化问题如下:          考虑使用序列最小最优化算法(SMO,se ...

  6. 机器学习(十一) 支持向量机 SVM(上)

    一.什么是支撑向量机SVM (Support Vector Machine) SVM(Support Vector Machine)指的是支持向量机,是常见的一种判别方法.在机器学习领域,是一个有监督 ...

  7. 机器学习-5 支持向量机SVM

    一.概念和背景 SVM:Support Vector Machine 支持向量机. 最早是由Vladimir N. Vapnik和Alexey Ya. Chervonenkis在1963年提出的. 目 ...

  8. 机器学习:支持向量机(SVM)

    SVM,称为支持向量机,曾经一度是应用最广泛的模型,它有很好的数学基础和理论基础,但是它的数学基础却比以前讲过的那些学习模型复杂很多,我一直认为它是最难推导,比神经网络的BP算法还要难懂,要想完全懂这 ...

  9. 机器学习(十一) 支持向量机 SVM(下)

    支持向量机通过某非线性变换 φ( x) ,将输入空间映射到高维特征空间.特征空间的维数可能非常高.如果支持向量机的求解只用到内积运算,而在低维输入空间又存在某个函数 K(x, x′) ,它恰好等于在高 ...

随机推荐

  1. abapGit简介与教程

    你是ABAP开发者?你用abapGit吗? 看到这个问题,读者也许会想,什么是abapGit?就让我们从这个问题开始.简单地说,abapGit是一个以ABAP写成为ABAP服务的Git客户端. 有的读 ...

  2. EF 数据重复和缺失问题(select 错误 )

    字段有 id,name,password,sex 1.错误举例: var data = db.User.Select(d => d):   2修正 var data = db.User.Sele ...

  3. ReflectiveLoader分析(远程线程注入 PE修正)

    从github上下载了ReflectiverLoader认真学习了一下 在代码中得到一些心得和自己的想法,都按步骤写到了代码中,现在分享给大家,如有错,望大家指正 其中需要注入的dll和解析, 内存R ...

  4. MongoDB查询分析

    MongoDB 查询分析可以确保我们建立的索引是否有效,是查询语句性能分析的重要工具.MongoDB 查询分析常用函数有:explain() 和 hint(). 1. explain(): 提供查询信 ...

  5. spark join操作解读

    本文主要介绍spark join相关操作,Java描述. 讲述三个方法spark join,left-outer-join,right-outer-join 我们以实例来进行说明.我的实现步骤记录如下 ...

  6. mysql开启慢查询日志以及查看(转载自网络)

    转载自http://database.51cto.com/art/201309/410314_1.htm

  7. Leetcode题解(二)

    4.Median of Two Sorted Arrays(*) 题目 题目要求找到两个排序数组的中位数. 中位数的定义:当n为奇数时,median = array[n/2];当n为偶数时,media ...

  8. hdu1285 确定比赛名次(拓扑排序)

    有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道 ...

  9. Python datetime之timedelta

    该函数表示两个时间的间隔 参数可选.默认值都为0:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minut ...

  10. android 横竖屏切换不重走生命周期

    android在系统配置发生改变时,Activity会被重新创建,但是某些情况下我们希望系统配置改变时不会重新创建Activity,这个时候我们可以给Activity指定相对应的configChang ...