支持向量机(SVM)理解以及在sklearn库中的简单应用
来源:互联网 发布:linux 解压war 编辑:程序博客网 时间:2024/05/17 08:50
1. 什么是支持向量机
- 英文Support Vector Machines,简写SVM . 主要是基于支持向量来命名的,什么是支持向量后面会讲到…….最简单的SVM是用来二分类的,在深度学习崛起之前被誉为最好的现成分类器,”现成”指的是数据处理好,SVM可以直接拿来使用 …
2. 名词解释
2.1线性(不)可分 , 超平面
上图 线性可分(绿色荧光笔直线),即一条直线完美分类,虽然有不同的分割法,这条分割线就叫做”分割超平面”,二维中直线就是一个超平面,扩展到n维中n-1维也就是超平面
左面这张图很明显,所谓线性不可分,则是一条直线不能完美分类
左面这张图也是线性不可分 但是 有一个圆形区域很好的进行了分类
这时候就可以映射到高维,见下例
面 到 体 :
线 到 面 :
这个例子就比较好理解了,主要是怎么映射? 见下内容….
2.2 支持向量
支持向量在SVM中很重要,名字就看得出来, 在上例中红线为分割超平面,红色的*点就是支持向量点,即离分割超平面最近的点。
3. SVM理解
在二分类问题中,SVM需要的就是寻得一个分割超平面,使margin最大化,见下图,margin就是切割超平面离最近点的距离
最近的点就是支持向量点,这里的超平面可以定义为
假设2维特征向量
那么超平面方程就变成了 :
右上方点满足 :
同理,左下点满足 :
经过对weight参数的调整,使得
综上两式
那么如果线行不可分呢,那就需要映射到高维,例如
- linear : 线性核函数(linear kernel)
- poly : 多项式核函数(ploynomial kernel)
- rbf : 径向机核函数(radical basis function)
- sigmoid : 神经元的非线性作用函数核函数(Sigmoid tanh)
具体介绍还是看看文档吧…..
然后根据核函数就可以进行分类或者回归了…..
4. SVM优缺点
优点
- 支持向量决定时间复杂,而不是取决于数据集的大小
- 结果易于理解
缺点
- 对于参数以及核函数有依赖,原始算法不加修改只用于二分类
- 算法实现比较困难 (依赖sklearn库的话就算了,打脸)
5. sklearn库简单应用实例
# coding:utf-8from sklearn import svmfrom 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).T Y = mat(Y).T temp = x.T * x ws = temp.I * (x.T * y) yPre = X * ws print "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] * 20 clf = 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库中的简单应用
- 支持向量机(SVM)理解以及在sklearn库中的简单应用
- 拉格朗日对偶性算法以及在SVM支持向量机中的应用
- 简单理解支持向量机SVM的方法
- 关于 支持向量机 SVM很简单的理解
- [转] 支持向量机SVM的理解
- SVM(支持向量机)---学习和理解
- 深入理解支持向量机-SVM
- 支持向量机(SVM)算法应用
- 支持向量机(SVM)简单小结
- OpenCV中的SVM支持向量机
- 支持向量机SVM中的对偶问题
- SVM Application List:支持向量机SVM的应用列表
- 支持向量机通俗导论(理解SVM的三层境界)(3)以及参考文献
- 支持向量机SVM
- SVM支持向量机
- svm支持向量机
- SVM支持向量机
- Date 得到日期返回相应内容
- 【程序设计与算法】熄灯问题
- windows环境下redis安装和基本命令
- 关于static静态的一些知识(个人总结)
- 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的?(第七届蓝桥杯B组
- 支持向量机(SVM)理解以及在sklearn库中的简单应用
- LeetCode 103 Binary Tree Zigzag Level Order Traversal(二叉树层序遍历)
- JavaScript全局函数
- 排序五:冒泡排序
- 第十二天总结
- BZOJ 2005 能量采集(莫比乌斯反演+分块)
- Android如何自定义Preference呢?
- python 写excel(2)
- 二解 约数和luogu2715