β

机器学习作业详解

TianJun . Machine Learning 186 阅读

(2013.11.24更新)源码下载:http://pan.baidu.com/s/1ekqPt

先说说作业完成的过程吧,比较波折。

20号考试完后才完整看了下作业2和作业3,第一感觉是作业3比作业2简单。因为作业2是课本上那个习题,我上个月联系mit出版社的人弄到了一份Solution Manual,所以每太在意,感觉不会太难。哪知道前天开始看解答的时候才发现,由于Solution Manual上的答案写作时间有点久远了,用到的一些工具函数在最新版的PMTK工具包中已经不存在了,尽管有些文件在旧版本中能够找到,但代码的可读性很低,没办法,只能自己动手写。习题2中要对垃圾邮件用logistic回归分类,因为前段时间在coursera上的作业刚好练习了这个的,所以其中的代价函数costFunctionReg就直接拿过来了

直接上源码给大家解读

先载入数据,第1~3065行是训练数据,后面的是测试数据。最后一列对应的是分类(1表示垃圾邮件)。题目要求采用归一化(stnd),log,二值化(binary)对原始数据作预处理,所以写了个循环加switch,然后给定lambda的取值(因为计算量有点大,我只取了10个,可能这也是导致最后再测试集上表现不太好的原因)接着作10折交叉验证,并返回每次验证后的误差值给result,(这里始终是在训练集上做交叉验证),调用train函数,train函数中采用随机梯度下降法求解。交叉验证结束后绘出lambda的图像,并找到交叉验证误差最小值所对应的lambda。最后带入lambda_found,计算出系数theta,然后分别计算训练误差和测试误差。最后得到的测试误差不是很理想,感觉可能是lmbda的选取问题。

LDA 和 QDA 部分采用 classify 函数直接训练生成。

贝叶斯分类器借鉴的答案中的源码,我就不解释了。

作业3中,先写个循环对x_train分别作0~24阶拟合然后交叉验证得到各阶的误差值写入vals,找到最小vals对应的阶数,然后绘图,计算测试误差。岭回归的问题类似,先生成原始数据,在调用ridge函数,交叉验证,最后找到最小误差对应的lambda,绘图,计算测试误差。

作者:TianJun . Machine Learning
自由~ 分享~~ 交流~~~
原文地址:机器学习作业详解, 感谢原作者分享。