机器学习——支持向量机(SVM)

很久之前就学了SVM,总觉得不就是找到中间那条线嘛,但有些地方模棱两可,真正编程的时候又是一团浆糊,参数随意试验,毫无章法。既然又重新学到了这一章节,那就要把之前没有搞懂的地方都整明白,再也不要做无用功了~算法很简单,如果学不会,只是因为懒~写下这段话,只为提醒自己

以下使用到的图片来自上海交大杨旸老师的课件,网址如下:http://bcmi.sjtu.edu.cn/~yangyang/ml/

支持向量机就是一种分类方法,只是起的这个名字,看起来很复杂而已。

中间一条线:分类用的,需要求出系数W

支持向量:线性超平面上的点,可以理解为两边的线上的点

要求:中间那条线到两边的线的距离相等。支持向量(可以想象成那两条线上每条线上的点)的个数<= m +1,m为特征 x 的维数。

目的:找的中间那条线的参数 w 和 b 。

线性SVM

这个图我看了很久,一直没有搞懂 y 在哪里,根据公式明明就直接求出所有的 x 了啊,难道 y = a ?y = a - b ?

其实 y 在这里不是坐标轴啦,是分类0,1,2,...,1,-1之类的,坐标轴上全都是 x1,x2,x3,....这样的啦

搞清楚这个概念,接下来就很好理解了:

两条线之间的距离就直接拿 wx1 + b = a 和  wx2 + b = -a 相减就好啦(x1是上边直线上的点,x2是下边直线上的点),至于为神马这样 2r 就刚好是垂直距离,很简单,两个点坐标相减就是两点之间的向量,膜就是距离,找两个连线与分类直线垂直的点就OK拉。真正用公式推导是这样的:

w(x1-x2)=2a

||w|| ||x1-x2|| cos<w, x1-x2> = 2a

||x1-x2|| cos<w, x1-x2> = 2a/||w||

公式左边就是距离啦。

证明的第一问也好理解了,这里的在线上指的是 x1 和 x2 都在 wx + b =0 这条线上,相减刚好就是<w, x1- x2> = 0

解释一下:

理想情况下,所有正样本(y=1)都在 wx + b = a 这条线的上边,所有负样本(y=-1)都在 wx + b = -a 这条线的下边,但是两个公式太麻烦啦,那就把 y 当作正负号乘到前边好啦,刚好把上下两条直线公式改编合成这样: (wx + b)y = a ,这样的点是在线上的,但是我们要求正负样本在两侧就好啦,所以改 = 为 >=

max 那句就是说仅仅满足下边的公式还不够,我们需要的是两条线中间的距离最大

总之:就是对于任意的点 j 求使得两条线的距离最大的 w 和 b

总是带着 a 不太方便,所以我们把等式两边都除以 a ,就有了新的 w 和 b,无所谓啦,反正都是符号,所以就没改啦。

由于a都变成1了,所以最大化 2a / || w || 倒过来就成了 || w || / 2,也就可以简化为求 w . w = || w || 的最小值了~

非线性SVM

一切看起来进展非常顺利,然而!真实的数据很有可能出现一些不太友好的点哦!

于是,我们就需要容忍这些错误~

c:tradeoff parameter 其实就是一个系数

#mistake:错误数,对于每一个错误的点都为1,正确点都取0,最后加到一起(公式为了让总错误最小)

c和#mistake都是变量,可以合在一起成为一个的,但不便于理解

#mistake是算出来的,系数C是根据交叉验证得到的——(交叉验证。。不大懂,之后再说咯)

上边这个公式有个缺点:对于不在分类线外侧的全都定义为错的(也就是非黑即白,0/1 loss),没有考虑偏离大小的问题

公式把#mistake改成这样,就相当于对于每一个错误的样本都算出其对应的偏离量,这样放在公式里就是所有偏离量加起来最小。

偏离量是算出来的,系数C是根据交叉验证得到的——(交叉验证。。不大懂,之后再说咯)

规范化损失变量

直接套公式吧。。

hinge loss 我想多解释一下,因为这个样本在它应在的范围(如 >=1 ),那么它其实是没有损失的,也就是全为0就好,所以或许这个损失函数蛮符合SVM的特点~

多分类问题

方法一:

如上图所示——每次把一个类别拿出来,其他类别合成一个大类,当作二分类问题来做。重复n次就OK

缺点:分类的那条线会偏向训练数据量比较小的那一类

方法二:同时求

解释一下公式:

左边是分类在 j 的一个点 xj 乘以它自己的系数,需要满足 w(yj) . xj + b(yj) > = 1

参考方法一,如果这个点用在其他的分类公式中的时候,需要满足 w(y‘) . xj + b(y’) < = 1

所以两个公式放在一起就是: w(yj) . xj + b(yj) > = 1 > = w(y‘) . xj + b(y‘)

至于非要加上的那个1~~我也不知道为神马,莫非是为了和之前的公式看起来差不多?0.0

加上松弛变量和损失变量就变成了这样:

要去吃饭了,约束最优等下再讲~哈哈

时间: 2024-11-03 20:55:11

机器学习——支持向量机(SVM)的相关文章

吴裕雄 python 机器学习——支持向量机SVM非线性分类SVC模型

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model,svm from sklearn.model_selection import train_test_split def load_data_classfication(): ''' 加载用于分类问题的数据集 ''' # 使用 scikit-learn 自带的 iris 数据集 iris=datasets.lo

机器学习——支持向量机SVM在R中的实现

支持向量机是一个相对较新和较先进的机器学习技术,最初提出是为了解决二类分类问题,现在被广泛用于解决多类非线性分类问题和回归问题.继续阅读本文,你将学习到支持向量机如何工作,以及如何利用R语言实现支持向量机. 支持向量机如何工作? 简单介绍下支持向量机是做什么的: 假设你的数据点分为两类,支持向量机试图寻找最优的一条线(超平面),使得离这条线最近的点与其他类中的点的距离最大.有些时候,一个类的边界上的点可能越过超平面落在了错误的一边,或者和超平面重合,这种情况下,需要将这些点的权重降低,以减小它们

机器学习——支持向量机(SVM)之核函数(kernel)

对于线性不可分的数据集,可以利用核函数(kernel)将数据转换成易于分类器理解的形式. 如下图,如果在x轴和y轴构成的坐标系中插入直线进行分类的话, 不能得到理想的结果,或许我们可以对圆中的数据进行某种形式的转换,从而得到某些新的变量来表示数据.在这种表示情况下,我们就更容易得到大于0或者小于0的测试结果.在这个例子中,我们将数据从一个特征空间转换到另一个特征空间,在新的空间下,我们可以很容易利用已有的工具对数据进行处理,将这个过程称之为从一个特征空间到另一个特征空间的映射.在通常情况下,这种

机器学习——支持向量机(SVM)

1.基于最大间隔分隔数据

机器学习与数据挖掘-支持向量机(SVM)(一)

最近在看斯坦福大学的机器学习的公开课,学习了支持向量机,再结合网上各位大神的学习经验总结了自己的一些关于支持向量机知识. 一.什么是支持向量机(SVM)? 1.支持向量机(Support Vector Machine,常简称为SVM)是一种监督式学习的方法,可广泛地应用于统计分类以及回归分析.支持向量机属于一般化线性分类器,这族分类器的特点是他们能够同时最小化经验误差与最大化几何边缘区,因此支持向量机也被称为最大边缘区分类器. 2.支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个

机器学习第7周-炼数成金-支持向量机SVM

支持向量机SVM 原创性(非组合)的具有明显直观几何意义的分类算法,具有较高的准确率源于Vapnik和Chervonenkis关于统计学习的早期工作(1971年),第一篇有关论文由Boser.Guyon.Vapnik发表在1992年(参考文档见韩家炜书9.10节)思想直观,但细节异常复杂,内容涉及凸分析算法,核函数,神经网络等高深的领域,几乎可以写成单独的大部头与著.大部分非与业人士会觉得难以理解.某名人评论:SVM是让应用数学家真正得到应用的一种算法 思路 简单情况,线性可分,把问题转化为一个

机器学习笔记——SVM之一

SVM(Support Vector Machine),中文名为 支持向量机,就像自动机一样,听起来异常神气,最初总是纠结于不是机器怎么能叫"机",后来才知道其实此处的"机"实际上是算法的意思. 支持向量机一般用于分类,基本上,在我的理解范围内,所有的机器学习问题都是分类问题.而据说,SVM是效果最好而成本最低的分类算法. SVM是从线性可分的情况下最优分类面发展而来的,其基本思想可以用下图表示: (最优分类面示意图) 图中空心点和实心点代表两类数据样本,H为分类线

关于支持向量机(SVM)一些不得不说的话

做为一种监督学习模型,支持向量机(Supprot Vector Machine)在机器学习领域内很重要.首先,SVM用来干什么?一句话将,就是分类(Classification).比较简单的分类,比如线性分类.Logistic 回归等等,得到的分类结果未必是最优的.而SVM则旨在找到一个最优的分类器.从这个目的出发,SVM提出了Soft Margin,Support Vector等等看似很直观的概念. 对支持向量机的介绍,往往从线性模型开始讲起.如果想对这个部分有一个了解,有两个英文的资料绝对值

[白话解析] 深入浅出支持向量机(SVM)之核函数

[白话解析] 深入浅出支持向量机(SVM)之核函数 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解支持向量机中的核函数概念,并且给大家虚构了一个水浒传的例子来做进一步的通俗解释. 0x01 问题 在学习核函数的时候,我一直有几个很好奇的问题. Why 为什么线性可分很重要? Why 为什么低维数据升级到高维数据之后,就可以把低维度数据线性可分? What 什么是核函数,其作用是什么? How 如何能够找到核函数? 不知道大家是否和我一样有这些疑问,在后文中, 我将通过

支持向量机(SVM)(二)-- 拉格朗日对偶(Lagrange duality)

简介: 1.在之前我们把要寻找最优的分割超平面的问题转化为带有一系列不等式约束的优化问题.这个最优化问题被称作原问题.我们不会直接解它,而是把它转化为对偶问题进行解决. 2.为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点.即拉格朗日函数,再通过这个函数来寻找最优点. 3.约束条件可以分成不等式约束条件和等式约束条件,只有等式约束条件的问题我们在高等数学课