0. SVM简介

SVM是最常用的分类器之一,其可以用来做分类,回归以及异常检测。

其模型定义和学习如下:

原始问题:

minw,b,ζ12wTw+C∑ni=1ζi

subject toyi(wT?(xi)+b)≥1?ζi,

ζi≥0,i=1,...,n

对偶问题:

minα12αTQα?eTα

subject to yTα=0

0≤αi≤C,i=1,...,n

决策函数:

sgn(∑ni=1yiαiK(xi,x)+ρ)

其中 e 是全为1的向量, C>0 是上边界, Q 是 n × n 半正定矩阵, Qij≡K(xi,xj)=?(xi)T?(xj) 是核, 训练数据通过 ?被映射到高纬空间中.

svm的优点:

在高纬空间的有效性。

在特征维度高于样本维度的情况下,依然有效。

它的决策函数只使用训练数据的一部分,通常把这一部分数据称之为支持向量,所以它是比较节省内存的。

可以提供各种各样的核函数来扩展SVM的功能。

SVM的缺点:

如果特征的维度远大于样本的数目,那么性能将大大的降低。

SVM不直接提供概率估计。

1. SVM用来做分类:

SVC, NuSVC,LinearSVC

这三类都能用来做多类分类,SVC 和 NuSVC 类似,但是在一些参数上有所不同,LinearSVC 则是另外一种svm的实现,它是线性核。

输入:

SVC, NuSVC 和LinearSVC的输入训练数据:[n_samples, n_features] ,标签数据:[n_samples],标签可以是整数或者是字符串都可以。

#训练svm:

>>> from sklearn import svm

>>> X = [[0, 0], [1, 1]]

>>> y = [0, 1]

>>> clf = svm.SVC()

>>> clf.fit(X, y) `

#测试svm`

>>> clf.predict([[2., 2.]

成员变量:

因为svm模型只需要用到训练数据中的一部分,也就是支持向量的部分。

support_vectors_:存放模型的支持向量。

support_ :存放模型的支持向量的索引。

n_support: 存放模型每一类的支持向量的数目。

多类分类

原始的svm只能支持二类的分类,而多类分类是通过多次二分类来实现的,具体有两种方式,即一对一和一对多两种方式。

SVC 和 NuSVC是采用一对一的方式,如果 n_class 是总的类别的数目,那么共需要训练n_class * (n_class - 1) / 2 个不同的二分类器。

#获取分类器的数目:

X = [[0], [1], [2], [3]]

Y = [0, 1, 2, 3]

clf = svm.SVC()

clf.fit(X, Y)

dec = clf.decision_function([[1]])

print dec.shape[1]

不同的是, LinearSVC 是采用一对多的方式来进行多分类,具体来说,有 n_class 个类别就训练n_class 个分类器,显然,在了类别数目比较多的情况下,这样更节省空间和时间。

不平衡数据:

SVC实现了不平衡训练数据集上的处理,通过设置class_weight参数来给每个类别设置不同的权重,具体的使用还得看文档。

2. SVM用来做回归

SVM分类器可以很自然的被扩展用来做回归,被称之为支持向量回归。

SVR跟SVC一样,模型只考虑支持向量的数据,那些原理分界边际的点将被忽视。

跟SVC类似,其也有三个类来显示它,对应的是: SVR, NuSVR , LinearSVR,

>>> from sklearn import svm

>>> X = [[0, 0], [2, 2]]

>>> y = [0.5, 2.5]

>>> clf = svm.SVR()

>>> clf.fit(X, y)

SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma=0.0,

kernel=‘rbf‘, max_iter=-1, shrinking=True, tol=0.001, verbose=False)

>>> clf.predict([[1, 1]])

array([ 1.5])

3. 密度估计,异常检测

类别:OneClassSVM 来实现异常检测,这是一种无监督的方法,它的训练数据只需要X,而无需Y。

4. 复杂度分析

SVM是一个二次规划问题(QP问题),其实重训练数据集合中分离出支持向量的数据点,在基于libsvm的实现中,其复杂度介于: O(nfeatures×n2samples) 和 O(nfeatures×n3samples) 之间。

5. 核函数

? 线性核: ?x,x′?.

? 多项式核: (γ?x,x′?+r)d. d is specified by keyword degree, r by coef0.

? rbf: exp(?γ|x?x′|2). γ is specified by keyword gamma, must be greater than 0.

? sigmoid (tanh(γ?x,x′?+r)), where r is specified by coef0.

linear_svc = svm.SVC(kernel=‘linear‘)

linear_svc.kernel

‘linear‘

rbf_svc = svm.SVC(kernel=‘rbf‘)

rbf_svc.kernel

‘rbf‘

python的svm库_[Python] 机器学习库 Scikit-learn之SVM相关推荐

  1. python爬虫机器_Python常用的机器学习库|python爬虫|python入门|python教程

    https://www.xin3721.com/eschool/pythonxin3721/ Python在科学计算中用途广泛:计算机视觉.人工智能.数学.天文等.它同样适用于机器学习也是意料之中的事 ...

  2. python量化选股策略_【机器学习】第六课:基于SVM的量化选股策略

    导语 接触过机器学习或数据挖掘算法的人都应该知道支持向量机(SVM),支持向量机一经提出就得到了广泛应用.本文主要探讨该算法在金融领域量化投资多因子策略上的应用.在这篇文章中,先是介绍了SVM的基本原 ...

  3. python爬虫好友图片_用itchat库爬取你所有微信好友的头像,并合成一张大图

    几年前,我们给爸妈手机上下载了一款神奇的软件,他的名字叫微信.几年后,爸妈就开始吐槽我们的微信头像了. 爸妈对我们微信头像的关注程度远胜过我们的衣食住行,我在新浪微博上看到了这张统计图. 图片来源:新 ...

  4. python动态图表变化_用 Matplotlib 库生成动画图表

    更多文章请关注微信公众号:硬核智能 动画是一种展示现象的有趣方式.相对于静态图表,人类总是容易被动画和交互式图表所吸引.在描述多年来的股票价格.过去十年的气候变化.季节性和趋势等时间序列数据时,动画更 ...

  5. python turtle 画老鼠_通过Turtle库在Python中绘制一个鼠年福鼠

    turtle库是一个很经典的绘图库,其最初来自于1967年创造的logo编程语言,之后被Python编写放到了Python的内置模块中.网络上有很多借助于turtle绘制精美图像的案例.比如小猪佩奇. ...

  6. python 累积正态分布函数_为什么机器学习都围绕正态分布进行讨论?

    作者 | Farhad Malik 译者 | Monanfei 责编 | 夕颜 出品 | AI科技大本营(ID: rgznai100) 为什么正态分布如此特殊?为什么大量数据科学和机器学习的文章都围绕 ...

  7. python天气预测算法_使用机器学习预测天气(第二部分)

    概述 这篇文章我们接着前一篇文章,使用Weather Underground网站获取到的数据,来继续探讨用机器学习的方法预测内布拉斯加州林肯市的天气 上一篇文章我们已经探讨了如何收集.整理.清洗数据. ...

  8. python数据预测模型算法_基于机器学习的股票分析与预测模型研究

    摘 要:近年来,随着全球经济与股市的快速发展,股票投资成为人们最常用的理财方式之一.本文研究的主要目标是利用机器学习技术,应用Python编程语言构建股票预测模型,对我国股票市场进行分析与预测.采用S ...

  9. python 数据挖掘 简书_[Python数据挖掘入门与实践]-第一章开启数据挖掘之旅

    1.数据挖掘简介(略) 2.使用Python和IPython Notebook 2.1.安装Python 2.2.安装IPython 2.3.安装scikit-learn scikit-learn是用 ...

最新文章

  1. [代码]--WinForm 窗体之间相互嵌套
  2. SVG关注复杂图形的网页绘制技术
  3. scrollHeight、clientHeight、offsetHeight、scrollTop等的定义以及图解
  4. 35 岁 学python 必要_程序员:Python学不学?完全没必要纠结
  5. 03-java学习-基本数据类型-运算符-键盘接收用户输入
  6. (数据库系统概论|王珊)第九章关系查询处理和关系优化-第一节:查询处理
  7. selenium通过autoit实现上传和下载
  8. java对mysql的简单操作的综合运用——修改密码系统
  9. python pytest setupclass_python – Pytest – 如何将参数传递给setup_class?
  10. java 算法基础之三合并排序法
  11. MySql统计函数COUNT详解
  12. Labview 中AniGIF控件及注册方法
  13. html文字自动轮播代码怎么写,图片轮播HTML代码
  14. java retainall源码,Java CopyOnWriteArraySet retainAll()用法及代码示例
  15. C语言0和0.0f的区别
  16. android录音波浪动画_Android实现波浪效果 - WaveView
  17. 在c语言中1和0的意思,!1在c语言中是什么意思?
  18. 一、降维——机器学习笔记——降维(特征提取)
  19. 阻容感基础02:电阻器原理(2)-电阻器参数
  20. Matlab解方程, 等到数字解和解析式解

热门文章

  1. 四款华为手机不建议买
  2. 哪里comodo或geotrust可以选择
  3. 电影知识图谱的智能问答系统在本机跑通实验及遇到问题的解决
  4. TabLayout设置图标和字体
  5. echarts CDN 地址
  6. PHP基础-字符串长度函数
  7. 关于JAVA对接支付宝开发文档错误总结
  8. 时代天使IPO招股书:领先地位不明显,2019年市场份额不敌对手
  9. 为什么说 Bert 大力出奇迹
  10. cURL作者狂怼某500强公司,开源维护者是否应当“白打工”?