机器学习:支持向量机3

本文来自同步博客

P.S. 不知道简书怎么显示数学公式以及更好的排版内容。所以如果觉得文章下面格式乱的话请自行跳转到上述链接。后续我将不再对数学公式进行截图,毕竟行内公式截图的话排版会很乱。看原博客地址会有更好的体验。

前面两篇文章介绍了支持向量机SVM的基本原理,并利用Python实践了分割超平面的求解过程。

本篇文章将介绍SVM如何对非线性可分的数据进行分类。

基本原理

SVM处理线性不可分数据的关键在于把低维空间中线性不可分的数据映射到高维空间使其线性可分。然后再按线性可分数据进行处理。

就像下方展示的内容。有圆圈和星星两种不同的数据,在左边的一维空间中它们是无法线性分割的;而在右边二维空间中却可以用一条横线进行分割。

一维线性不可分二维线性可分

基于这个原理,很直观地,找到一个映射函数把样本向量x映射到高维空间的一个向量z。例如:对-\vec{x}=(x\_1, x\_2)-,可以有选择类似-\vec{z}=(1,x\_1,x\_2,x\_1^2, x\_2^2, 2x\_1x\_2)-的映射。利用这个映射,可以计算出每个数据点在高维空间中对应的向量。最后用这些向量求解-\vec{\alpha}、\vec{w}、b-

这里需要思考一个问题:这样把每个数据都映射成另一个向量,然后在进行计算,比线性可分模型的SVM复杂了好多好多。还有要找到这样的映射也不是一件容易的事。有没有比较好的做法?答案肯定是有的,可以利用“核技巧”。

核技巧

实际上我们不需要计算每个数据在高维空间的向量。因为无论是求解-\vec{\alpha}-,还是求解分割超平面的-\vec{w}--b-,我们需要仅仅只有一个高维空间下对应两个向量的向量积。例如有数据点-\vec{x\_1},\vec{x\_2}-,对应的映射后的结果为-\vec{z\_1},\vec{z\_2}-,那么我们要的仅仅是-\vec{z\_1}^{T} \vec{z\_2}-这个向量积。这种处理方式且称为核技巧,用函数-K(x\_1,x\_2)-表示向量积-\vec{z\_1}^{T} \vec{z\_2}-

首先,构造二次规划函数只需要-K(x\_1,x\_2)-
L(\vec{\alpha}) = \sum\_{i}^{n}{\alpha\_i} - \frac{1}{2}\sum\_{i}^{n}{\sum\_{j}^{n}{\alpha\_i \alpha\_j y\_i y\_j \vec{z\_i}^{T} \vec{z\_j}}}, \sum\_{i}^{n}{\alpha\_i y\_i} = 0, \alpha\_i,\alpha\_j \ge 0, i,j = 1,2...n

得到-\vec{\alpha}-向量后,可以得到-\vec{w}-:
w = \sum\_{i}^{n}{\alpha\_i y\_i \vec{z\_i}}
取其中一个支持向量(假设下标为v),可计算b,也只需要-K(x\_1,x\_2)-
b = \frac{1}{y\_v} - \vec{w}^{T}\vec{z\_v} = \frac{1}{y\_v} - \sum\_{i}^{n}{\alpha\_i y\_i \vec{z\_i}^{T}}\vec{z\_v} = \frac{1}{y\_v} - \sum\_{i}^{n}{\alpha\_i y\_i K(\vec{z\_i},\vec{z\_v})}

最后,对新数据的决策规则函数Rule如下,也只需要-K(x\_1,x\_2)-:
Rule: sign(\sum\_{i}^{n}{\alpha\_i y\_i K(\vec{x\_i},\vec{u})} + b)

常用核函数

1. 线性核函数

K(\vec{x\_1},\vec{x\_2}) = \vec{x\_1}^{T}\vec{x\_2}
这是-\vec{x\_1}^{T}\vec{x\_2}-本身,也算一个线性核函数,同时它也是下面介绍的多项式核函数的特例。

2. 多项式核函数

K(\vec{x\_1},\vec{x\_2}) = (\vec{x\_1}^{T}\vec{x\_2} + c)^{d}

这种核函数利用多项式展开可以了解它将把原向量映射到某个维度可数的空间内,维度数目与原向量的维度以及参数c、d有关。

3. 高斯核函数

K(\vec{x\_1},\vec{x\_2}) = exp(-\gamma ||\vec{x\_1} - \vec{x\_2}||^{d}) = e^{-\gamma ||\vec{x\_1} - \vec{x\_2}||^{d}}

高斯核函数可以利用泰勒展开,它可以把原向量映射到近乎无穷维空间。

判定核函数是否有效(高维空间是否存在)

一般情况下我们不需要自己发明核函数,常用的核函数已经够用,所以“关于多维Z空间是否存在或者核函数是否有效”的证明可以忽略不管。

这里依旧罗列判断核函数是否有效的两个条件:

  1. 核函数对输入是对称的,-K(\vec{x\_1}, \vec{x\_2}) = K(\vec{x\_2}, \vec{x\_1})-

-\begin{bmatrix} K(\vec{x\_1},\vec{x\_1}) & K(\vec{x\_1},\vec{x\_2}) & \cdots & K(\vec{x\_1},\vec{x\_n}) \\\\ \vdots & \vdots & \ddots & \vdots \\\\ K(\vec{x\_n},\vec{x\_1}) & K(\vec{x\_n},\vec{x\_2}) & \cdots & K(\vec{x\_n},\vec{x\_n}) \\\\ \end{bmatrix} -矩阵是一个正半定矩阵。

使用Python展示SVM对线性不可分数据的处理过程

与前一篇文章中的例子比较,这里的代码主要增加了一个kernel函数表示-K(\vec{x\_1},\vec{x\_2})-

# 核函数: 多项式核函数c=0,d=2
# 选择依据与测试数据有关,这样的映射应该可以把数据分隔开
# 则kernel应该返回的内积如下:
def kernel(x1, x2):
    return np.dot(x1, x2)**2

其次,在生成H矩阵的时候不是直接使用-\vec{x\_1}^{T}\vec{x\_2}-,而是使用kernel函数,如下:

# 计算H矩阵,根据样本数目应是一个len(X)xlen(X)的矩阵
H = np.array(
    [y[i] * y[j] * kernel(X[i], X[j]) for i in range(len(X)) for j in range(len(X))]
).reshape(len(X), len(X))

其他的流程几乎一样,除了绘图代码。

执行结果如下:


运行结果

本文源码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • 本文来自同步博客。 P.S. 不知道简书怎么显示数学公式以及更好的排版内容。所以如果觉得文章下面格式乱的话请自行跳...
    chardlau阅读 379评论 0 0
  • 【概述】 SVM训练分类器的方法是寻找到超平面,使正负样本在超平面的两侧(分类正确性即“分得开”),且样本到超平面...
    sealaes阅读 11,046评论 0 7
  • 首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他...
    Helen_Cat阅读 3,849评论 1 10
  • 手机佛额看手机睡觉睡觉
    Chz哒哒哒阅读 162评论 0 0
  • 如何让美国人了解外面的世界呢。在何伟的经历中,和平工作团起着重要的作用。这个从甘乃迪时代创建的组织,迄今已经有50...
    Andylee阅读 578评论 0 1