增强机器学习模型性能——深入理解随机森林(RandomForest)和 Dropout的原理

要想了解如何增强机器学习模型性能,我们需要知道如何降低模型的误差。所以首先我们必须明白模型误差是由偏差(Bias)和方差(Variance)组成的。偏差是指样本预测值的平均值样本真实值的差,而方差是指样本预测值偏离样本预测值平均值的程度
其中

  • 偏差(Bias)可以描述模型的准确性
  • 而方差(Variance)可以描述模型的稳定性,一定程度上反映了模型泛化能力

所以增强机器学习模型性能就意味着需要提高模型的准确性和稳定性。

我们来看看下图,直观的感受一下偏差(Bias)和方差(Variance)对模型的影响,你可以将其想象一个同学的一学期的考试情况,越靠红心代表考试得分越高:

  • 右下角同学——学渣,每次考试分数不高,而且成绩还不稳定,属于高偏差高方差的模型。
  • 左下角同学——学庸,成绩很稳定,可是每次考试得分都不高,属于方差较小可是偏差较大的模型。
  • 右上角的同学——学聪,成绩还不错,可是忽高忽低,不稳定,属于偏差较小可是方差较大的模型。
  • 左上角的同学——学霸,成键很棒,而且极其稳定,属于偏差较小,方差也小的模型。
偏差和方差

地球人都知道哪种学生最受老师,当然是——左上角的同学,成键很棒,而且极其稳定,对应于偏差较小,方差也小的模型。可到底如何训练我们才能得到这样一个偏差较小,方差也小的学霸模型呢?
之前的文章中笔者将集成学习中Gradient Boosting和深度学习Residual Block联系起来,说明了拟合残差的可以降低模型的偏差(Bias)。今天笔者来尝试将集成学习中Bagging深度学习中Dropout联系起来去说明如何降低模型的方差(Variance)

Bagging(short for bootstrap aggregating)

Bootstrap 是统计学中一种采样那个方式,可以指任何一种有放回的均匀抽样,也就是说,每当选中一个样本,它等可能地被再次选中并被再次添加到训练集中。而在机器学习中Bagging的做法分为简单两部:

  • 从样本中自助采样一批训练数据训练一个基学习器。
  • 最后通过这些基学习器投票产生模型最后的输出。

Bagging的做法如下图所示,最终这些弱的基学习器集成成一个强的学习器。这里有个关键的地方需要注意,就是要每个基学习器差异性越大越好。不同的基学习器擅长不同的事情,这样他们联合起来的威力才是最大的。

Bagging

在sklearn中可以轻松的调用BaggingClassifier这个API,下方代码采用决策树作为基学习器,同时定义了基学习器的个数为500。

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
bag_clf = BaggingClassifier(
DecisionTreeClassifier(), n_estimators=500,
max_samples=100, bootstrap=True, n_jobs=-1
)
bag_clf.fit(X_train, y_train)
y_pred = bag_clf.predict(X_test)

而上方代码,就等价于下面通过调用RandomForestClassifierAPI构建的随机森林,n_estimators=500表示这个集成模型有500棵决策树。其中随机森林为了增加每棵树的差异性,不仅每颗树训练数据不同,而且还增加了特征的差异性。每颗树选择特征的方法是:随机选择一个特征子集,这个子集可以是少部分特征的集合,也可以由特征组合而来。

from sklearn.ensemble import RandomForestClassifier
rnd_clf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16, n_jobs=-1)
rnd_clf.fit(X_train, y_train)
y_pred_rf = rnd_clf.predict(X_test)

Dropout

再来看看深度学习中经常采用的防止过拟合的小技巧Dropout。Dropout的细节是在深度神经网络模型做训练时,让网络中某些神经元随机失活——也就是不参与训练。如下图所示,换个角度理解一下这个操作背后的含义:Dropout使得每批训练数据进入神经网络时,神经网络的构型都不同,即每批训练数据训练的网络结构都不同。而做预测Dropout是关闭的状态,代表着做预测时是所有训练时结构不同的神经网络一起做的最后的预测。整个过程就是多个不同神经网络最后投票做决定给出预测值。

Dropout

下方是keras实现的一个增加Dropout层的神经网络模型。

model = Sequential()
###加dropout
model.add(Dropout(0.2, input_shape=(60,)))
model.add(Dense(60,activation='relu'))
model.add(Dense(1,activation='sigmoid'))
sgd = SGD(lr=0.1, momentum=0.9, decay=0.0, nesterov=False)
model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy'])

而且由于训练数据和网络结构的不同,导致每个网络——也就是基学习器的差异性也很多样,所以最终使得训练出来的模型稳定性较强,有很好的抗过拟合效果。

结语

至此,我们了解到通过多个差异性的基学习器以投票的方式集成的组合模型能够降低模型的方差。在加上之前我们学习过通过boosting集成模型可以降低模型的偏差。将二者结合,应该就可以训练一个上文提到偏差较小,方差也小的学霸模型了。
参考:
Dropout: A Simple Way to Prevent Neural Networks from Overfitting
https://mp.weixin.qq.com/s/-T4bAGR6acN1uPnmds1AlA

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容