支持向量机(SVM)理解以及在sklearn库中的简单应用
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库中的简单应用相关推荐
- sklearn库中的标准数据集及基本功能
[sklearn库] sklearn是scikit-learn的简称,是一个基于Python的第三方模块.sklearn库集成了一些常用的机器学习方法,在进行机器学习任务是,并不需要实现算法,只需要简 ...
- ML之sklearn:sklearn库中的ShuffleSplit()函数和StratifiedShuffleSplit()函数的讲解
ML之sklearn:sklearn库中的ShuffleSplit()函数和StratifiedShuffleSplit()函数的讲解 目录 sklearn库中的ShuffleSplit()函数和St ...
- 【Python机器学习】Sklearn库中Kmeans类、超参数K值确定、特征归一化的讲解(图文解释)
一.局部最优解 采用随机产生初始簇中心 的方法,可能会出现运行 结果不一致的情况.这是 因为不同的初始簇中心使 得算法可能收敛到不同的 局部极小值. 不能收敛到全局最小值,是最优化计算中常常遇到的问题 ...
- python svr回归_使用sklearn库中的SVR做回归分析
sklearn中的回归有多种方法,广义线性回归集中在linear_model库下,例如普通线性回归.Lasso.岭回归等:另外还有其他非线性回归方法,例如核svm.集成方法.贝叶斯回归.K近邻回归.决 ...
- pythonsklearn乳腺癌数据集_Python的Sklearn库中的数据集
一.Sklearn介绍 scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了.其完善之处不仅在于实现的算法多,还包括大 ...
- python的自带数据集_Python的Sklearn库中的数据集
一.Sklearn介绍 scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了.其完善之处不仅在于实现的算法多,还包括大 ...
- 打造属于自己的量化投资系统9——支持向量机SVM算法在股票预测涨跌中应用
1.支持向量机即SVM原理 支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于分类的范畴.它的原理就是求出"保证距离最近的点,距离它们最远的线&q ...
- Python初探——sklearn库中数据预处理函数fit_transform()和transform()的区别
敲<Python机器学习及实践>上的code的时候,对于数据预处理中涉及到的fit_transform()函数和transform()函数之间的区别很模糊,查阅了很多资料,这里整理一下: ...
- 利用pytorch 做一个简单的神经网络实现sklearn库中莺尾花的分类
本文针对本人学习pytorch的分类问题,自己写了一个简单的code import numpy as np from collections import Counter from sklearn i ...
- 支持向量机SVM原理解析
支持向量机(SVM) 支持向量机(support vector machine,SVM)使用训练集中的一个子集来表示决策边界,边界用于样本分类,这个子集称作支持向量(support vector). ...
最新文章
- Linux 之alias 命令别名
- 【深度学习】卷积神经网络实现图像多分类的探索
- Android性能优化面试题,与性能优化相关面试题 - 与IPC机制相关面试题 - 《Android面试宝典》 - 书栈网 · BookStack...
- 请MM吃饭之工厂模式实现
- React中的fragment和StrictMode
- eclipse导入项目pom文件报错_eclipse导入maven管理的项目时,pom.xml第一行报错。错误如图1。而且dubbo的xml也不识别。...
- 关于创业,潮汕人、温州人做生意的多
- 2.微型计算机系统的基本结构及计算机各个部件的功能
- 万能ABAP程序修改器
- eclipse中的英文与汉语对照表
- 2022年阿里云域名备案流程亲测及注意事项
- Win10 中主机名hosts 文件位置
- 显著性检测综述(完整整理)
- 视频教程-Python编程的术与道:Python语言入门-Python
- Matlab中sim函数的用法
- matlab函数 无限冲激响应滤波器,MATLAB代码 有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器...
- 包装类------拆箱与装箱
- 解决ViVO 手机安装APP失败问题
- 工作站 显卡 测试软件,绝对专业!14块工作站显卡测试(图)
- 制作适应手机网页、平板电脑(iPad)、电脑网页的三种方法
热门文章
- vue中的事件修饰符.self、.capture和.passive
- Android APP旋转屏幕
- 爆强的一些文句, 太经典了
- 260,我要满血复活了。
- HTML meta 标签的使用方式总结(本文总结17中使用方式)
- 实验项目一 俄罗斯方块游戏
- arduino 超声波测距原理_[Arduino]超声波测距
- 完美国际架设mysql_完美国际SF-物理机架设服务端教程
- 手游传奇架设教程_传奇手游战神引擎架设教程
- 深信服 SANGFOR 设备密码恢复和配置备份恢复