斯坦福CS229机器学习课程笔记七:算法诊断、误差分析以及如何开始一个机器学习问题

这一节是Andrew对应用机器学习给出的建议,虽然没有数学公式,但却是十分重要的一课。

Debugging Learning Algorithms

假设要做一个垃圾邮件分类的模型,已经从海量的词汇表中选出一个较小的词汇子集(100个单词)作为特征。
用梯度上升算法实现了贝叶斯逻辑回归,但测试集的错误率达到了20%,这显然太高了。

如何解决这个问题?

  • 收集更多的训练样本
  • 进一步减少特征数
  • 增加特征数
  • 改变特征(考虑邮件标题/正文)
  • 将梯度上升多运行几个迭代
  • 尝试牛顿方法
  • 使用不同的λ
  • 改用SVM

继续阅读斯坦福CS229机器学习课程笔记七:算法诊断、误差分析以及如何开始一个机器学习问题

斯坦福CS229机器学习课程笔记六:学习理论、模型选择与正则化

稍微了解有监督机器学习的人都会知道,我们先通过训练集训练出模型,然后在测试集上测试模型效果,最后在未知的数据集上部署算法。然而,我们的目标是希望算法在未知的数据集上有很好的分类效果(即最低的泛化误差),为什么训练误差最小的模型对控制泛化误差也会有效呢?这一节关于学习理论的知识就是让大家知其然也知其所以然。

学习理论

1.empirical risk minimization(经验风险最小化)

假设有m个样本的训练集,并且每个样本都是相互独立地从概率分布D中生成的。对于假设h,定义training error训练误差(或者叫empirical risk经验风险)为:h误分类样本占整个训练集的比重:

另外,定义generalization error泛化误差为:从生成训练集的概率分布D中生成新的样本,假设h误分类的概率

值得注意的是:假设训练集与新的样本都相互独立地由同一个分布D产生(IID独立同分布)是学习理论里重要的基础。
当我们选择模型参数时使用如下方法:

就是所谓的经验风险最小化(empirical risk minimization),经验风险最小化是一个非凸优化问题难以求解,而logistic回归与SVM可以看做这个问题的凸优化近似。 继续阅读斯坦福CS229机器学习课程笔记六:学习理论、模型选择与正则化

斯坦福CS229机器学习课程笔记五:支持向量机 Support Vector Machines

SVM被许多人认为是有监督学习中最好的算法,去年的这个时候我就在尝试学习。不过,面对长长的公式和拗口的中文翻译最终放弃了。时隔一年,看到Andrew讲解SVM,总算对它有了较为完整的认识,总体思路是这样的:1.介绍间隔的概念并重新定义符号;2.分别介绍functional margins与geometric margins;3.由此引出最大间隔分类器,同时将最优化问题转化为凸函数的优化问题;4.补充了拉格朗日对偶性的知识;5.利用拉格朗日对偶性,推导最大间隔分类器最优化的对偶问题,即SVM的最优化公式,并指明公式中的内积;6.由内积引出核函数的重要性——当特征向量维度极高时利用核函数大大缩短计算时间;7.利用正则化解决线性不可分与异常点的问题;8.介绍SMO算法以高效地解SVM。

最大间隔分类器

1.假设、模型、符号

我们先假设所有数据都是线性可分的(之后会去除这个假设),通过下图直观地感受一下这个分类器。

虽然A、B、C三个点被分到了同一类,但我们认为点A的分类是最有把握的,因为它距离分类线最远(即间隔最大)。因此,这个分类器最基础的部分就是如何计算间隔。不过,在介绍间隔之前我们先看一下模型及其符号: 继续阅读斯坦福CS229机器学习课程笔记五:支持向量机 Support Vector Machines

斯坦福CS229机器学习课程笔记四:GDA、朴素贝叶斯、多项事件模型

距离上一篇笔记竟然快要一个月了……希望这周能把cs229监督学习部分的知识搞定。

生成学习与判别学习

像逻辑回归,用hθ(x) = g(θTx) 直接地来建模 p(y|x; θ) ;或者像感知机,直接从输入空间映射到输出空间(0或1),它们都被称作判别学习(discriminative learning)
与之相对的是生成学习(generative learning),先对 p(x|y) 与 p(y) 建模,然后通过贝叶斯法则导出后验条件概率分布

分母的计算规则为全概率公式:p(x) = p(x|y = 1)p(y = 1) + p(x|y =0)p(y = 0)。
这一节介绍的三个算法GDA、朴素贝叶斯、多项事件模型,都属于生成学习的范畴。

GDA (Gaussian discriminant analysis)

1.多元正态分布

因为GDA要通过多元正态分布来对p(x|y)进行建模,所以先介绍一下多元正态:

其中两个参数:μ为均值向量,Σ为协方差矩阵。
接下来从比较容易可视化的二元正态分布图像入手,了解参数变化对概率分布变化的影响:

继续阅读斯坦福CS229机器学习课程笔记四:GDA、朴素贝叶斯、多项事件模型

斯坦福CS229机器学习课程笔记三:感知机、Softmax回归

为了给课程的前四讲画上一个句号,这里补充两个前四讲中NG大神提到过的模型。

The perceptron learning algorithm 感知机

模型:

从模型上来看感知机与逻辑回归十分相似,只不过逻辑回归的g函数是逻辑函数(又称sigmoid函数),它是一条从y值0到1的连续曲线。当z→∞,g(z)→1;当z → −∞,g(z)→0。
g(z) = 1/(1+e-z)

而感知机的g函数是分段函数,只输出0和1。
虽然和逻辑回归形式上相近,但是很难为感知机的预测加上概率解释,也很难说感知机算法是源于最大化似然函数, 继续阅读斯坦福CS229机器学习课程笔记三:感知机、Softmax回归

斯坦福CS229机器学习课程笔记二:GLM广义线性模型与Logistic回归

一直听闻Logistic Regression逻辑回归的大名,比如吴军博士在《数学之美》中提到,Google是利用逻辑回归预测搜索广告的点击率。因为自己一直对个性化广告感兴趣,于是疯狂google过逻辑回归的资料,但没有一个网页资料能很好地讲清到底逻辑回归是什么。幸好,在CS229第三节课介绍了逻辑回归,第四节课介绍了广义线性模型,综合起来总算让我对逻辑回归有了一定的理解。与课程的顺序相反,我认为应该先了解广义线性模型再来看逻辑回归,也许这也是为什么讲逻辑回归的网页资料总让人感觉云里雾里的原因吧。

Generalized Linear Model (GLM) 广义线性模型

这一段主要讲的是广义线性模型的定义和假设,为了看明白逻辑回归,大家要耐着性子看完。

1.The exponential family 指数分布族

因为广义线性模型是围绕指数分布族的,因此需要先介绍,用NG大神的话说就是,“虽然不是全部,但是我们见过的大多数分布都属于指数分布族,比如:Bernoulli伯努利分布、Gaussian高斯分布、multinomial多项分布、Poisson泊松分布、gamma分布、指数分布、Dirichlet分布……” 继续阅读斯坦福CS229机器学习课程笔记二:GLM广义线性模型与Logistic回归

斯坦福CS229机器学习课程笔记一:线性回归与梯度下降算法

应该是去年的这个时候,我开始接触机器学习的相关知识,当时的入门书籍是《数据挖掘导论》。囫囵吞枣般看完了各个知名的分类器:决策树、朴素贝叶斯、SVM、神经网络、随机森林等等;另外较为认真地复习了统计学,学习了线性回归,也得以通过orange、spss、R做一些分类预测工作。可是对外说自己是搞机器学习的还是不太自信,毕竟和科班出身的各位大牛相比自己对这些模型、算法的理解只能算是“知其然而不知其所以然”,用起来总感觉哪里不对劲。

因此,去年早早地就把网易公开课上Andrew大神的斯坦福CS229课程以及相应的讲义下载了下来,但每次一想学,看到每集1个多小时的内容就望而生却,感觉没有足够的整块的时间来学习。好在过年回家期间,实在没有其他借口不学了,于是才能有这篇学习笔记……截止今天下午,刚好学完了前四课,听Andrew Ng讲完了GLM广义线性模型的相关内容。真的是感觉相见恨晚。我要向所有看到本文的同学推荐这个课程(虽然是07年的)。

机器学习三要素

机器学习的三要素为:模型、策略、算法。
这些知识来自于李航写的《统计学习方法》。“外国的老师善于形象化地举例,中国的老师善于总结归纳”这句话还是很有道理的,适当的归纳有助于理清我们的思路,不知大家是否有和我类似的疑惑:“线性回归是模型还是算法?”,“SVM是模型还是算法?”接下来我会结合自己的思考,从模型、策略、算法的角度整理学习笔记。 继续阅读斯坦福CS229机器学习课程笔记一:线性回归与梯度下降算法

python+django+BeautifulSoup抓取nba数据并持久化

其实,激发起写博客冲动的是帝国时代2高清版的上市,最近在重温这款经典游戏使得我很想整理一下帝国里兵种相克关系与那些帝国的真实历史。不过,这个博客的初衷始终是技术博客,所以先压一压欲望,把之前欠的文章先发一发吧:

毕业论文我选择的主题是《基于数据挖掘的NBA球队建队方案研究》,期间我将basketballreference82games两个NBA数据网站的数据抓取到本地的数据库中进行研究;使用了scikit-learen库对球队数据进行基本的数据挖掘(聚类与分类);贯穿始末的则是django框架:model用于数据持久化,view用于操作数据,template用于展示结果(借助了google chart)。以上的工作都是基于python的,也可以看出python的强大了吧。接下来我会以一个系列的形式讲解整个过程是如何实现的,本文是系列的第一篇:数据抓取与持久化。 继续阅读python+django+BeautifulSoup抓取nba数据并持久化