支持向量机及核函数对比
相关视频讲解地址: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')
我们可以看到,高斯核更灵活,而且对于训练数据效果是最好的。但是要担心过拟合。
支持向量机及核函数对比相关推荐
- sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比
机器学习 xueyifeiyun1989zx,公众号:围着围巾的小黑机器学习之监督学习实战 前文我们提到机器学习中的监督学习,其中有一个模型是我们提到的但是没有训练测试的,叫做支持向量机(简称SVM) ...
- 机器学习(三)——支持向量机(神经网络对比分析)
针对支持向量机和神经网络问题参考了多方面资料,整合如下: 支持向量机的概念: 在统计学习理论中发展起来的支持向量机(Support Vector Machines, SVM)方法是一种新的通用学习方法 ...
- 支持向量机(SVM):超平面及最大间隔化、支持向量机的数学模型、软间隔与硬间隔、线性可分支持向量机、线性支持向量机、非线性支持向量机、核函数、核函数选择、SMO算法、SVM vs LR、优缺点
支持向量机(SVM):超平面及最大间隔化.支持向量机的数学模型.软间隔与硬间隔.线性可分支持向量机.线性支持向量机.非线性支持向量机.核函数.核函数选择.SMO算法.SVM vs LR.优缺点 目录
- 公开课机器学习笔记(13)支持向量机三 核函数
2.2.核函数Kernel 2.2.1.特征空间的隐式映射:核函数 咱们首先给出核函数的来头:在上文中,我们已经了解到了SVM处理线性可分的情况,而对于非线性的情况,SVM 的处理方法是选择一个核函数 ...
- 机器学习算法——支持向量机SVM5(核函数)
在前面的文章里(支持向量机1-4)假设的训练样本是线性可分的,即存在一个划分超平面能将训练样本正确分类.然而在现实任务中,原始样本空间内也许并不存在一个能正确划分两类样本的超平面. 对于这样的问题,可 ...
- 【补充知识】支持向量机和核函数
1)Zhang, Kun, et al. "Domain adaptation under target and conditional shift." International ...
- 基于支持向量机的文本分类算法研究(一) —— 支持向量机及核函数背景(stitp项目)
1 前言 上世纪90年代,Vapnik率先提出了用于分类的支持向量机方法(也称支持向量分类算法),接下的几年中,又提出了用于回归的支持向量机方法(也称支持向量回归算法).支持向量机(SVM)是在统计学 ...
- 机器学习--SVM(支持向量机)核函数原理以及高斯核函数
最近小小地研究了一下SVM,发现这个算法还是相当有意思,今天来给大家讲讲其原理. 首先假设每个样本的特征值为X1.X2...到Xn,即有n个特征值.θ1.θ2.θ3...θn为对应权值. 那么要将上图 ...
- 【机器学习算法-python实现】svm支持向量机(3)—核函数
(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景知识 前面我们提到的数据集都是线性可分的,这样我们可以用SMO等方法找到支持向量的集合.然而当我们 ...
最新文章
- 全球首个安全有效新冠疫苗:陈薇院士团队研制,登上《柳叶刀》
- k8s 关键字以及管理流程。
- STL priority_queue sort 自定义比较终极模板
- 某CTF比赛部分wp
- python的tkinter按钮大小_如何使用python更改tkinter中按钮和帧的字体和大小?
- 标准时间校对_光源色灯箱标准原理
- SpringBoot FK-关联表查询(三)
- android 获取cpu型号_当贝投影带你认识投影仪CPU芯片有哪些?网友:真详细
- AMD 芯片被曝大量安全漏洞,Linux 之父怒评!
- 反应特别慢_孩子反应总是很迟钝?家长多注意一点孩子的兴趣培养
- excel表中怎么插入visio_如何插入或 Visio 中粘贴的 Excel 工作表-阿里云开发者社区...
- 解决VC++6.0打开文件或添加文件到工程出错的问题
- 佳能g2800清废墨_佳能G2800打印机清零
- 卡尔曼滤波估matlab算法,INS-matlab 利用卡尔曼滤波算法估计惯导系统状态量的源代码~谢谢分享 - 下载 - 搜珍网...
- 卷积神经网络工作原理
- post /login.php http/1.1,路由器登录入口:http://192.168.10.1
- 阿里云视觉智能API,核心技术一站共享!
- 计算机专业的论文的格式,计算机专业毕业论文格式范例
- Facebook公布2012年Q2财务数据
- 元气森林,真能在中国再造一个“可口可乐”吗?
热门文章
- Linux系统中DNS域名服务器
- Python+Vue计算机毕业设计安康学院教师职称评定考核系统0n8mq(源码+程序+LW+部署)
- 不到30岁就挣下亿万身家的创业者们
- 问答 | 35岁以后怎么混
- 如何添加php的扩展名,PHP如何获得文件的扩展名_PHP教程 - strtolower
- 在 OneNote 2010中输入复杂的数学公式
- 离线安装—Tensorflow教程
- 电流matlab正玄函数,用MATLAB求解线性电路的正弦稳态响应.doc
- 什么是长尾关键词751
- excel如何把多张表合并成一个表_EXCEL如何把多个表格合并成一个表格