Categories
读书有感

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

梯度树提升算法(GTBA, gradient tree boosting algorithm)

继续boosting类算法哎。小小预告一下,下节课会直接跳到随机森林,老师貌似是想把各种分类器都一下子讲到,然后有点前后照应的比较~真有意思,若是以前扔给我这种问题我肯定run一个logit regression就不管了,现在倒是有各种线性的、广义线性的、非线性的模型可以试着玩了,爽哎~

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

1. 自适应基函数模型

小小的复习一下上节课那个框架。

1. 数据。

2. 模型。 为基函数模型,其中成为基函数集合。为参数。

3. 损失函数(准则)。 为损失函数,然后就转为一个优化问题:

4. 算法。 前向分步算法。

  • 初始化:
  • 迭代:For m=1 to M,
  • 输出

在此框架之下,除了上节课的Adaboost之外,还可以套用多种其他的基函数,然后1)定义损失函数 2)给出迭代那一步的优化算法,就可以实现一种boost提升算法了。

2. 应用回归问题

先采用均方误差的损失函数,定义,这样就可以得到

然后定义:

。这里之后用回归树来求的话,就是梯度回归树算法。

梯度回归树提升算法

  • 初始化:
  • 迭代:For m=1 to M,计算。由用回归树求得.
  • 输出

3. GTBA,梯度树提升算法

先吹捧一下:这个算法就是此书作者本人开发的,然后已经搞出来了软件包,可以做回归也可以做分类,貌似效果还胜过随机森林(当然是作者自己给出的那些例子...)。

损失函数为可微的。

我们的优化目标是,也就是说实际上我们不是直接对进行优化,而是仅仅在所有观测的数据点上优化,所以仅跟在这些观测点上的值有关。感觉这里就是说,我们使用有限的观测到的信息来推断一个连续的函数,然后类推并用于其他未观测到的点。

定义:

,这样这个问题就从一个直接优化的泛函问题转化为一个优化多元函数的问题...而对于一个多元函数,我们可以直接用梯度下降法。定义梯度为:

,这样。类似的,我们可以定义,其中。累加起来,就是

,这里可以是常量也可以随着改变。

定义完梯度下降之后,就是GTBA算法了。

  • 初始化。
  • 迭代:For m=1 to M,计算,然后由用回归树求得
  • 输出

一些梳理

1. 参数。这里显然有如下参数需要设定:

  • M:迭代次数。这是这个算法最主要的参数,需要用Cross-validation来算。
  • J:树的大小。建议4-8,默认为6。
  • :收缩系数。这里可以加上这个参数,决定收缩的速度,0-1之间。
  • :次采样率,0-1直接,默认0.5。用于做subsampling。

2. 特征变量评价

这个算法的一大优势就是可以给出各个自变量的评价。比如的时候我们可能面临特征变量选择问题。

用t表示树中的节点,表示t节点所用的变量,表示t节点产生的均方误差的减小值。之后定义:

,可用这个值来刻画变量的重要性,从而进行特征评价。

3. 通用工具

该算法对于数据无特殊要求,有一批都可以扔进去试试,故可以作为其他算法的benchmark。

此外,从贝叶斯分类器的角度,我们要找的是,这样除了原有可以观测到的之上,还可以衍生出一个向量,即,第k个位置为1如果观测到的对应第k类。一下子就可以扩展整个数据集,也可以进一步对每类都赋一个概率,不单单是0-1这样。

Categories
读书有感

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

开春,复课。

一句无关的话...今天打开Google Reader看到7月份要关的提示,无限悲伤。看着落园若干RSS源里面累计800+的读者,只能说句bless...2008年开始使用,到现在,伴我度过了多少读书时光呀。不过确实也衰落了,高峰的时候一个RSS源就有600+读者,现在也只剩一半了。写博客,越来越像一件出力不讨好的事情了。

--------正文开始---------

提升与梯度树

1. Boost(AdaBoost)

这里讲的AdaBoost是仅针对二类分类器的提升。大致的思想就是,给我一个弱分类器,还你一个强分类器。听起来蛮神奇的对不对?

先说算法实现。

第一步:初始化。,权重初始值

第二步:迭代。

for m = 1 to M

  • 根据已有算法(即弱分类器)和{}得到一个分类器.
  • 计算误差:,这里我们把权重进行归一化。
  • 计算权重:
  • 修改样本权重

也就是说,我们不断的生成新的权重,当分类器分错的时候更改权重。

第三步:输出。最终的分类器为前面的加权。

这样就实现了从一个弱分类器改善到一个强分类器。这里弱分类器是指误差比随机猜的1/2少一点。

另注:在修改权重那一步的时候,也可以定义,然后,这样在最后的时候也可以改成。总之这里的直觉是,如果分对了,那么权重下降;反之,分错的时候这些样本的权重上升。最后take average就可以了。

2. 自适应基函数模型、前向分布算法

之所以上面又引入,便是为了更好地理解这一类模型:自适应基函数模型。

1. 我们称 为基函数模型,其中成为基函数基。注意这里和GLM有很大的不同,广义线性模型后面的为确定的。

2. 前向分步算法。

数据集记作。定义一个损失函数,比如常见的均方误差,

,或者0-1准则。

然后步骤为:

  • 初始化:
  • 迭代:For m=1 to M,
  • 输出

这样我们就把这个最优化问题转变成了M步,每步只做一个参数的最优化(近似方法)。

3. 指数损失函数与AdaBoost

有了这么一个一般性的框架,我们就可以套用具体的形式。

1. 定义指数损失函数:

2. 两类分类、指数损失函数的自适应基函数模型。

前向分布算法:

(i)

定义

这样上式就可以化作

(ii) 固定,优化.

然后最小化,则。假定已被优化,然后继续。

(iii)优化

取一阶条件FOC,则有

这样最后

这样就看出来上面那个AdaBoost里面的是怎么来的了吧?

(iv) 回到AdaBoost

看出来最后的AdaBoost雏形了吧?

Categories
些许欢笑

Les Misérables - dream back to Paris

一句话评价: It made my day.
再罗嗦一句的话:我真的经不起诱惑,朋友一条短信就成全了我这个完美的周末。

看到影片结束,才恍然意识到这是Hugo的著作...我说为什么觉得名字那么似曾相识,又为什么对着这两个法语单词不觉得陌生。当年在巴黎的Panthéon里面,毫无意识的就走过了雨果的墓穴,然后被朋友提醒才恍然间如梦初醒,一路小跑奔回雨果墓棺前,呆呆的愣了好久。

Les Misérables也上映了有一段时间了,但是一直没有特别想着去看。如是没有靠谱朋友提醒,我怕就会错过了吧。还好,运气不错。进入电影院,一开始稍稍有点茫然,后来开始渐渐的喜欢起来音乐剧的唱腔。没有想到这部片子从头到尾都是音乐剧,本以为会偶尔有些间断的来着。对于音乐剧男高音的迷恋来自于前段时间看To Love in Roma的时候,某个男角色洗着澡引吭高歌...那声音的浑厚和穿透力,瞬间打败了银幕前的我。

我承认,没有看过舞台版的Les Misérables是这次看电影的硬伤,一边欣赏音乐一边脑补剧情,这个真心来不及兼容并纳呀。就这样,随着音乐,快乐着你的快乐,悲伤着人们的悲伤。当do you hear the people sing 第二次在那个小孩子口中唱出来的时候,瞬间眼泪就开始打转儿...这不,现在还在听着这首Hoor Je 'T Zingen Op De Straat?(法语版,我只是想体味一下原始的法兰西风味,虽然英语版已经是绝对经典了)在这里试图多多捕捉一点当时的悲伤呢。(p.s. 法语烂到家是硬伤...连蒙带猜才找到这个法语版)

0508937b6cbdaa5a9b7754f8ecae4e05爱死了这个孩子第二次唱响do you hear the people sing的那个时刻

从视觉的角度,好喜欢这部电影里面的特写(虽然有人说是毁誉参半)。我觉得这才是电影特有的冲击力,不同于舞台剧,特有的冲击力。还有那些巴黎城景的速写,一下子好像就回到了那个十九世纪的巴黎。现在越来越遗憾两年前去巴黎的时候对这座城市太过于无知了,现在倒是越来越希望可以重走一遍,拾起一些片段或者回忆。无论悲伤,或是欢喜。那是巴黎。那种向往自由的精神,永远让人震撼。

下次去纽约,或者伦敦,或者巴黎,一点要去歌剧院重温一下这样的味道。

Categories
网络新发现

那些毫无节操的经济学研究(一):JJ尺寸与经济增长?

无聊的时候读几篇paper提提神总是好的...太严肃的看久了,还是找点调节操的吧。

source一般是weibo...神人出没之地呀!

第一篇就是:

Male Organ and Economic Growth: Does Size Matter?Tatu Westling, University of Helsinki and HECER

嗯,人家作者就是扛着卫生经济学(health economics)大旗的啦~所以有这么篇文章不是很正常么?

结果发现,JJ大小和经济发展水平居然是倒U型相关的。嗯...如果想要知道JJ大小到底是遗传基因还是后天营养(经济发展水平较高的国家营养一般会更好)的影响大,是不是可以研究一下发达国家的亚裔移民后代相比于他们父亲的penis size的generation difference呢?

仅供娱乐,认真就不好玩了。

Categories
读书有感

Bootstrap + subsample: simple, efficient, then elegant?

继续昨天。早晨一起来,看到施老师的一句简短评论,瞬间人就清醒了。然后跟做错了事的小孩子似的,惴惴不安的跑到office里面,翻墙,开始下paper。

现在的节奏基本上是白天开会写代码,晚上回家看paper,哎,不看心里总觉得好惶恐。还好中间等车等了蛮久的,顺便就借着六七点昏黄的路灯把这篇不算太长的paper看完了。有趣的是等车的时候碰到一位同事,然后我俩就开始呱唧呱唧的聊起来统计推断了...不知道当时旁边的路人是不是一道黑线,幸好当时把ebay的牌牌藏在了衣服里面...

这篇不算长的paper是:Bootstrapping Big Data,UC Berkeley 计算机系一群人鼓捣出来的。idea很简单(符合第一标准,simple),就是在大数据上(无放回的随机抽样)取一些subsamples,然后在这些subsamples上面做bootstrap,然后把结果取平均数。

这样的好处显而易见,天生的分布式算法,把数据随机分布到各个计算节点就可以了。然后bootstrap也不用占那么大的内存了,空间时间都省掉了,所以符合第二标准:efficient。

最后,就是还是比较effective的,有着良好的渐进收敛性质。和直接的bootstrap相比,它不仅保持渐进一致,而且有着更高的收敛速度,还是天生并行的...过年回济南的时候joke童鞋(高中同学)去火车站接我,然后我们就兴致昂扬的聊起来大数据和算法并行问题了...是不是有点天雷滚滚?哇咔咔,大过年的...好久没见竟然是如斯叙旧,汗。

此外,还可以结合binning的思路做一些weighted calculation,这样又进一步节省了时间。

不知道这样是不是就足够的elegant了...我看了一眼converging rate 还是比较好看的。伪代码思路也是简单得很。还可以用在各种现成的线形非线性、参数非参数模型上,真是瞬间变身并行高富帅。貌似和前段时间看到的rmr2包里面做OLS并行的思路有点像,待我细细研究一下。

algorithm

唯一的concern就是这东西更适合hadoop而不适合teradata,哎。我没法在TD上控制节点的分配,这个比较讨厌。Hadoop可以直接写并行map reduce,就会方便很多了。

 

先看了这一篇简介,后面慢慢地研究一些理论证明什么的,有点too good to believe...还是先找点数据测试玩玩吧^_^
efficiency