Categories
读书有感

≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(三)

照例文章第一段跑题,先附上个段子(转载的哦~):

I hate CS people. They don't know linear algebra but want to teach projective geometry. They don't know any probability but want to use graphical models. They don't understand stats at all but still do machine learning like crazy.

喵,最近被问了好几次machine learning 和statistical learning的区别在哪里,我觉得大致如上吧。这也是为什么,对后面这个词我的好感稍稍好于前面那个的原因...科学总是有意义的嘛,不能总是依靠强力乱猜是不是嘛。

免责声明:以下个人见解部分局限于我个人的见识和思考范围,不适用于所有场景。请大家弃糟粕取精华,不可一言全信之。

-------------笔记+随想开始------------

高维空间问题

这一段主要是说大名鼎鼎的"维数灾难"。我们都知道有两个数字决定着OLS中X矩阵的大小,这就是 观测数目N 和观测变量的个数p 。一般说来,我们都喜欢N比较大,这样可以很容易的应用大数定律什么的。然而对于p,却是既爱又恨—我们当然喜欢可以观察到个体的很多个特征,但是所谓"乱花渐欲迷人眼",特征越多噪音也越多,搞不好预测的时候就会有麻烦(关于变量的选择问题,应该是下一节课的内容。心急的可以先看看我以前的一篇自学笔记)。

为什么维数增多的时候会麻烦呢?这里主要是随着维数增多带来的高维空间数据稀疏化问题。简单地说:

  • p=1,则单位球(简化为正值的情况)变为一条[0,1]之间的直线。如果我们有N个点,则在均匀分布的情况下,两点之间的距离为1/N。其实平均分布和完全随机分布的两两点之间平均距离这个概念大致是等价的,大家可稍微想象一下这个过程。
  • p=2,单位球则是边长为1的正方形,如果还是只有N个点 ,则两点之间的平均距离为。换言之,如果我们还想维持两点之间平均距离为1/N,那么则需个点。
  • 以此类题,在p维空间,N个点两两之间的平均距离为,或者需要个点来维持1/N的平均距离。

由此可见,高维空间使得数据变得更加稀疏。这里有一个重要的定理:N个点在p为单位球内随机分布,则随着p的增大,这些点会越来越远离单位球的中心,转而往外缘分散。这个定理源于各点距单位球中心距离的中间值计算公式:

时,。(很显然,当N变大时,这个距离趋近于0。直观的理解就是,想象我们有一堆气体分子,p变大使得空间变大,所以这些分子开始远离彼此;而N变大意味着有更多气体分子进来,所以两两之间难免更挤一些。看过《三体》的,大概会觉得这个很熟悉的感觉吧...四维空间下的"水滴"再也不完美的无懈可击,而一张一维的纸片就毁灭了整个地球呢。)

这个距离公式的推导就暂时不写了,好麻烦...大致是利用了各个点独立同分布的特性(完全随机情况下),把median距离变为以1/2概率大于中位数的概率集合公式,再进一步展开为单点距离累乘公式。

比如当p=10, N=500的时候,约为0.52,也就意味着有一半多的点离中心的距离大于1/2。

高维问题为什么是问题呢?回顾一下K近邻算法,我们用x的邻居来代替x,这样就希望他的邻居们不要离他太远。显然高维空间使得点和点之间越来越远。所以说,knn更适合小p大N即低维多观测量的情况,而在高维空间下可能会变得很麻烦。

这样,statistical learning的主要两个问题就总结完了:

  • 过拟合:为了控制预测误差,我们要选择适合的函数类。
  • 高维空间:随着维数的增多,我们面临着维数灾难。这对很多算法都有波及,主要体现在高维数据稀疏化。

回归的线性方法

这里主要是一些linear regression的东西,作为被计量经济学折磨了这么多年的孩子,我表示很淡定...此外还加上我们俗称的generalized linear models,即GLM。一些线性变换而已,无伤大雅。

这里一定要强调的是,在这里我们亲爱的X居然不是随机变量!多大的一个坑啊,我就华丽丽的掉下去了还问老师为什么无偏性不需要假设均值独立什么的... X不是随机变量意味着什么呢?X是人为设定或者决定的,比如我一天浇200 ml 或者500 ml水,然后看对于植物生长的影响。当时我真的是想"一口老血喷出来",这也太舒服了吧!要知道大多数情况下X也是随机变量哇,比如身高体重什么的。如果它不是随机变量而只有扰动项是独立的随机变量的话,整个计量经济学怕是要删掉好多篇幅了呢。我想说的只有,这群搞statistical learning的好幸福...

X不是随机变量的时候,为了满足无偏性的假设,只需要扰动项不相关且期望方差存在就可以了。期望不为0不要紧,回归的时候放进去常数项就可以了。

此外,对于任意一个正定阵W,我们都可以直接在回归方程两边乘以W,从而。也就是说,我们可以给X进行加权处理,加权矩阵W之后可以进行新的OLS估计,且可能会有对应的优良性质。加权最小二乘法我就不在这里复习了,学过计量的应该很熟悉,比如处理异方差什么的。

再就是我们可以给加上一些约束条件,这样的话最小化问题后面就可以简单的使用拉格朗日乘子法来解。

这次的收获之一就是OLS估计量的计算。在实践中,我们计算OLS估计值并不是直接使用,而是会事先进行QR分解(利用特征值来算)。即,我们把X分解为化为正交(酉)矩阵Q与实(复)上三角矩阵R的乘积。这样一来,

这样可解,计算时候的稳定性比直接求逆矩阵来的好很多,因为计算机必竟有数字长度的限制,各种位数带来的精度损耗最后会累积到估计量上。

最后就是高斯-马尔科夫定理,就是我们常说的BLUE估计量。我就直接拷贝这个定理了:

在误差零均值,同方差,且互不相关的线性回归模型中,回归系数的最佳无偏线性估计(BLUE)就是最小方差估计。一般而言,任何回归系数的线性组合的最佳无偏线性估计就是它的最小方差估计。在这个线性回归模型中,误差既不需要假定正态分布,也不需要假定独立(但是需要不相关这个更弱的条件),还不需要假定同分布

进一步的,如果假设扰动项服从正态分布,比如白噪声,那么的估计值也服从正态分布,y的预测值也服从正态分布,因此可以直接做一系列基于正态分布的假设检验。特别的,在大样本情况下,就算扰动项不是正态分布,我们也还是可以利用大数定律和中心极限定理...事实上一般也是这么做的。

本节课到此结束。老师没有一一推导无偏性最小方差这些性质,我倒是觉得对回归方法感兴趣的还是直接去看计量经济学吧。这东西水还是蛮深的。

Categories
读书有感

≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(二)

继续一周一次的课堂笔记 昨天去晚了站着听讲,感觉好好啊,注意各种集中。想想整个教室里面就是我和老师是站着的,自豪感油然而生。

第二次课讲的东西依旧比较简单,是这本书第二章的前半部分。作为一个好久之前已经预习过的孩子,我表示万分的得意(最小二乘法难道不是三四年前就学过的?话说以后我再面人的时候,就让他推导最小二乘估计量,嘻嘻...考验一下基本功)。

------------原谅我的废话,笔记开始------------

简单预测方法:最小二乘法(以下沿用计量经济学的习惯,简称OLS)

OLS实在是太普遍了,我就不赘述细节了。OLS的思想就是,基于已有的样本信息,找出一条直线,让预测值与真实值之间的残差平方和最小,即最小。其中,为真实的样本观测值(已有样本),而是OLS的预测值。用图来讲的话,X为一维向量的时候,就是用一条直线来最好的拟合各个样本点。

这里就很明显了,首先OLS假设是一条直线。那么就是一个参数模型,即我们需要假设一个未知的参数,构成一个线性方程,然后再去估计的值。然后呢,直线会有很多条,所以我们要找到一个目标——比如这里,就是最小化残差平方和RSS。换言之,我们寻找的就是最优的向量使得RSS最小。

解这个最优化问题很简单,我就不重复了。最后解得的最优估计量为:

这里写成矩阵形式,比较简单。X为一维向量的时候,可以改写成形式,我个人不大喜欢,就不展开了。

简单预测方法:K近邻(k nearest neighbor)

K近邻的思想就更简单了。不就是想预测某个点x对应的y么?那么就把它的邻居都找来,平均一下好了。不是有句话叫做什么“一个人的收入就大概是他的圈子收入的平均值么?”

所以 ,这里表示点x的K近邻。至于这个近邻怎么定义嘛,嘻嘻,很简单啊,欧几里德距离就可以嘛~

评语:吴老师对于这两个算法的直观评价是,OLS呢就是勤奋的学生,预测前先做足功课,预测的时候只要知道X,噼里啪啦一下子y就估计出来了。然而knn则是一个临时抱佛脚的学生,预测的时候开始找自己的k近邻,然后把它们平均一下就好了。哈哈,大意如此,大家可以体会一下这种精神。我个人感觉呢,OLS属于以不变应万变的,而knn则是见机行事的。

统计决策理论(Statistical Decision Theory)

说了这么多,这个模型好不好到底怎么判读呢?凡事总得有个标准呢。这一系列的标准或者说准则,就是统计决策理论了。

首先呢,大致我们需要对X,Y有个分布上的描述:用记作向量的联合分布,然后为其对应的密度函数。之后为了估计Y,我们会有很多很多模型,即各种,而这些组成的函数空间记为

然后我们定义一个损失函数,比如在均方误差意义下,,这样就有了一个选择的标准——使得损失函数的期望最小:。接下来就是,到底在空间里面,哪一个最符合这个标准呢?

首先自然是把联合分布变为条件分布。这个idea显而易见——我们总是知道X的(原谅我吧,全中文确实比较难写,偶尔穿插英文一下 ^_^)。所以conditional on X,我们就有了

去解最小化问题,最终我们得到的就是在每个点X上, 。通俗的讲就是,对于每个点预测,把和它X向量取值一样的样本点都找出来,然后取他们的平均值就可以了。很直观的不是么?这里也有点最大似然的想法呢——比如预测一个男孩的身高,最保险的就是把和它同龄的其他男孩的身高平均一下,不是么?

但是说来简单啊,很多时候都是未知的,根本无法计算嘛。所以只能近似:

  • 回忆一下knn,就是放松了两点:1) 取的是x的近邻,而不一定是x; 2)用样本平均数代替了期望
  • 而OLS呢,也是最后在这里,用样本平均代替了期望。

近似嘛,自然有好的近似和不好的近似。很显然的,当样本比较大、尤其是比较密集的时候,x的邻居应该都离x很近,所以这个误差可以减小;此外,当样本很大的时候,根据大数定律,平均数收敛于期望。所以,这两种算法应该说,都在大样本下会有更好的效果。

模型选择、训练误差与测试误差、过拟合

这里讲的比较简单。模型选择就是的选择,即选择哪一类函数空间,然后再其中找/估计最优的。很显然,如果只有若干个有限的样本,我们总能把各个样本用直线或者曲线依次连起来,这样的话就有无数个f可以作为此问题的解。显然这不是我们想要的——这样的称为“不设定问题”,即可能无解、可能多个解、还可能因为一点点X的变化导致整个解的解答变化。因此我们需要先设定一个解的类别。

训练误差:预测模型估计值与训练数据集之间的误差。RSS就是一个典型的训练误差组成的残差平方和。

测试误差:用训练集以外的测试数据集带来的误差,显然我们更关心的是测试误差——训练总能训练的很好,让损失函数期望最小,然而测试集则不一定这样。一般说来,测试误差>训练误差。

过拟合:选择一个很复杂的f,使得训练误差很小,而实际的测试误差不一定小。最极端的就是刚才说的,把训练集的点一个个依次连起来...训练误差肯定是0是不是?

我们关心的自然是怎么降低测试误差。显然这东西会跟训练误差有关,但是它还跟f的复杂度有关。最最棘手的就是,f的复杂度是一个难以衡量的问题。早期的研究有用自由度来衡量这个复杂度的,但是也不是那么的靠谱...后面的有人鼓捣出来PAC(使得近似正确的概率最大——吴老师原话),还有一个VC来衡量复杂度——但几乎实践中无法计算,没几个计算出来的。嗯,水很深哇。

Categories
事儿关经济

R并行做大数据时间序列分析与bootstrap

好久没写关于经济学的文章了...今天看到两个搞matching的人拿到诺奖,瞬间想起当年和一个学心理学出身的童鞋一起搞的考虑到心理学因素的matching game...可惜最后没有时间完善,就放在那里当雏形了。我们的idea应该还是蛮有新意的呢~matching需要设计机制,然后用博弈来解,哎,很好玩的...

很多人都知道我是不搞时间序列分析的,尤其不喜欢基于时间序列的因果推断(格兰杰因果检验几乎是被我打入黑名单的一个词)。但这次为什么专门写这么一篇blog post呢?其实,我不反对时间序列作预测嘛~而google这篇paper,目的在于预测,又是latex排版的(搞不好还有sweave或者knitr的功劳),读起来赏心悦目的多。

这篇paper题目是:

Large-Scale Parallel Statistical Forecasting Computations in R

地址见:http://research.google.com/pubs/pub37483.html

亮点自然是:大数据计算、map reduce、时间序列分析、bootstrap (所以说google是一家让人尊敬的公司,http://t.cn/zlbAYJY这里总结了他将学术成果悄无声息的服务于大众的案例)。虽说大半夜的,但看到这个东西,再也睡不着了,索性写完一吐为快。(那次沙龙还说到来着,看吧,google早把这些好玩的东西都搞定了,只是不公开拿出来给大家用罢了~)

1. 并行算法

并行算法这里,主要是map reduce。他们的任务主要有:

  • Facilitate parallelism of computations on up to thousands of machines without access to shared NFS filesystems(上千个节点的并行计算,无共享的NFS文件系统).
  • Make distribution of code and required resources as seamless as possible for analysts to minimize code modifications required to enable parallelism.(无缝衔接各环节,减少分析师写并行算法工作量)
  • No setup or pre-installation of R or specific libraries should be required on the machines in the cluster. A virtual machine for the workers should be created dynamically based on the global environment and available libraries of the caller(节点上无需事先安装R,虚拟机会自动按需构建).
  • Return results of parallel computations in list form directly back to the calling interactive session, as with lapply in R.(lapply函数直接返回并行结果)
  • Allow the parallel functions to be used recursively, so that MapReduce workers can in turn spawn additional MapReduces.(并行函数可以循环调用)

系统构架如下:

2013-12-09 16_48_39-37483.pdf - Adobe Reader

然后若干技术细节还包括,搞定R函数复制和计算的环境并行同步,搞定data.frame和list存储格式与在map函数中直接调用。搞定后,基本底层就搭建好了,剩下的就是调用R了。

2.时间序列预测

最典型的就是google trend的预测了...

2013-12-09 16_49_18-37483.pdf - Adobe Reader

这里他们直接用R包googleparallelism,然后希望用一些时序模型都尝试,做预测,然后取他们的均值(剔除上下总计20%)作为估计值以减少误差。示意图如下:

2013-12-09 16_49_35-37483.pdf - Adobe Reader
我只能说,果然是做机器学习的人啊,和random forest思路一致,弱的分类器结合起来,可能有意想不到的结果。同样的,每个模型都是多少有效的话,平均一下就更稳健啦,尤其是在大数据支撑下...

这样的平均之后已经无法直接推导方差和置信区间,所以他们采取了更依赖机器计算的bootstrap方法,直接强行算出来置信区间...喵的,我只能说谁让当年高斯那群天才整出来大数定律和中心极限定理呢?推不出来估量量方差不要紧嘛,直接重抽样模拟就好了...汗。

3.训练集

果然是做机器学习的人,接下来的思路就是直接一期期训练模拟呗。这个没啥说的了,见下图。

2013-12-09 16_49_51-37483.pdf - Adobe Reader

模拟出来的结果示意图:

2013-12-09 16_50_05-37483.pdf - Adobe Reader

至此,整个问题解决完毕。细节还请大家直接去看原文paper。我的几点感触吧:

  • 1. 机器学习之所以在业界这么受欢迎,主要是其确实能够解决问题。迅速、有效,这个是其他方法比不上的。
  • 2. 大数据、大规模计算,使得一些很简单的idea借助模拟和重抽样方法,大放异彩。
  • 3. 预测,有时候不比因果推断次要。
  • 4. 传统模型,需要适应大数据。
  • 5. 说到底,理论体系还是有待完善的。希望这类方法是下一个微积分,可以先用,然后慢慢补充完相应理论体系。这样,我们才知道什么时候,需要勒贝格测度来取代原有牛顿积分。

总之,虽然无奈,但是有用之物必有有用的道理。期待对理论研究的冲击和激发。

 

Categories
读书有感

≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(一)

前两天微博上转出来的,复旦计算机学院的吴立德吴老师在开?统计学习精要(The Elements of Statistical Learning)?这门课,还在张江...大牛的课怎能错过,果断请假去蹭课...为了减轻心理压力,还拉了一帮同事一起去听,eBay浩浩荡荡的十几人杀过去好不壮观!总感觉我们的人有超过复旦本身学生的阵势,五六十人的教室坐的满满当当,壮观啊。

这本书正好前阵子一直在看,所以才会屁颠屁颠的跑过去听。确实是一本深入浅出讲data mining models的好书。作者网站上提供免费的电子版下载,爽!http://www-stat.stanford.edu/~tibs/ElemStatLearn/

从这周开始,如无意外我会每周更新课堂笔记。另一方面,也会加上自己的一些理解和实际工作中的感悟。此外,对于data mining感兴趣的,也可以去coursera听课~貌似这学期开的machine learning评价不错。我只在coursera上从众选了一门 「Model Thinking」,相对来说比较简单,但是相当的优雅!若有时间会再写写这门课的上课感受。笔记我会尽量用全部中文,但只是尽量...

------------课堂笔记开始--------

第一次上课,主要是导论,介绍这个领域的关注兴趣以及后续课程安排。对应本书的第一章。

1. 统计学习是?从数据中学习知识。简单地说,我们有一个想预测的结果(outcome),记为Y,可能是离散的也可能是连续的。同时,还有一些观察到的特征(feature),记为X,X既可能是一维的也可能是多维的。对于每一个观测个体,我们都会得到一个行向量,对应它的p个特征的观测值,以及一个观测到的结果值。如果总共有N个个体,那么我们对于每个个体都会得到这些值,则有为观测结果的列向量以及X (n*p)矩阵。这样的数据称之为训练数据集(training set)。这里更多是约定一些notation。

2. 统计学习分类?一般说来,我们有个观测到的结果Y,然后找到一个适合的模型根据X预测Y,这样的称之为有监督的学习(supervised learning)。而有些时候,Y是无法观测到的,那么只是通过X来学习,称之为无监督的学习(unsupervised learning)。这本书主要侧重有监督的学习。

3. 回归和分类器。这个主要和Y有关。如果Y为离散,比如红黄蓝不同颜色,则称之为分类器(学习模型);反之,若Y为连续,比如身高,则称之为回归(学习模型)。这里更多只是称谓上的区别。

4. 统计学习的任务?预测。通过什么来预测?学习模型(learning models)。按照什么来学习?需要一定的准则,比如最小均方误差MSE,适用于分类器的0-1准则等。基于这些准则、优化过的实现方法称之为算法。

5. 统计学习举例?

分类器:依据邮件发信人、内容、标题等判断是否为垃圾邮件;

回归:前列腺特异抗原(PSA)水平与癌症等因素的关系;

图形识别:手写字母的识别;

聚类:根据DNA序列判断样本的相似性,如亲子鉴定。

6. 课程安排顺序?

第二章,是对于有监督的学习模型的概览。

第三章和第四章将讨论线性回归模型和线性分类器。

第五章将讨论广义线性模型(GLM)。

第六章涉及kernel方法和局部回归。

第七章是模型评价与选择。

第八章是测侧重算法,比如最大似然估计,bootstrap等。本学期预计讲到这里。所以后面的我就暂时不列出了。

目测第二节开始将变得越来越难,前阵子自学第二章痛苦不已啊...一个LASSO就折磨了我好久。当时的读书笔记见:降维模型若干感悟

--------10.15补充---------

上周写的时候只是凭着记忆,笔记没在身边。今天重新翻了翻当时记下的课堂笔记,再补充一些吧。

第九章是可加模型,即

第十章是boosting模型

第十一章讨论神经网络

第十二章讨论支持向量机 (Support Vector Machine)

第十三章设计原型方法(Prototype)

第十四章从有监督的学习转到无监督的学习(即有X有Y->有X无Y)

第十五章讨论随机森林模型(Random Forest)

第十六章是集群学习

第十七章结构图模型

第十八章高维问题(我最近一直念叨的curse of dimensionality...今年搞笑诺贝尔奖也多少与此有关,见 http://www.guokr.com/article/344117/,还有一篇相关的paper

ps. 吴老师对于随机森林等等模型的评论也挺有意思的,大致是,大家都没搞清随机森林为什么效果这么好...而且这一类模型都是computatoinal intensive的,即有一个非常简单的idea然后借助大量的计算来实现。此外,这类方法更多有“猜”的感觉,无法知道来龙去脉,在现实中显得不那么intuitive...(不像econometrics那般致力于causality呢)。

Categories
Wordpress 网站建设

病毒凶残 -_-||

今天终于把所有的sites都搬到新的服务器上去了...各种凶残的病毒残留痕迹,防不胜防...索性一切wordpress的插件什么的都是重新安装的,哎。

祈求一下,让我清净两天吧。最近事事儿已经够多的了,不要再来了。