[Python] 机器学习库 Scikit-learn之SVM

0. SVM简介

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

其模型定义和学习如下:

原始问题:

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

subject to yi(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的优点:

  1. 在高纬空间的有效性。
  2. 在特征维度高于样本维度的情况下,依然有效。
  3. 它的决策函数只使用训练数据的一部分,通常把这一部分数据称之为支持向量,所以它是比较节省内存的。
  4. 可以提供各种各样的核函数来扩展SVM的功能。

SVM的缺点:

  1. 如果特征的维度远大于样本的数目,那么性能将大大的降低。
  2. 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‘

参考文献:Scikit文档

时间: 2024-10-13 12:05:48

[Python] 机器学习库 Scikit-learn之SVM的相关文章

Python机器学习库资料汇总

声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: 比较成熟的(广播)函数库: 用于整合C/C++和Fortran代码的工具包: 实用的线性代数.傅里叶变换和随机数生成函数. SciPy是一个开源的Python算法库和数学工具包,SciPy包含的模块有最优化.线性代数.积分.插值.特殊函数.快速傅里叶变换.信号处理和图像处理.常微分方程求解和其他科

常用python机器学习库总结

开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处理,科学计算,机器学习和数据挖掘领域,有很多很多优秀的Python工具包可供使用,所以作为Pythoner,也是相当幸福的.如果仔细留意微博和论坛,你会发现很多这方面的分享,自己也Google了一下,发现也有同学总结了"Python机器学习库",不过总感觉缺少点什么.最近流行一个词,全栈工

[resource]Python机器学习库

reference: http://qxde01.blog.163.com/blog/static/67335744201368101922991/ Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: 比较成熟的(广播)函数库: 用于整合C/C++和Fortran代码的工具包: 实用的线性代数.傅里叶变换和随机数生成函数. SciPy是一个开源的Python算法库和数学工具包,S

[转载]Python机器学习库

Python 在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: 比较成熟的(广播)函数库: 用于整合C/C++和Fortran代码的工具包: 实用的线性代数.傅里叶变换和随机数生成函数. SciPy是一个开源的Python算法库和数学工具包,SciPy包含的模块有最优化.线性代数.积分.插值.特殊函数.快速傅里叶变换.信号处理和图像处理.常微分方程求解和其他科学与工程中常用的计算.其功能与

Python 机器学习库 NumPy 教程

0 Numpy简单介绍 Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数.如果接触过matlab.scilab,那么numpy很好入手. 1 安装 pip install numpy 在NumPy中,维度称之为axis(复数是axes),维度的数量称之为rank. (通用做法import numpu as np 简单输入) 2 多维数组 NumPy

Python机器学习库scikit-learn实践

原文:http://blog.csdn.net/zouxy09/article/details/48903179 一.概述 机器学习算法在近几年大数据点燃的热火熏陶下已经变得被人所“熟知”,就算不懂得其中各算法理论,叫你喊上一两个著名算法的名字,你也能昂首挺胸脱口而出.当然了,算法之林虽大,但能者还是有限,能适应某些环境并取得较好效果的算法会脱颖而出,而表现平平者则被历史所淡忘.随着机器学习社区的发展和实践验证,这群脱颖而出者也逐渐被人所认可和青睐,同时获得了更多社区力量的支持.改进和推广. 以

2018年最受欢迎Python机器学习库介绍

Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,再加上其简单.易学.速度快.开源免费.可移植性.可扩展性以及面向对象的特点,Python成为2017年最受欢迎的最受欢迎的编程语言! 人工智能是当前最热门话题之一,机器学习技术是人工智能实现必备技能,Python编程语言含有最有用的机器学习工具和库,以下是Python开发工程师必知的十大机器学习库! 一.Scikit-Learn 在机器学习和数据挖掘的应用中,Scikit-Learn是一个功能强大的Python包,我们可以

Python机器学习库sciki-earn实践

用Anaconda的spyder:新建train_test.py #!usr/bin/env python #-*- coding: utf-8 -*- import sys import os import time from sklearn import metrics import numpy as np import cPickle as pickle reload(sys) sys.setdefaultencoding('utf8') # Multinomial Naive Bayes

【机器学习】--Python机器学习库之Numpy

一.前述 NumPy(Numerical Python的缩写)是一个开源的Python科学计算库.使用NumPy,就可以很自然地使用数组和矩阵. NumPy包含很多实用的数学函数,涵盖线性代数运算.傅里叶变换和随机数生成等功能. 这个库的前身是1995年就开始开发的一个用于数组运算的库.经过了长时间的发展,基本上成了绝大部分Python科学计算的基础包,当然也包括所有提供Python接口的深度学习框架. 二.具体应用 1.背景--为什么使用Numpy? a) 便捷: 对于同样的数值计算任务,使用