Python 查看h2o堆叠集成/automl的基础模型重要性/系数

Python 查看h2o堆叠集成/automl的基础模型重要性/系数,python,h2o,Python,H2o,我如何看待h2o中叠加系综中各种基本模型的系数或重要性?例如,如果我有一个GBM、GLM和RF,我如何知道它们在堆叠中的重要性?这可能吗 例如,使用python代码。。。这里 H2O中的堆叠集成算法使用GLM作为metalearning算法,因此您可以将GLM metalearner的系数大小解释为每个基础学习者在集成中进行预测的“重要性” 在堆叠集成文档中的简单示例中,我们训练了一个2模型(GBM,RF)集成。以下是如何在Python中检查metalearner GLM的系数: import

我如何看待h2o中叠加系综中各种基本模型的系数或重要性?例如,如果我有一个GBM、GLM和RF,我如何知道它们在堆叠中的重要性?这可能吗

例如,使用python代码。。。这里


H2O中的堆叠集成算法使用GLM作为metalearning算法,因此您可以将GLM metalearner的系数大小解释为每个基础学习者在集成中进行预测的“重要性”

在堆叠集成文档中的简单示例中,我们训练了一个2模型(GBM,RF)集成。以下是如何在Python中检查metalearner GLM的系数:

import h2o
from h2o.estimators.random_forest import H2ORandomForestEstimator
from h2o.estimators.gbm import H2OGradientBoostingEstimator
from h2o.estimators.stackedensemble import H2OStackedEnsembleEstimator
h2o.init()

# Import a sample binary outcome train/test set into H2O
train = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv")
test = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_test_5k.csv")

# Identify predictors and response
x = train.columns
y = "response"
x.remove(y)

# For binary classification, response should be a factor
train[y] = train[y].asfactor()
test[y] = test[y].asfactor()

# Number of CV folds (to generate level-one data for stacking)
nfolds = 5

# Generate a 2-model ensemble (GBM + RF)

# Train and cross-validate a GBM
my_gbm = H2OGradientBoostingEstimator(distribution="bernoulli",
                                      ntrees=10,
                                      max_depth=3,
                                      min_rows=2,
                                      learn_rate=0.2,
                                      nfolds=nfolds,
                                      fold_assignment="Modulo",
                                      keep_cross_validation_predictions=True,
                                      seed=1)
my_gbm.train(x=x, y=y, training_frame=train)

# Train and cross-validate a RF
my_rf = H2ORandomForestEstimator(ntrees=50,
                                 nfolds=nfolds,
                                 fold_assignment="Modulo",
                                 keep_cross_validation_predictions=True,
                                 seed=1)
my_rf.train(x=x, y=y, training_frame=train)


# Train a stacked ensemble using the GBM and RF above
ensemble = H2OStackedEnsembleEstimator(base_models=[my_gbm.model_id, my_rf.model_id])
ensemble.train(x=x, y=y, training_frame=train)

# Grab the metalearner GLM fit & print normalized coefficients
metafit = h2o.get_model(ensemble.metalearner()['name'])
metafit.coef_norm()
这将打印以下内容:

{u'DRF_model_python_1502159734743_250': 0.6967886117663271,
 u'GBM_model_python_1502159734743_1': 0.48518914691349374,
 u'Intercept': 0.1466358030144971} 
因此,在这种情况下,随机森林的预测对集合预测的贡献大于GBM

如果在测试集上评估基本模型,可以看到随机林的性能略好于GBM,因此合奏会比GBM更喜欢RF预测(尽管测试集性能和metalearner变量重要性之间并不总是存在直接的1-1对应关系,如下图所示)

有计划使用户可以在将来使用H2O的任何监督ML算法作为metalearner,在这种情况下,您可以查看算法的可变重要性以获得相同的信息,因为所有H2O算法都计算可变重要性

my_gbm.model_performance(test).auc()  # 0.7522498803447679
my_rf.model_performance(test).auc() # 0.7698039263004212