共轭梯度法计算回归

共轭梯度示意图(图片来源:维基百科)

轮回眼 共轭梯度示意图(图片来源:维基百科

引子

之所以写这篇文章,是因为前几天统计之都的微信群里有同学提了一个问题,想要对一个很大的数据集做回归。然后大家纷纷给出了自己的建议,而我觉得共轭梯度算回归的方法跟这个背景比较契合,所以就正好写成一篇小文,与大家分享一下。

说到算回归,或许大家都会觉得这个问题太过简单了,如果用 $X$ 表示自变量矩阵,$y$ 表示因变量向量,那么回归系数的最小二乘解就是 $\hat{\beta}=(X'X)^{-1}X'y$。(本文完)

哎等等,别真走啊,我们的主角共轭梯度还没出场呢。前面的这个算系数的公式确实非常简洁、优雅、纯天然、不做作,但要往里面深究的话,还是有很多问题值得挖掘的。

最简单暴力的方法,就是从左向右,依次计算矩阵乘法,矩阵求逆,又一个矩阵乘法,最后是矩阵和向量的乘法。如果你就是这么算的,那么可以先默默地去面壁两分钟了。

更合理的方法,要么是对 $X'X$ 进行 Cholesky 分解,要么是对 $X$ 进行 QR 分解,它们基本上是现在算回归的软件中最常见的方法。关于暴力方法和矩阵分解方法的介绍和对比,可以参见这个B站上的视频。(什么?你问我这么严肃的话题为什么要放B站上?因为大部分时间都是在吐槽啊)

好,刚才去面壁的同学现在应该已经回来了,我们继续。前面这些通过矩阵运算求回归系数的方法,我们可以统称为直接法。叫这个名字,是因为它们都可以在确定数目的步骤内得到最终的结果。而与之相对的,则叫做迭代法,意思是通过不断更新已经得到的结果,来逐渐逼近真实的取值。打个比方,你想要知道一瓶82年的拉菲值多少钱,直接法就是去做调研,原料值多少,品牌值多少,加工费多少,运输费多少……然后加总起来得到最终的定价;而迭代法就是去问酒庄老板,你先随便蒙一个数,然后老板告诉你高了还是低了,反复循环,总能猜个八九不离十。

说到这里,你自然要问了,既然算回归的软件大都是用直接法,为什么还要考虑迭代法?莫非直接法有什么不好的地方?这就说到问题的点子上了。

阅读全文

标题党统计学

如果你是被这个标题骗进来的,那么说明标题党的存在的确是有原因的。 在网络高度发达(以及“大数据”泛滥)的今天,数据动不动就是以 GB 和 TB 的级别存储,然而相比之下,人类接受信息的速度却慢得可怕(参见大刘《乡村教师》)。 试想一下,你一分钟能阅读多少文字?一千?五千?总之是在 KB 的量级。 所以可以说,人们对文字的“下载速度”基本上就是 1~10KB/min。如果拿这个速度去上网的话你还能忍?

阅读全文

数据江湖,回归5式

今天要跟大家分享的主题叫做:数据江湖,回归5式!

如今啊,大数据时代,群雄割据,天下大乱。各位童鞋,闯荡江湖,凶险难测。没一些必备的看家的本领,就想从数据出发,直达价值的彼岸,恐怕很难。

为此呢,熊大教大家几招防身绝技,叫做:回归5式!简单的说,就是5种最常见的回归模型。这5个招式,看似简单,却是熊大行走江湖的看家本领。回归5式,就如同少林长拳,看似平淡无奇,但是如果辅以深厚的内力,就能威力无比。

所以呀,今天除了要教给大家这回归5式以外,熊大还要跟大家说道说道这内力的修为。没有深厚的内力修为,任何绝妙的功夫,都是花拳绣腿。

好了,闲话少说,先从回归5式开始。

阅读全文

极简 Spark 入门笔记——安装和第一个回归程序

现在的各种数据处理技术更新换代太快,新的名词和工具层出不穷,像是 Hadoop 和 Spark 这些,最近几年着实火了一把。事实上听说 Spark 也有一段时间了,但一直是只闻其名不见其实,今天就来简单记录一下初学 Spark 的若干点滴。

Spark 是什么

按照 Spark 官方的说法,Spark 是一个快速的集群运算平台,以及一系列处理大型数据集的工具包。用通俗的话说,Spark 与 R 一样是一套用于数据处理的软件和平台,但它最显著的特点就是处理大型数据(我就是不说大数据 ( ̄^ ̄))的能力。

极简安装

Spark 本身面向的是大规模的分布式计算,但对学习和测试来说,利用单机的多核 CPU 就已经足够了,所以作为入门,我并没有打算去涉及多台计算机相连的情形。在这个基础上,第一件出乎我意料的事情就是,Spark 的安装和配置其实可以是异常简单的。

在网上出现的各种资料中,Spark 经常与 Hadoop 和 Scala 这两个名词一起出现。前者也是一个大型分布式计算的框架,诞生得比 Spark 更早;后者是 Spark 主要使用的一种编程语言。这就给不明真相的群众造成了一种印象,好像要使用 Spark 的话就得先安装配置好 Hadoop 和 Scala,而要安装它们又得有更多的软件依赖。但实际上,要在单机上使用 Spark,真正需要的只有下面几样:

  1. 一台金光闪闪的电脑
  2. 在上面这台电脑里面装一个金光闪闪的 Linux 操作系统
  3. 在上面这个系统里面装一个金光闪闪的 Java 开发环境(JDK)

这三样可以说是大部分计算环境的标配,如果系统还没有安装 JDK,那么一般都可以用系统的包管理工具,比如 Fedora 下是

sudo yum install java-1.8.0-openjdk

Ubuntu 下是

sudo apt-get install openjdk-7-jdk

有了上面的开发环境,安装 Spark 就非常容易了,基本上只要下载预编译包,解压缩,然后添加系统路径即可。首先,到 https://spark.apache.org/downloads.html 选择最新的 Spark 版本和 Hadoop 版本(实际上我们暂时用不上 Hadoop,所以任何版本都行),然后下载压缩包。

阅读全文

因果推断简介之七:Lord’s Paradox

在充满随机性的统计世界中,悖论无处不在。这一节介绍一个很有名,但是在中文统计教科书中几乎从未介绍过的悖论。这个悖论是 Educational Testing Service (ETS) 的统计学家 Frederic Lord 于 1967 年提出来的;最终由同在 ETS 工作的另外两位统计学家 Paul Holland 和 Donald Rubin 于 1982 年圆满地找出了这个悖论的根源。这部分先介绍这个悖论,再介绍 Holland 和 Rubin 的解释,最后是一些结论。

一 Lord’s Paradox

考虑下面一个简单例子,具体的数字是伪造的。某个学校想研究食堂对于学生体重是否有差异性的影响,尤其关心食堂对于男女学生体重影响是否相同。于是统计学家们收集了如下的数据:学生的性别$G$;学生在 1963 年 6 月入学时候的体重$X$;学生在1964年6月放暑假时候的体重$Y$

第一个统计学家,采取了一种很简单的方法。如图所示,横轴表示1963年6月入学前的体重$X$,纵轴表示1964年6月前放假的体重$Y$。个体上来看,男女入学前和入学后一年体重都会有些变化,男女学生体重的散点图分别用绿色和红色标出。从男女学生生平均体重来看,男生入学前后一年平均体重均是150磅(图中右上角的黑点),女生入学前后一年平均体重均为130磅(图中左下角的黑点)。图中的虚线是对角线 $Y=X$,两个黑点均位于对角线上。因此,第一个统计学家的结论是食堂对于男女学生体重都没有影响,因此对男女学生体重的作用相同。

阅读全文

R 中大型数据集的回归

众所周知,R 是一个依赖于内存的软件,就是说一般情况下,数据集都会被整个地复制到内存之中再被处理。对于小型或者中型的数据集,这样处理当然没有什么问题。但是对于大型的数据集,例如网上抓取的金融类型时间序列数据或者一些日志数据,这样做就有很多因为内存不足导致的问题了。

阅读全文

分组最小角回归算法(group LARS)

继续前两篇博文中对于最小角回归(LARS)和lasso的介绍。在这篇文章中,我打算介绍一下分组最小角回归算法(Group LARS)。本文的主要观点均来自Ming Yuan和Yi Lin二人2006合作发表在JRSSB上的论文Model selection and estimation in regression with grouped variables.

阅读全文

我的一些统计方法观(写给在统计学院学习的学弟学妹之三)

记得高中很讨厌政治课,但是有几个词烙在脑子里,想忘都忘不掉,比如“世界观”和“方法论”,当时那位老爷爷整天给我们灌输这些玩意儿,搞得我现在对这些词汇仍然如鬼神般敬而远之。这次我要写的是关于统计方法的一些思考(主要是思路),但又不太多涉及方法本身的推导证明,因此只好称之为“方法观”。

现在每天感慨统计领域太宽,模型太多,方法太杂,让人把握不住方向。不过上次高校研究生统计论坛我仍然不知天高地厚地选了一个讲述统计思想的题目,其原因正是觉得方法太杂,应该理出一些头绪来;当然我所理的头绪也仅仅是很局部(local)的,管中窥豹而已。下面我先举几个例子说明一些统计方法的发展思路,这些也是我在上次论坛上发言的部分内容:

阅读全文

用局部加权回归散点平滑法观察二维变量之间的关系

局部加权回归散点平滑法

二维变量之间的关系研究是很多统计方法的基础,例如回归分析通常会从一元回归讲起,然后再扩展到多元情况。局部加权回归散点平滑法(locally weighted scatterplot smoothing,LOWESS或LOESS)是查看二维变量之间关系的一种有力工具。

LOWESS主要思想是取一定比例的局部数据,在这部分子集中拟合多项式回归曲线,这样我们便可以观察到数据在局部展现出来的规律和趋势;而通常的回归分析往往是根据全体数据建模,这样可以描述整体趋势,但现实生活中规律不总是(或者很少是)教科书上告诉我们的一条直线。我们将局部范围从左往右依次推进,最终一条连续的曲线就被计算出来了。显然,曲线的光滑程度与我们选取数据比例有关:比例越少,拟合越不光滑(因为过于看重局部性质),反之越光滑。

阅读全文