|
- .. _ensemble_cn:
-
- Ensemble
- ========
-
- 我们现在支持 voting 和 stacking 方法
-
- Voting
- ------
-
- Voter本质上构建了base learner预测的加权和。给定一个评估指标,Voter以某种方式确定base learner的权重,使得验证集指标分数最大化。
-
- 我们采用Rich Caruana的权重确定方法。该方法首先通过贪婪搜索找到权重相等的(可能是冗余的)base learner集合,然后通过集合中出现的次数指定Voter中的权重。
-
- 您可以通过重写 ``_specificy_weights`` 方法来定制自己的权重确定方法。
-
- .. code-block :: python
-
- # 例子: 对所有base learner 使用同样的权重
- class EqualWeightVoting(Voting):
- def _specify_weights(self, predictions, label, feval):
- return np.ones(self.n_models)/self.n_models
- # 对所有base learner 赋予相同的权重
-
- Stacking
- --------
-
- Stacker将Base Learner的预测作为输入来训练元模型,以找到这些base learner的最佳组合。
-
- 目前我们支持广义线性模型(GLM)和梯度推进模型(GBM)作为元模型。
-
- 创建一个新的ensemble
- ----------------------
-
- 您可以通过继承base ensember,重载``fit``和``ensemble``方法来创建自己的ensember。
-
- .. code-block :: python
-
- # 例子 : 使用当前可用的最佳模型
- from autogl.module.ensemble.base import BaseEnsembler
- import numpy as np
- class BestModel(BaseEnsembler):
- def fit(self, predictions, label, identifiers, feval):
- if not isinstance(feval, list):
- feval = [feval]
- scores = np.array([feval[0].evaluate(pred, label) for pred in predictions]) * (1 if feval[0].is_higher_better else -1)
- self.scores = dict(zip(identifiers, scores)) # record validation score of base learners
- ensemble_pred = predictions[np.argmax(scores)]
- return [fx.evaluate(ensemble_pred, label) for fx in feval]
-
- def ensemble(self, predictions, identifiers):
- best_idx = np.argmax([self.scores[model_name] for model_name in identifiers]) # choose the currently best model in the identifiers
- return predictions[best_idx]
|