作者 | 我是韩小琦

链接 | https://zhuanlan.zhihu.com/p/49023182

6.1 试证明样本空间中任意点  到超平面  的的距离为式 (6.2)。

答:

图中,令A点到超平面(点B)的距离为 ,于是  (  是  同向的单位向量, 对于超平面 其垂直方向即  ),对于B点有:  ,而  ,于是  ,可得  ,这里的  即书中  ,即可的式6.2。

这个问题在吴恩达老师的《机器学习》课程(斯坦福版本CS 229)里面讲解过,有兴趣的可以自己去网易公开课看看,图片截图自该课程课件。

6.2 试使用 LIBSVM,在西瓜数据集 3.0α 上分别用线性核和高斯核训练一个 SVM,并比较其支持向量的差别。

答:

这里没用LIBSVM,用的sklearn中的sklearn.svm.svc,它的实现也是基于libsvm的。

使用不同参数的时候,支持向量是不同的(没有对高斯核中的gamma调参)。由于西瓜数据集3.0a线性不可分,所以使用线性核时,无论惩罚系数多高 ,还是会出现误分类的情况;而使用高斯核时在惩罚系数设置较大时,是可以完全拟合训练数据。所以在惩罚系数设置较小时,两者支持向量都类似,而在惩罚系数较大(支持向量机中,惩罚系数越大,正则化程度越低)时,高斯核的支持向量数目会较少,而线性核的会几乎没有变化。

代码在:han1057578619/MachineLearning_Zhouzhihua_ProblemSets

C = 100时训练情况如下:

高斯核支持向量: [ 8 9 11 12 13 14 16 2 3 4 5 6 7]

----------------------------------------

线性核支持向量: [ 8 9 11 12 13 14 16 2 3 4 5 6 7]


C = 10000时训练情况如下:

高斯核支持向量: [11 13 14 1 5 6]

----------------------------------------

线性核支持向量: [ 9 11 12 13 14 16 2 3 4 5 6 7]

6.3 选择两个 UCI 数据集,分别用线性核和高斯核训练一个 SVM,并与BP 神经网络和 C4.5 决策树进行实验比较。

答:

han1057578619/MachineLearning_Zhouzhihua_ProblemSets

6.4 试讨论线性判别分析与线性核支持向量机在何种条件下等价。

答:

这道题想不出很明确的答案,这仅讨论一下。

有一点很明确的是:在数据线性可分时并不会导致线性判别分析与线性核支持向量机等价。

上图是以iris数据中第0列和第2列数据作为训练集。分别LDA和线性核SVM训练,得到图中两者的决策边界,可以看出在数据线性可分的情况下,两者决策边界还是有很大差别的。如果这里等价理解为两者决策边界相同,即两个模型决策函数是相同的,那么两者决策边界重合时,两者等价的。那么什么时候两者会重叠?

事实上,可以想象到,LDA的决策边界的斜率可以由投影面  得到,其斜率是垂直于  的,而截距则可由两类样本的中心点 在  投影  得到,即LDA决策边界通过  的中点(公式参考原书p60)。

而线性核SVM的决策边界则由模型参数  得到(对应原书式6.12),所以当SVM中的参数  和LDA中投影面  垂直,且 SVM的 通过两类样本中心在  的投影的中点时,两者等价。只讨论到这里了。

查了很多资料没找到相关信息。感觉LDA和SVM其实没有多大相似度。

ps.这里解答其实就按照结果倒推了一下。貌似都是些废话。

画图代码在:han1057578619/MachineLearning_Zhouzhihua_ProblemSets

代码有点乱。

6.5 试述高斯核 SVM 与 RBF 神经网络之间的联系。

答:

其实这个题目在p145的《休息一会儿》的注释里面已经给出答案了。

RBF神经网络中,将隐藏层神经元个数设置为训练样本数,每个样本设置为一个神经元中心,此时RBF的预测函数和SVM激活函数相同。

个人理解,两个模型还是有挺大差别的。

  • RBF中径向基激活函数中控制方差的参数  是由模型自动习得,而在SVM中是一个可调节的超参。

  • 目标函数、优化方式也不同。

但是如果将RBF中  固定为和SVM一致,最后训练结果应该会比较相似。

以上是个人理解。就不写代码验证了。。。

6.6 试析 SVM 对噪声敏感的原因。

答:

SVM的决策只基于少量的支持向量,若噪音样本出现在支持向量中,容易对决策造成影响,所以SVM对噪音敏感。

6.7 试给出式 (6.52) 的完整 KKT 条件。

答:

6.52式是经过将完整的KKT条件

 ,这里对应着原书式6.47-6.50合并之后的。完整的如下:

6.52中其他公式的推导出来的。

6.8 以西瓜数据集 3.0α 的"密度"为输入"含糖率"为输出,试使用LIBSVM 训练一个 SVR。

答:

关于SVR没有理解很深,简单了解了一下。这道题就简单看一下不同参数,训练结果的变换吧。

直观上看,含糖率和密度无明显关系。所以无论模型参数怎么调,看上去对数据的拟合都不是很好,预测值和真实值还是有较大差异。不过还是可以看出来随着gamma或者C的增大,模型都会趋于更加复杂。

这里代码很简单,还是放上来。

han1057578619/MachineLearning_Zhouzhihua_ProblemSet

6.9 试使用核技巧推广对率回归,产生"核对率回归"。

答:

对于  形式的模型,即线性模型,使用核技巧的关键点在于最优的  可以由训练集的线性组合表示,即  ,使得模型可表示为  ,进而使用核函数直接计算数据点在高维空间内积,而不显式的计算数据点从低维到高维的映射。

原命题:事实上对于任何L2正则化的线性模型: ,这里,其最优值都可以表示为  。其证明参考下图:(截图自林轩田讲授的《机器学习技法》课程第五章课件)

(上图中  可以理解为数据点  或者  在高维空间的映射  )

上图通过反证法来证明:

将  分解为与  空间平行的  和垂直的  ,若  则表示  可以表示为  的线性组合。

假设  为最优解且  。由于  与  空间垂直,于是  , 因此不会对目标函数中  项的大小产生影响,而对于  ,在  的情况下必定有:  ,显然  比  “更优”,即  不是最优解。于是原命题得证。

那么对于L2正则化的逻辑回归,其核形式即如下图:

可直接使用梯度下降等优化算法求解上图的目标函数即

题目没要求。就偷个懒不写代码了。

说个题外的。SVM中只有少数支持向量对应的  非零,所以对于SVM来说,训练完成后只需要储存个别非零的  和对应数据点即可;而不同于SVM, 核逻辑回归并没有这一性质,需要储存所有训练数据。就这一点来说核逻辑回归并不高效。

6.10* 试设计一个能显著减少 SVM 中支持向量的数目而不显著降低泛化性能的方法。(未完成)

答:

这个应该也是某个论文。最近时间不多,暂时不深究了就。。

6.11 自己编程实现SVM,并在西瓜数据集 3.0αα 测试。

答:

自己加的题目。虽然书上没要求,但还是自己写了一遍。

代码在:

han1057578619/MachineLearning_Zhouzhihua_ProblemSets

其实主要就是把SMO实现了一遍。

参考:

  • 《统计学习方法》

  • 《机器学习实战》

  • 《Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines》

  • 《THE IMPLEMENTATION OF SUPPORT VECTOR MACHINES USING THE SEQUENTIAL MINIMAL OPTIMIZATION ALGORITHM》

写代码的时候参考以上资料。代码主要根据原论文中提供的伪代码和《机器学习实战》的源码写的,《机器学习实战》中给出的代码和原论文有几个地方有差异:

  • 在选择第二个  变量时,原论文给出的方法是1、首先从间隔边界上的支持向量(  )中,找到使得  最大的  。2、若上面选的  不行,则遍历所有的支持向量。3、还是不行则遍历所有的样本点。4、若所有样本点都不行,则放弃一个变量。关于认定  不行的原则,原论文描述的是:不能使得目标函数有足够下降。实际上在伪代码中是使得  本身有足够下降就认为不行。而《机器学习实战》中代码从更新过的  中选择使得  最大的 作为第二个变量。若不行则直接放弃第一个变量。不知道这一点是改进还是简化。代码中是按照论文的方式实现的

  • 为了选择第二个变量时方便,SMO会将所有支持向量的误差  建立缓存,且在每次更新完 之后,都同时更新误差缓存。《机器学习实战》源码中,在给支持向量建立误差缓存时,虽然有更新  的步骤,但只更新了每次更新的两个变量  对应的误差,并且更新之后也没有使用,在选择第二个变量计算  时,都重新计算了  。在自己实现的时候,这一点也是按照论文来的。

  • 最后一点,在更新  时,需要计算  (参考统计学习方法 p127 式7.107),在极少数情况下  会等于零,在原论文中给出了针对这种情况下  的更新方式,在《机器学习实战》中,这种情况会直接跳过更新。这里代码和《机器学习实战》一致,直接跳过了,这一点其实影响不大。

另外实际上更新误差缓存  有更高效的方法,是在第四个参考文献里面发现的。不过在代码里面没有实现。因为感觉有点复杂。。。有兴趣的可以看看那篇论文,在3.4小节解释了更新误差缓存的方式。

最后自己写的代码在西瓜数据集3.0α上测试了一下,训练后决策边界如下:

训练结果和使用sklearn中结果(习题6.2)一致,支持向量也是相同的,决策边界差不多相同,其他数据未测试。不过速度上,sklearn会快很多,测试了一下训练西瓜数据集,自己写的代码需要5e-4秒,而sklearn只需要1e-8。还是有很大差距的。

代码有点乱,这里只为深刻理解一下SMO,也不做工程使用,暂时就不优化了。。以后闲下来再看看。

以上。

系列文章:

1. 周志华机器学习课后习题解析【第二章】

2. 周志华《机器学习》课后习题(第三章):线性模型

3. 周志华《机器学习》课后习题解析(第四章):决策树

4. 周志华《机器学习》课后习题(第五章):神经网络


推荐阅读

(点击标题可跳转阅读)

干货 | 公众号历史文章精选

我的深度学习入门路线

我的机器学习入门路线图

重磅

AI有道年度技术文章电子版PDF来啦!

扫描下方二维码,添加 AI有道小助手微信,可申请入群,并获得2020完整技术文章合集PDF(一定要备注:入群 + 地点 + 学校/公司。例如:入群+上海+复旦

长按扫码,申请入群

(添加人数较多,请耐心等待)

最新 AI 干货,我在看 

周志华《机器学习》课后习题(第六章):支持向量机相关推荐

  1. 周志华机器学习课后习题解析【第二章】

    作者 | 我是韩小琦 链接 | https://zhuanlan.zhihu.com/p/42435889 2.1 数据集包含 1000 个样本,其中 500 个正例. 500 个反例,将其划分为包含 ...

  2. bp神经网络代码_机器学习(周志华)课后习题——第五章——神经网络

    5.1 试述将线性函数 用作神经元激活函数的缺陷. 答: 使用线性函数作为激活函数时,无论是在隐藏层还是在输出层(无论传递几层),其单元值(在使用激活函数之前)都还是输入 的线性组合,这个时候的神经网 ...

  3. 【吃瓜教程】周志华机器学习西瓜书第三章答案

    线性模型结构梳理 3.1 试析在什么情形下式3.2中不必考虑偏置项b 答案一: 偏置项b在数值上代表了自变量取0时,因变量的取值: 1.当讨论变量x对结果y的影响,不用考虑b: 2.可以用变量归一化( ...

  4. 周志华-机器学习西瓜书-第三章习题3.3 编程实现对率回归

    本文为周志华机器学习西瓜书第三章课后习题3.3答案,编程实现对率回归,数据集为书本第89页的数据 使用tensorflow实现过程 # coding=utf-8 import tensorflow a ...

  5. 西瓜书(周志华)课后习题答案

    目录 第一章 绪论 http://blog.csdn.net/icefire_tyh/article/details/52065224 第二章 模型评估与选择 http://blog.csdn.net ...

  6. 机器学习(周志华著)习题 第03章 线性模型

    3.1 试析在什么情形下式(3.2)中不必考虑偏置项b 有网友说可以让所有的数据减去第一个样本,但是在实际应用中这样做偶然性太大.可以先对数据进行"中心化"处理,也就是对每一个x ...

  7. 周志华机器学习:决策树

    决策树 文章目录 决策树 参考 基本流程 划分选择 信息增益 决策树的生成--ID3,及其问题 增益率 决策树生成 --C4.5,及其问题 剪枝处理 预剪枝和后剪枝 统计学习方法中的剪枝 CART算法 ...

  8. 周志华机器学习(西瓜书)学习笔记(持续更新)

    <周志华机器学习>笔记 第1章 绪论 1.1 引言 1.2 基本术语 1.3 假设空间 1.4 归纳偏好 1.5 发展历程 1.6 应用现状 第2章 模型评估与选择 2.1 经验误差与过拟 ...

  9. 周志华机器学习--绪论

    周志华机器学习–绪论 第一章 绪论 第二章 模型评估与选择 第三章 线性模型 第四章 决策树 第五章 支持向量机 第六章 神经网络 第七章 贝叶斯分类器 第八章 集成学习和聚类 文章目录 周志华机器学 ...

  10. 周志华机器学习--模型评估与选择

    周志华机器学习–模型评估与选择 第一章 绪论 第二章 模型评估与选择 第三章 线性模型 第四章 决策树 第五章 支持向量机 第六章 神经网络 第七章 贝叶斯分类器 第八章 集成学习和聚类 文章目录 周 ...

最新文章

  1. 使用cat,awk和sort命令从nginx访问日志中统计user-agent类型
  2. Civil 3D 二次开发 创建AutoCAD对象—— 00 ——
  3. 计算机ai听课记录,ai ei ui评课稿听课记录
  4. bzoj 3055礼物运送 floyed + 状压DP
  5. Kali Linux2使用基础
  6. 无法显示论坛的登陆验证码
  7. 用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。
  8. hadoop上传文件java_hadoop入门之通过java代码实现将本地文件上传到hadoop的文件系统...
  9. php注册树模式,PHP设计模式之详记注册树模式
  10. Git应用之eclipse解决冲突代码
  11. 百度CTO王海峰出席科协年会重头论坛,展现智能云产业智能化硕果
  12. 微信浏览器中页面刷新
  13. 开发必学的验证码,教你从零写一个验证码
  14. python 路径拼接_python路径拼接os.path.join()函数的用法
  15. STM8S003F3使用总结——定时器
  16. iphone6 问题总结
  17. 基于Arduino锂电池容量测试仪
  18. 一个高逼格开发者必须理解的大型分布式网站的几点概念
  19. 更改Gradle镜像下载地址
  20. vue踩坑笔记06---vuex的state,getter,mustation,action,module

热门文章

  1. 【企业架构框架】2022 年 TOGAF 的新发展
  2. android 计算器边框,Android计算器——入门
  3. android计算器(按钮版)
  4. SAE J1939协议读取车辆故障码
  5. Mac镜像创建方法简介
  6. c语言32bit数大小端转换,玩儿转C语言:bit 位域大小端转换及传输
  7. 通过linux访问IPMI端口,Linux通过命令行设置IPMI的解决方法(图)
  8. Phpmailer指定多位收件人
  9. visio 绘图矢量图素材网站
  10. 威伦触摸屏和三菱PLC通信