1. 什么是支持向量机

  • 英文Support Vector Machines,简写SVM . 主要是基于支持向量来命名的,什么是支持向量后面会讲到…….最简单的SVM是用来二分类的,在深度学习崛起之前被誉为最好的现成分类器,”现成”指的是数据处理好,SVM可以直接拿来使用 …

2. 名词解释

2.1线性(不)可分 , 超平面


上图 线性可分(绿色荧光笔直线),即一条直线完美分类,虽然有不同的分割法,这条分割线就叫做”分割超平面”,二维中直线就是一个超平面,扩展到n维中n-1维也就是超平面

左面这张图很明显,所谓线性不可分,则是一条直线不能完美分类

左面这张图也是线性不可分 但是 有一个圆形区域很好的进行了分类
这时候就可以映射到高维,见下例

面 到 体 :

线 到 面 :
这个例子就比较好理解了,主要是怎么映射? 见下内容….

2.2 支持向量

支持向量在SVM中很重要,名字就看得出来, 在上例中红线为分割超平面,红色的*点就是支持向量点,即离分割超平面最近的点。

3. SVM理解

在二分类问题中,SVM需要的就是寻得一个分割超平面,使margin最大化,见下图,margin就是切割超平面离最近点的距离
最近的点就是支持向量点,这里的超平面可以定义为 w^X+b=0 \hat wX + b = 0
假设2维特征向量X=(x1,x2)X = (x_1, x_2) , 把b想象虚拟的w0w_0 ,
那么超平面方程就变成了 : w0+w1x1+w2x2=0w_0 + w_1x_1 + w_2x_2 = 0
右上方点满足 : w0+w1x1+w2x2>0w_0 + w_1x_1 + w_2x_2 > 0
同理,左下点满足 : w0+w1x1+w2x2<0w_0 + w_1x_1 + w_2x_2
经过对weight参数的调整,使得
H1:w0+w1x1+w2x2>=1H_1 : w_0 + w_1x_1 + w_2x_2 >= 1 for y = +1
H2:w0+w1x1+w2x2<=1H_2 : w_0 + w_1x_1 + w_2x_2 for y = - 1 (用y的+1代表一类,-1代表另一类)
综上两式
yi(w0+w1x1+w2x2)>=1,∀iy_i(w_0+w_1x_1+w_2x_2)>=1 , \forall i

那么如果线行不可分呢,那就需要映射到高维,例如X=(x1,x2,x3)X=(x_1,x_2,x_3) 那么映射到6维Z函数就可以是 θ1(x)=x1,θ2(x)=x2,θ3(x)=x3θ4(x)=x21,θ5(x)=x1x2,θ6(x)=x1x3\theta_1(x)=x_ 1,\theta_2(x)=x_ 2,\theta_3(x)=x_ 3\theta_4(x)=x_ 1^2,\theta_5(x)=x_ 1x_2,\theta_6(x)=x_ 1x_3,取而代之的方程变为Y=w1z1+w2z2+...+w6z6Y = w_1z_1+w_2z_2+...+w_6z_6 那么怎么映射呢,(回答:用到的是内积)内积很耗时,所以使用核函数来计算这个内积,使得高维化时间变短,主要的核函数有

  • linear : 线性核函数(linear kernel)
  • poly : 多项式核函数(ploynomial kernel)
  • rbf : 径向机核函数(radical basis function)
  • sigmoid : 神经元的非线性作用函数核函数(Sigmoid tanh)

具体介绍还是看看文档吧…..

然后根据核函数就可以进行分类或者回归了…..

4. SVM优缺点

优点
- 支持向量决定时间复杂,而不是取决于数据集的大小
- 结果易于理解
缺点
- 对于参数以及核函数有依赖,原始算法不加修改只用于二分类
- 算法实现比较困难 (依赖sklearn库的话就算了,打脸)

5. sklearn库简单应用实例

# coding:utf-8from sklearn import svm
from numpy import *
import pylab as pl# 加载数据集
def loadData(fileName):dataMat = []labelMat = []with open(fileName) as txtFile:for line in txtFile.readlines():dataMat.append(map(float, line.split())[0:-1])labelMat.append(map(float, line.split())[-1])return dataMat, labelMat#
if __name__ == '__main__':x, y = loadData("train.txt")X, Y = loadData("test.txt")#'使用线性方法分类'clf = svm.SVR(kernel='linear')  clf.fit(x, y)res = clf.predict(X)print "kernel is linear", corrcoef(Y, res, rowvar=0)[0, 1]#'使用径向机方法分类'clf = svm.SVR(kernel='rbf')   clf.fit(x, y)res = clf.predict(X)print "kernel is rbf", corrcoef(Y, res, rowvar=0)[0, 1]#'使用线性最小二乘法进行分类'x = mat(x)X = mat(X)y = mat(y).TY = mat(Y).Ttemp = x.T * xws = temp.I * (x.T * y)yPre = X * wsprint "linear", corrcoef(yPre, Y, rowvar=0)[0, 1]''' SVR 支持向量回归 '''# w^T * x + bias# weight is .coef_# bias   is .intercept_random.seed(0)x = r_[random.randn(20, 2) - [2, 2], random.randn(20, 2) + [2, 2]]y = [0] * 20 + [1] * 20clf = svm.SVC(kernel='linear')clf.fit(x, y)w = clf.coef_[0]# print "coef",clf.coef_a = -w[0] / w[1]xx = arange(-4, 4)yy = a * xx - (clf.intercept_[0]) / w[1]  # intercept_ bias# print "bias",clf.intercept_b = clf.support_vectors_[0]yy1 = a * xx + (b[1] - a * b[0])b = clf.support_vectors_[-1]yy2 = a * xx + (b[1] - a * b[0])pl.plot(xx, yy, 'k-', color='red')pl.plot(xx, yy1, 'k--', color='green')pl.plot(xx, yy2, 'k--', color='green')pl.plot(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], '*', color='red')# print clf.support_vectors_pl.scatter(x[:, 0], x[:, 1], marker='.', s=60)pl.show()

6. 图像结果 以及 分析

# kernel is linear 0.989824485227
# kernel is rbf 0.990336373871
# linear 0.989824485227
'对比发现,简单调用中rbf函数分类效果最好,内核函数linear就是利用了最小二乘法'


红色为支持向量,红线为切割超平面,绿色虚线为边际超平面,用来’阻挡’两类的超平面

附 数据集

点击这里

  • 什么是支持向量机
  • 名词解释
    • 1线性不可分 超平面
    • 2 支持向量
  • SVM理解
  • SVM优缺点
  • sklearn库简单应用实例
  • 图像结果 以及 分析
  • 附 数据集

支持向量机(SVM)理解以及在sklearn库中的简单应用相关推荐

  1. sklearn库中的标准数据集及基本功能

    [sklearn库] sklearn是scikit-learn的简称,是一个基于Python的第三方模块.sklearn库集成了一些常用的机器学习方法,在进行机器学习任务是,并不需要实现算法,只需要简 ...

  2. ML之sklearn:sklearn库中的ShuffleSplit()函数和StratifiedShuffleSplit()函数的讲解

    ML之sklearn:sklearn库中的ShuffleSplit()函数和StratifiedShuffleSplit()函数的讲解 目录 sklearn库中的ShuffleSplit()函数和St ...

  3. 【Python机器学习】Sklearn库中Kmeans类、超参数K值确定、特征归一化的讲解(图文解释)

    一.局部最优解 采用随机产生初始簇中心 的方法,可能会出现运行 结果不一致的情况.这是 因为不同的初始簇中心使 得算法可能收敛到不同的 局部极小值. 不能收敛到全局最小值,是最优化计算中常常遇到的问题 ...

  4. python svr回归_使用sklearn库中的SVR做回归分析

    sklearn中的回归有多种方法,广义线性回归集中在linear_model库下,例如普通线性回归.Lasso.岭回归等:另外还有其他非线性回归方法,例如核svm.集成方法.贝叶斯回归.K近邻回归.决 ...

  5. pythonsklearn乳腺癌数据集_Python的Sklearn库中的数据集

    一.Sklearn介绍 scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了.其完善之处不仅在于实现的算法多,还包括大 ...

  6. python的自带数据集_Python的Sklearn库中的数据集

    一.Sklearn介绍 scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了.其完善之处不仅在于实现的算法多,还包括大 ...

  7. 打造属于自己的量化投资系统9——支持向量机SVM算法在股票预测涨跌中应用

    1.支持向量机即SVM原理 支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于分类的范畴.它的原理就是求出"保证距离最近的点,距离它们最远的线&q ...

  8. Python初探——sklearn库中数据预处理函数fit_transform()和transform()的区别

    敲<Python机器学习及实践>上的code的时候,对于数据预处理中涉及到的fit_transform()函数和transform()函数之间的区别很模糊,查阅了很多资料,这里整理一下: ...

  9. 利用pytorch 做一个简单的神经网络实现sklearn库中莺尾花的分类

    本文针对本人学习pytorch的分类问题,自己写了一个简单的code import numpy as np from collections import Counter from sklearn i ...

  10. 支持向量机SVM原理解析

    支持向量机(SVM) 支持向量机(support vector machine,SVM)使用训练集中的一个子集来表示决策边界,边界用于样本分类,这个子集称作支持向量(support vector). ...

最新文章

  1. Linux 之alias 命令别名
  2. 【深度学习】卷积神经网络实现图像多分类的探索
  3. Android性能优化面试题,与性能优化相关面试题 - 与IPC机制相关面试题 - 《Android面试宝典》 - 书栈网 · BookStack...
  4. 请MM吃饭之工厂模式实现
  5. React中的fragment和StrictMode
  6. eclipse导入项目pom文件报错_eclipse导入maven管理的项目时,pom.xml第一行报错。错误如图1。而且dubbo的xml也不识别。...
  7. 关于创业,潮汕人、温州人做生意的多
  8. 2.微型计算机系统的基本结构及计算机各个部件的功能
  9. 万能ABAP程序修改器
  10. eclipse中的英文与汉语对照表
  11. 2022年阿里云域名备案流程亲测及注意事项
  12. Win10 中主机名hosts 文件位置
  13. 显著性检测综述(完整整理)
  14. 视频教程-Python编程的术与道:Python语言入门-Python
  15. Matlab中sim函数的用法
  16. matlab函数 无限冲激响应滤波器,MATLAB代码 有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器...
  17. 包装类------拆箱与装箱
  18. 解决ViVO 手机安装APP失败问题
  19. 工作站 显卡 测试软件,绝对专业!14块工作站显卡测试(图)
  20. 制作适应手机网页、平板电脑(iPad)、电脑网页的三种方法

热门文章

  1. vue中的事件修饰符.self、.capture和.passive
  2. Android APP旋转屏幕
  3. 爆强的一些文句, 太经典了
  4. 260,我要满血复活了。
  5. HTML meta 标签的使用方式总结(本文总结17中使用方式)
  6. 实验项目一 俄罗斯方块游戏
  7. arduino 超声波测距原理_[Arduino]超声波测距
  8. 完美国际架设mysql_完美国际SF-物理机架设服务端教程
  9. 手游传奇架设教程_传奇手游战神引擎架设教程
  10. 深信服 SANGFOR 设备密码恢复和配置备份恢复