机器学习与数据挖掘"人工智障 机器瞎学 数据掩埋" 入门笔记算法杂货铺

高级集成学习技巧

2018-10-17  本文已影响2人  HeoLis

Examined ensemble methods

Averaging ensemble methods

举个例子,假设我们有一个名为age的变量,就像年龄一样,我们试着预测它。我们有两个模型:

那么如果我们试图结合它们将会发生什么呢?

Averaging(or blending)

R^2上升到0.95,较之前有所改善。但该模型并没有比单模型做的好的地方更好,尽管如此,它平均表现更好。也许可能会有更好的组合呢?来试试加权平均

Weighted averaging

看起来没有之前的好

Conditional averaging

理想情况下,我们希望得到类似的结果

Bagging

Why Bagging

建模中有两个主要误差来源

通过略微不同的模型,确保预测不会有读取非常高的方差。这通常使它更具普遍性。

Parameters that control bagging?

Examples of bagging

bagging_code.png

Boosting

Boosting是对每个模型构建的模型进行加权平均的一种形式,顺序地考虑以前的模型性能。

Weight based boosting

weight_based.png

假设我们有一个表格数据集,有四个特征。 我们称它们为x0,x1,x2和x3,我们希望使用这些功能来预测目标变量y。
我们将预测值称为pred,这些预测有一定的误差。我们可以计算这些绝对误差,|y - pred|。我们可以基于此生成一个新列或向量,在这里我们创建一个权重列,使用1加上绝对误差。当然有不同的方法来计算这个权重,现在我们只是以此为例。

所有接下来要做的是用这些特征去拟合新的模型,但每次也要增加这个权重列。这就是按顺序添加模型的方法。

Weight based boosting parameters

Residual based boosting [&]

我们使用同样的数据集做相同的事。预测出pred后


residual_pred.png

接下来会计算误差


residual_error.png

将error作为新的y得到新的预测new_pred


residual_new_pred.png

以Rownum=1为例:

最终预测=0.75 + 0.20 = 0.95更接近于1

这种方法很有效,可以很好的减小误差。

Residual based boosting parameters

Residual based favourite implementations

Stacking

Methodology

具体步骤

假设有A,B,C三个数据集,其中A,B的目标变量y已知。


stacking_data.png

然后

Stacking example

from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression
import numpy as np
from sklearn.model_selection import train_test_split
train = '' # your training set
y = ''     # your target variable
# split train data in 2 part, training and valdiation.
training, valid, ytraining, yvalid = train_test_split(train, y, test_size=0.5)
# specify models
model1 = RandomForestRegressor()
model2 = LinearRegression()
#fit models
model1.fit(training, ytraining)
model2.fit(trainging, ytraining)
# make predictions for validation
preds1 = model1.predict(valid)
preds2 = model2.predict(valid)
# make predictions for test data
test_preds1 = model1.predict(test)
test_preds2 = model2.predict(test)
# From a new dataset for valid and test via stacking the predictions
stacked_predictions = np.colum_stack((preds1, preds2))
stacked_test_predictions = np.column_stack((test_preds1, test_preds2))
# specify meta model
meta_model = LinearRegression()
meta_model.fit(stacked_predictions, yvalid)
# make predictions on the stacked predictions of the test data
final_predictions = meta_model.predict(stacked_test_predictions)

Stacking(past) example

stacking_past.png

可以看到,它与我们使用Conditional averaging的结果非常近似。只是在50附件做的不够好,这是有道理的,因为模型没有见到目标变量,无法准确识别出50这个缺口。所以它只是尝试根据模型的输入来确定。

Things to be mindful of

StackNet

https://github.com/kaz-Anova/StackNet

Ensembling Tips and Tricks

1^{st} level tips

2^{st} level tips

Additional materials

上一篇 下一篇

猜你喜欢

热点阅读