算法原理

要找到一些线,这些线都可以分割红豆和绿豆,找到正确的方向或者斜率的那条线,确认马路的宽度,得到最优解--马路的中轴

超平面:在三维空间中,平面是两个点距离相同的点的轨迹。一个平面没有厚度,而且可以把空间分割成两部分。超平面是在维度大于三维度的时候仍然满足上面的条件,而且它的自由度比空间维度小1。(通俗讲,在二维中就是直线,三维就是平面,在三维以上的就是超平面)

支持向量:假设找到一条线可以可以分割红豆和绿豆,红豆和绿豆中距离这条线最近的几个样本点被称为支持向量。这些点到这条线的距离叫间隔。

注意:在决定最佳超平面时只有支持向量起作用,而其他数据点并不起作用

如何处理不清晰的边界

软间隔:在这个间隔区域里允许出现一定数量的样本,这个间隔为软间隔

硬间隔:划分非常清晰,在间隔中间没有任何红豆和绿豆的理想状态下,这个间隔为硬间隔

如何处理非线性可分

svm采取的办法:把不可划分的样本映射到高维空间。借助“核函数”来映射到高维的操作

常见的核函数:线性核函数、多项式核函数、高斯核函数

算法优点

1.有严格的数学理论支持,可解释性强(能得到全局最优解)

2.算法的鲁棒性很好(指控制系统在一定(结构,大小)的参数摄动下,维持其它某些性能的特性)【支持向量没问题就没问题】

算法缺点

1.训练集所需要的资源很大(只能处理小数据集比如几千条)

2.只能处理二分类问题

3.模型预测时,预测时间与支持向量个数成正比

#SVM
from sklearn import datasets #sklearn的数据集
from sklearn import svm #引入svm包
import numpy as np #矩形运算库numpy np.random.seed(0)
#设置随机种子,不设置的话默认是按系统时间作为参数,设置后可以保证我们每次产生的随机数是一样的 iris = datasets.load_iris() #获取鸢尾花数据集
iris_x = iris.data #数据部分
iris_y = iris.target #类别部分 #从150条数据中选取140条作为训练集,10条作为测试集。permutation接收一个数作为参数(这里为数据集长度150),
#产生一个0-149乱序一维数组
indices = np.random.permutation(len(iris_x))
iris_x_train = iris_x[indices[:-10]] #训练集数据
iris_y_train = iris_y[indices[:-10]] #训练集标签
iris_x_test = iris_x[indices[-10:]] #测试集数据
iris_y_test = iris_y[indices[-10:]] #测试集数据 #使用线性核SVC是分类支持向量机的意思,另外还有SVR是回归支持向量机
clf = svm.SVC(kernel='linear') #调用该对象的训练方法,主要接收两个参数:训练数据集及其类别标签
clf.fit(iris_x_train,iris_y_train) #拟合 #调用该对象的测试方法,主要接收一个参数:测试数据集
iris_y_predict = clf.predict(iris_x_test) #调用该对象的打分方法,计算出准确率
score = clf.score(iris_x_test,iris_y_test,sample_weight=None) #输出测试结果
print('iris_y_predict=')
print(iris_y_predict) #输出原始测试数据集的正确标签,以方便对比
print('iris_y_test=')
print(iris_y_test) #输出准确率计算结果
print('Accuracy:',score)

支持向量机(SVM):用一条线分开红豆与绿豆的更多相关文章

  1. 一步步教你轻松学支持向量机SVM算法之理论篇1

    一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  2. OpenCV支持向量机(SVM)介绍

    支持向量机(SVM)介绍 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 CvSVM::train 训练一个SVM分类器, 以及用 CvSVM::predict 测试训练结果. 什么是支持向 ...

  3. 支持向量机SVM 参数选择

    http://ju.outofmemory.cn/entry/119152 http://www.cnblogs.com/zhizhan/p/4412343.html 支持向量机SVM是从线性可分情况 ...

  4. 转:机器学习中的算法(2)-支持向量机(SVM)基础

    机器学习中的算法(2)-支持向量机(SVM)基础 转:http://www.cnblogs.com/LeftNotEasy/archive/2011/05/02/basic-of-svm.html 版 ...

  5. 【Supervised Learning】支持向量机SVM (to explain Support Vector Machines (SVM) like I am a 5 year old )

    Support Vector Machines 引言 内核方法是模式分析中非常有用的算法,其中最著名的一个是支持向量机SVM 工程师在于合理使用你所拥有的toolkit 相关代码 sklearn-SV ...

  6. 模式识别之svm()---支持向量机svm 简介1995

    转自:http://www.blogjava.net/zhenandaci/archive/2009/02/13/254519.html 作者:Jasper 出自:http://www.blogjav ...

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

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

  8. [白话解析] 深入浅出支持向量机(SVM)之核函数

    [白话解析] 深入浅出支持向量机(SVM)之核函数 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解支持向量机中的核函数概念,并且给大家虚构了一个水浒传的例子来做进一步的通俗 ...

  9. Stanford机器学习---第八讲. 支持向量机SVM

    原文: http://blog.csdn.net/abcjennifer/article/details/7849812 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回 ...

随机推荐

  1. Android返回键

    感谢大佬:https://www.cnblogs.com/qiluboy/p/5308310.html Android中back键和home键的区别: back键 Android的程序无需刻意的去退出 ...

  2. Java线程--Callable使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11871727.html Java线程--Callable使用 Callable和Runnabl ...

  3. Socket和数据库的一些使用---郭雪彬

    最近偶尔有时间,研究了下Socket的使用,虽然不简单,不过还是挺有意思,刚好咱们带头大哥需要我们发檄文,也罢,那就来一篇,废话不多说,直接入正题 struct sockaddr_in server_ ...

  4. 安卓手机超频CPU(无修饰CPU控制)

    手机软件内存越占越大,手机硬件配置太低运行太卡.其实可以通过超频cpu提升性能,安卓智能手机cpu怎么超频下面我来演示手机如何超频cpu.   方法/步骤     打开无修饰CPU控制.   设置CP ...

  5. LRU缓存及实现

    一.淘汰策略 缓存:缓存作为一种平衡高速设备与低速设备读写速度之间差异而引入的中间层,利用的是局部性原理.比如一条数据在刚被访问过只有就很可能再次被访问到,因此将其暂存到内存中的缓存中,下次访问不用读 ...

  6. 数据库delete from和truncate删除的区别详解

    一:区别 1.delete from 后面可以直接接条件,truncate不可以 2.delete from 记录是一条条删除的,所删除的每行记录都会进入日志,而truncate一次性删除整个页,因此 ...

  7. Django框架路由分发-名称空间

    目录 一:路由分发 1.路由分发简介 2.总路由分发配置 3.总路由终极配置(不需要导应用路由,直接点应用即可) 4.子路由配置 二:名称空间 1.名称空间应用场景 3.解决方式二>>&g ...

  8. Remix本地化,加载本地合约文件,本地链接Remix

    智能合约IDE,在线的比较卡,而且切换网络面临文件丢失的风险,选择本地搭建Solidity本地编辑环境,Remix-IDE + Remixd组合,加载本地合约代码.这里用到两个工具: Remix ID ...

  9. 对称加密算法之DES算法

    数据加密标准(data encryption standard): DES是一种分组加密算法,输入的明文为64位,密钥为56位,生成的密文为64位. DES对64位的明文分组进行操作.通过一个初始置换 ...

  10. (二)scrapy 中如何自定义 pipeline 下载图片

    这里以一个很简单的小爬虫为例,爬取 壹心理 网站的阅读页面第一页的所有文章及其对应的图片,文章页面如下: 创建项目 首先新建一个 scrapy 项目,安装好相关依赖(步骤可参考:scrapy 安装及新 ...