算法原理

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

超平面:在三维空间中,平面是两个点距离相同的点的轨迹。一个平面没有厚度,而且可以把空间分割成两部分。超平面是在维度大于三维度的时候仍然满足上面的条件,而且它的自由度比空间维度小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. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 解决

    感谢大佬:https://blog.csdn.net/a704397849/article/details/93797529 springboot + mybatis多数据库 + druid连接池配置 ...

  2. JS实现继承,封装一个extends方法

    父类 function Person(name,age){ this.name = name; this.age = age; } Person.prototype = { eat:function( ...

  3. MySQL数据类型的最优选择

    MySQL数据类型的最优选择   慎重选择数据类型很重要.为啥哩?可以提高性能.原理如下:            ● 存储(内存.磁盘).从而节省I/O(检索相同数据情况下)      ● 计算.进而 ...

  4. ELK 日志分析系统概述及部署

    ELK 日志分析系统概述及部署 1.ELK概述: ELK简介 : ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch.Logstash 和 Kiabana 三个开源工具配合使用 ...

  5. sort、uniq、tr、cut、eval以及正则表达式

    sort.uniq.tr.cut.eval以及正则表达式 目录 sort.uniq.tr.cut.eval以及正则表达式 一.sort命令 1. sort的作用 2. 语法格式 3. 常用选项 4. ...

  6. 计算机网络再次整理————tcp周边[八]

    前言 tcp的包的格式可以看我以前的计算机网络整理,下面这些周边只是为了开发时候我们能用到一些理论知识. 正文 首先要介绍的就是域名,为啥有域名这东西呢?单纯站在网络的角度上讲这属于应用层的东西了. ...

  7. 1Python运行Appium测试的例子

    电脑系统配置:Windows7的64位 1.Python sample(Python示例)下载 https://github.com/appium/sample-code/tree/master/sa ...

  8. HTTP缓存小结

    介绍 提到页面优化,浏览器缓存必定是一个绕不过的话题,判断一个网站的性能最直观的就是看网页打开的速度,而提高网页反应速度的一个方式就是使用缓存.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟, ...

  9. MySQL安装,使用问题汇总

    一,安装问题 mysqld install时出现:The service already exists! 报错原因:以前机器上装过mysql没有卸载干净 解决方案: C:\windows\system ...

  10. 使用Hot Chocolate和.NET 6构建GraphQL应用(9) —— 实现Mutate更新数据

    系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 在上一篇文章中,我们演示了如何使用Hot Chocolate进行GraphQL的Mutate新增数据,这篇文 ...