2017-08-04 15 views
1

h2oの積み重ねられたアンサンブルでのさまざまなベースモデルの係数または重要性をどのように確認できますか?たとえば、GBM、GLM、RFをお持ちの場合、それぞれのスタッキングの重要性はどのようにわかりますか?これは可能ですか?ここでは... Pythonコードを使用して例えばh2o積み重ねアンサンブル/ automlのベースモデルの重要度/係数を表示

....

http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/stacked-ensembles.html

答えて

1

あなたがの係数の大きさを解釈することができるようにH2Oに積層アンサンブルアルゴリズムは、metalearningアルゴリズムとしてGLMを使用していますアンサンブルでの予測を行う際の各基本学習者の「重要性」としてのGLMメタルナー。

Stacked Ensembleのドキュメントにある簡単なexampleでは、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よりもわずかに優れていることがわかります。したがって、アンサンブルはRF予測をGBMよりわずかに優先します(必ずしもこのようなテストセットの性能とメタルナーの可変重要度との間の直接的な1-1の対応)。

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

ユーザーが将来的にmetalearnerとしてH2Oの教師MLのALGOSのいずれかを使用することができ、その場合には、あなたが同じを取得するために、アルゴリズムの変数の重要度を見ることができるようにexpose the metalearner as an argumentする計画があります。情報はすべてのH2Oアルゴリズムが可変重要度を計算するためです。

関連する問題