相关视频讲解地址:https://www.bilibili.com/video/av50785769/

数据及源码地址:https://download.csdn.net/download/yiyongzhifu/11150357

支持向量机有两种:SVC,支持向量分类,用于分类问题;SVR,支持向量回归,用于回归问题。

%pylab inline
import numpy as np
import pylab as pl
from sklearn import svm

线性支持向量机(Linear SVMs):一些感性认识¶

我们采用一个非常有名的用于分类问题的数据集:鸢尾花数据集。它是基于鸢尾花的花萼的长度和宽度进行分类的。我们只用其中两维特征,这能够方便可视化。

svc = svm.SVC(kernel='linear')
# 鸢尾花数据集是sklearn自带的。
from sklearn import datasets
iris = datasets.load_iris()
# 只提取前面两列数据作为特征
X = iris.data[:, :2]
y = iris.target
# 基于这些数据训练出一个支持向量分离器SVC
svc.fit(X, y)
输出
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,kernel='linear', max_iter=-1, probability=False, random_state=None,shrinking=True, tol=0.001, verbose=False)

可视化结果

from matplotlib.colors import ListedColormap
# 因为鸢尾花是3分类问题,我们要对样本和预测结果均用三种颜色区分开。
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])def plot_estimator(estimator, X, y):'''这个函数的作用是基于分类器,对预测结果与原始标签进行可视化。'''estimator.fit(X, y)# 确定网格最大最小值作为边界x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1# 产生网格节点xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100),np.linspace(y_min, y_max, 100))# 基于分离器,对网格节点做预测Z = estimator.predict(np.c_[xx.ravel(), yy.ravel()])# 对预测结果上色Z = Z.reshape(xx.shape)pl.figure()pl.pcolormesh(xx, yy, Z, cmap=cmap_light)# 同时对原始训练样本上色pl.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_bold)pl.axis('tight')pl.axis('off')pl.tight_layout()
plot_estimator(svc, X, y)

  • 正如我们所见,kernel="linear"(线性核函数)给了我们线性的决策边界:两类之间的分离边界是直线。
  • 多分类的工作方式就是"one versus one" :在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。
  • 线性支持向量分类器(LinearSVC):对于线性核函数,有一个新的对象LinearSVC ,它使用了不同的算法。在某些数据集上运行地更快(比如稀疏数据集,文本挖掘就是典型的例子)。它对于多分类采用的是"one versus all"策略。
plot_estimator(svm.LinearSVC(), X, y)

支持向量与正则化¶

  • 支持向量:就是最靠近分离边界的样本点。支持向量机的工作方式就是找到这些支持向量,它们被认为是在二分类问题中最具代表性的样本点。
  • 为了更方便的可视化,我们选择二分类问题,也就是只考虑鸢尾花数据集中的1类和2类样本。这两类不是线性可分的,所以我们可以看到更有趣的一些东西。
  • 支持向量的坐标可以通过方法support_vectors_来找到。我们在图中将对它们着重标记
X, y = X[np.in1d(y, [1, 2])], y[np.in1d(y, [1, 2])]
plot_estimator(svc, X, y)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80, facecolors='none', zorder=10)

  • 正则化 :只考虑支持向量其实就是一种正则化的形式。实际上,它强迫模型在处理样本特征的时候变得更加简单。 This regularization can be tuned with the C parameter:
  • 正则项可以通过调整系数 C 来决定:
    • 小的C值:将会有很多支持向量。决策边界=类别A的平均值-类别B的平均值
    • 大的C值:将会有较少的支持向量。决策边界是被大多数支持向量所决定。
svc = svm.SVC(kernel='linear', C=1e3)
plot_estimator(svc, X, y)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80, facecolors='none', zorder=10)
pl.title('High C values: small number of support vectors')svc = svm.SVC(kernel='linear', C=1e-3)
plot_estimator(svc, X, y)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80, facecolors='none', zorder=10)
pl.title('Low C values: high number of support vectors')

  • 支持向量机的有个好处是对于许多数据集,默认参数'C=1'其实工作得很好。
  • 实践经验:对样本正则化: 对于许多分离器,采用标准差正则方法是非常重要的提升预测效果的手段。

核方法

采用核方法,能够很方便地产生非线性分类边界。

  • linear,线性核,会产生线性分类边界。一般来说它的计算效率最高,而且需要数据最少。
  • poly ,多项式核,会产生多项式分类边界。
  • rbf,径向基函数,也就是高斯核,是根据与每一个支持向量的距离来决定分类边界的。它的映射到无线维的。它是最灵活的方法,但是也需要最多的数据。
svc = svm.SVC(kernel='linear')
plot_estimator(svc, X, y)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80, facecolors='none', zorder=10)
pl.title('Linear kernel')svc = svm.SVC(kernel='poly', degree=4)
plot_estimator(svc, X, y)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80, facecolors='none', zorder=10)
pl.title('Polynomial kernel')svc = svm.SVC(kernel='rbf', gamma=1e2)
plot_estimator(svc, X, y)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80, facecolors='none', zorder=10)
pl.title('RBF kernel')

我们可以看到,高斯核更灵活,而且对于训练数据效果是最好的。但是要担心过拟合。

支持向量机及核函数对比相关推荐

  1. sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比

    机器学习 xueyifeiyun1989zx,公众号:围着围巾的小黑机器学习之监督学习实战 前文我们提到机器学习中的监督学习,其中有一个模型是我们提到的但是没有训练测试的,叫做支持向量机(简称SVM) ...

  2. 机器学习(三)——支持向量机(神经网络对比分析)

    针对支持向量机和神经网络问题参考了多方面资料,整合如下: 支持向量机的概念: 在统计学习理论中发展起来的支持向量机(Support Vector Machines, SVM)方法是一种新的通用学习方法 ...

  3. 支持向量机(SVM):超平面及最大间隔化、支持向量机的数学模型、软间隔与硬间隔、线性可分支持向量机、线性支持向量机、非线性支持向量机、核函数、核函数选择、SMO算法、SVM vs LR、优缺点

    支持向量机(SVM):超平面及最大间隔化.支持向量机的数学模型.软间隔与硬间隔.线性可分支持向量机.线性支持向量机.非线性支持向量机.核函数.核函数选择.SMO算法.SVM vs LR.优缺点 目录

  4. 公开课机器学习笔记(13)支持向量机三 核函数

    2.2.核函数Kernel 2.2.1.特征空间的隐式映射:核函数 咱们首先给出核函数的来头:在上文中,我们已经了解到了SVM处理线性可分的情况,而对于非线性的情况,SVM 的处理方法是选择一个核函数 ...

  5. 机器学习算法——支持向量机SVM5(核函数)

    在前面的文章里(支持向量机1-4)假设的训练样本是线性可分的,即存在一个划分超平面能将训练样本正确分类.然而在现实任务中,原始样本空间内也许并不存在一个能正确划分两类样本的超平面. 对于这样的问题,可 ...

  6. 【补充知识】支持向量机和核函数

    1)Zhang, Kun, et al. "Domain adaptation under target and conditional shift." International ...

  7. 基于支持向量机的文本分类算法研究(一) —— 支持向量机及核函数背景(stitp项目)

    1 前言 上世纪90年代,Vapnik率先提出了用于分类的支持向量机方法(也称支持向量分类算法),接下的几年中,又提出了用于回归的支持向量机方法(也称支持向量回归算法).支持向量机(SVM)是在统计学 ...

  8. 机器学习--SVM(支持向量机)核函数原理以及高斯核函数

    最近小小地研究了一下SVM,发现这个算法还是相当有意思,今天来给大家讲讲其原理. 首先假设每个样本的特征值为X1.X2...到Xn,即有n个特征值.θ1.θ2.θ3...θn为对应权值. 那么要将上图 ...

  9. 【机器学习算法-python实现】svm支持向量机(3)—核函数

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景知识    前面我们提到的数据集都是线性可分的,这样我们可以用SMO等方法找到支持向量的集合.然而当我们 ...

最新文章

  1. 全球首个安全有效新冠疫苗:陈薇院士团队研制,登上《柳叶刀》
  2. k8s 关键字以及管理流程。
  3. STL priority_queue sort 自定义比较终极模板
  4. 某CTF比赛部分wp
  5. python的tkinter按钮大小_如何使用python更改tkinter中按钮和帧的字体和大小?
  6. 标准时间校对_光源色灯箱标准原理
  7. SpringBoot FK-关联表查询(三)
  8. android 获取cpu型号_当贝投影带你认识投影仪CPU芯片有哪些?网友:真详细
  9. AMD 芯片被曝大量安全漏洞,Linux 之父怒评!
  10. 反应特别慢_孩子反应总是很迟钝?家长多注意一点孩子的兴趣培养
  11. excel表中怎么插入visio_如何插入或 Visio 中粘贴的 Excel 工作表-阿里云开发者社区...
  12. 解决VC++6.0打开文件或添加文件到工程出错的问题
  13. 佳能g2800清废墨_佳能G2800打印机清零
  14. 卡尔曼滤波估matlab算法,INS-matlab 利用卡尔曼滤波算法估计惯导系统状态量的源代码~谢谢分享 - 下载 - 搜珍网...
  15. 卷积神经网络工作原理
  16. post /login.php http/1.1,路由器登录入口:http://192.168.10.1
  17. 阿里云视觉智能API,核心技术一站共享!
  18. 计算机专业的论文的格式,计算机专业毕业论文格式范例
  19. Facebook公布2012年Q2财务数据
  20. 元气森林,真能在中国再造一个“可口可乐”吗?

热门文章

  1. Linux系统中DNS域名服务器
  2. Python+Vue计算机毕业设计安康学院教师职称评定考核系统0n8mq(源码+程序+LW+部署)
  3. 不到30岁就挣下亿万身家的创业者们
  4. 问答 | 35岁以后怎么混
  5. 如何添加php的扩展名,PHP如何获得文件的扩展名_PHP教程 - strtolower
  6. 在 OneNote 2010中输入复杂的数学公式
  7. 离线安装—Tensorflow教程
  8. 电流matlab正玄函数,用MATLAB求解线性电路的正弦稳态响应.doc
  9. 什么是长尾关键词751
  10. excel如何把多张表合并成一个表_EXCEL如何把多个表格合并成一个表格