首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

机器学习之手把手实现,第 1 部分 支持向量机的原理和实现-1

机器学习之手把手实现,第 1 部分 支持向量机的原理和实现-1

本文将介绍机器学习领域经典的支持向量机 SVM        模型,它利用了软间隔最大化、拉格朗日对偶、凸优化、核函数、序列最小优化等方法。支持向量机既可以解决线性可分的分类问题,也可完美解决线性不可分问题。您将看到 SVM 的原理介绍、SVM        实现步骤和详解、SVM 实现代码以及用 SVM 解决实际的分类问题。通过阅读本文,您会对 SVM 的原理了如指掌,并可以自己开发出 SVM 的实现代码。
关于机器学习的简介机器学习是从大量数据中学习出特定规律的算法。其中提到的规律有很多种,比如分类、聚类、回归、关联分析等。
分类就是给定大量带标签的数据,计算出未知标签样本的标签取值。如年龄 40 岁以上、工科、研究生以上学历,这类人薪资水平是高收入;年龄 20-30        岁、文科、大专学历,这类人的薪资水平是低收入;现有一位 23 岁大专文科人士,求该人的薪资水平是哪类?根据分类建模,就可以知道这个人的薪资水平很可能是低收入。
聚类是将大量不带标签的数据根据距离聚集成不同的簇,每一簇数据有共同的特征。如电信行业可以根据用户的月长途电话分钟数、上网时长、短信使用数、地理位置、月消费数,将所有用户聚集成有典型特征的簇,聚集出的某簇特征可能是月长途电话分钟数长、上网时间长、地理位置变化不大、月消费数目低,分析可得这类人极有可能是在校大学生,那么电信公司就可以针对这类特定人群制定有针对性的营销策略。
回归是根据特征值、目标变量拟合出特征值与目标变量之间的函数关系,可用来估计特征值对应的目标变量的可能取值。举个简单的例子,某市今年某 100        平米的房子价格是 80 万,某 150 平米房子价格是 120 万,那么某 200 平米的房子价格的取值就可能是 200*0.8=160 万左右。
关联分析是计算出大量数据之间的频繁项集合。如超市订单中有大量订单同时包含啤酒与尿布,这其中的频繁项就是啤酒和尿布,那么超市就可以针对这个规律对啤酒和尿布进行组合促销活动。
分类算法主要包括 K 近邻、决策树、朴素贝叶斯、逻辑回归、支持向量机、AdaBoost 等;聚类主要包括线性回归、岭回归、lasso、树回归等;聚类主要包括 K-Means        以及它的各种变形算法;关联分析主要包括 Apriori、FP-growth 等算法。
支持向量机即 support vector machine(简称 SVM),是机器学习领域经典的分类算法
关于 SVM 的简介支持向量是距离分类超平面近的那些点,SVM        的思想就是使得支持向量到分类超平面的间隔最大化。出发点很容易理解,距离分类超平面近的那些点到该超平面的间隔最大化代表了该超平面对两类数据的区分度强,不容易出现错分的情况。如图 1        所示,支持向量到超平面 1 的间隔大于支持向量到超平面 2 的间隔,因此超平面 1 优于超平面 2。
图 1. 两个超平面示例SVM 可以很好得解决二分类问题,对于多分类情况,就需要对模型进行改动。如 one-versus-rest        法,这种方法每次选择一个类别作为正样本,剩下其他类别作为负样本,假设一共有 3 个类别,这样相当于训练出了 3 个不同的 SVM。然后将测试数据分别带入 3 个 SVM 模型中,得到的        3 个结果中的最大值则为最终的分类结果。
支持向量到分类超平面的间隔最大化的思路很完美,按这种思路得到的模型理论上是准确度最高的一种模型。但是使用过 SVM 的朋友都知道,调用 SVM        算法的测试准确度并不一定都很高。这其中有很多原因,比如数据预处理的效果、训练集的大小、特征值的选择、参数设置以及核函数的选择等因素。
任何模型都是优点缺点并存的。
SVM 的优点是:
  • 可以解决线性不可分的情况。如图 2 所示,两类数据点根本无法用超平面分隔开;
  • 计算复杂度仅取决于少量支持向量,对于数据量大的数据集计算复杂度低。
SVM 的缺点是:
  • 经典的 SVM 算法仅支持二分类,对于多分类问题需要改动模型;
  • 不支持类别型数据,需在预处理阶段将类别型数据转换成离散型数据。类别型数据即"男"、 "女"这类由字符串表示某类信息的数据,需将这类数据转换成离散型数据如 1、2。
图 2. 线性不可分问题SVM 基本原理SVM 原理分为软间隔最大化、拉格朗日对偶、最优化问题求解、核函数、序列最小优化 SMO        等部分。虽然这些名词看起来很晦涩,但是深入探索后就会发现其中的思想并没有那么复杂。
软间隔最大化SVM        的核心思路是最大化支持向量到分隔超平面的间隔。后面所有的推导都是以最大化此间隔为核心思想展开。一般的机器学习问题都是先得到模型的目标函数和约束条件,然后在约束条件下对目标函数求得最优解。因此,我们下面首先需要推导出        SVM 模型的目标函数和约束条件。
既然要最大化间隔,那么回顾下点 x 到超平面(w,b)的距离公式:
其中超平面的公式为:
由此可推出点 x 到超平面(w,b)的几何间隔为:
其中 xi 代表第 i 条数据,yi 代表第 i 条数据对应的目标变量的取值,取值有+1 和-1 两种。所以当第 i 条数据被正确分类时,y 取值和 w*x+b        取值的正负一致,几何间隔为正;当被错误分类时,y 取值和 w*x+b 取值的正负相反,几何间隔为负。
图 3. 样本数据关于 w*x+b 的取值符号定义几何间隔中最小的为:
由此,可以得到间隔最大化问题的目标函数:
并遵循如下约束条件:
做如下变换:
则目标函数转换为:
相应的约束条件变为:
做如下变换:
可得目标函数和约束条件变为:
由于 w, b 成倍数变化并不会影响超平面的公式,所以:
此时得到最终的间隔最大化的目标函数和约束条件如下:
但是,到这里并没有真正得结束。考虑到现实生活中的真实数据,存在一些特异点即 outliers,这些数据点并不满足上面推导出的约束条件,如图 4 所示,图中点 A 就是 outlier        特异点。
图 4. Outlier 特异点为了解决这种问题,对每个样本点引进一个松弛变量,使得约束条件变为:
这样给 outlier 的约束条件加上一个变量,使其可以满足大于等于 1 的条件。则相应的目标变量变为:
其中 C 为惩罚参数,它的目的是使得目标变量最小即几何间隔最大,且使得松弛变量最小化。加入松弛变量的目标函数就是软间隔最大化。
拉格朗日对偶对于凸二次优化问题,通过引入拉格朗日乘子,将目标函数和约束条件整合到拉格朗日函数中,这样能方便求解最值问题。那么,对每个不等式约束引入拉格朗日乘子,得到拉格朗日函数如下:
分析可知:
则原最优化问题转换成:
由于原最优化问题直接求解很困难,利用拉格朗日对偶性,可通过求解原最优化问题的对偶问题得到原问题的最优解。原最优化问题的对偶问题为:
返回列表