私はPythonでH2Oを初めて使っています。私は、H2OのWebサイトのサンプルコードに従って、アンサンブルモデルを使用してデータをモデル化しようとしています。 (http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/stacked-ensembles.html)fold_column引数を持つH2Oのアンサンブルモデル
私は基本モデルとしてGBMとRFを適用しました。スタッキングを使ってアンサンブルモデルでマージしようとしました。さらに、私の訓練データでは、使用するfoldという1つの追加の列を作成しました。fold_column = "fold"
私は10倍のCVを適用しました。私はcv1の結果を受け取りました。しかし、すべての予測は他の9個のCVSから来ており、空です。私はここで何が欠けていますか?ここで
は私のサンプルでは、データです:
コード:
import h2o
from h2o.estimators.random_forest import H2ORandomForestEstimator
from h2o.estimators.gbm import H2OGradientBoostingEstimator
from h2o.estimators.stackedensemble import H2OStackedEnsembleEstimator
from h2o.grid.grid_search import H2OGridSearch
from __future__ import print_function
h2o.init(port=23, nthreads=6)
train = h2o.H2OFrame(ens_df)
test = h2o.H2OFrame(test_ens_eq)
x = train.drop(['Date','EQUITY','fold'],axis=1).columns
y = 'EQUITY'
cat_cols = ['A','B','C','D']
train[cat_cols] = train[cat_cols].asfactor()
test[cat_cols] = test[cat_cols].asfactor()
my_gbm = H2OGradientBoostingEstimator(distribution="gaussian",
ntrees=10,
max_depth=3,
min_rows=2,
learn_rate=0.2,
keep_cross_validation_predictions=True,
seed=1)
my_gbm.train(x=x, y=y, training_frame=train, fold_column = "fold")
その後、私は
my_gbm.cross_validation_prediとCVの結果を確認するときctions():
プラス私はテストセットでアンサンブルをしようとしたとき、私は以下の警告を得る:
# Train a stacked ensemble using the GBM and GLM above
ensemble = H2OStackedEnsembleEstimator(model_id="mlee_ensemble",
base_models=[my_gbm, my_rf])
ensemble.train(x=x, y=y, training_frame=train)
# Eval ensemble performance on the test data
perf_stack_test = ensemble.model_performance(test)
pred = ensemble.predict(test)
pred
/mgmt/data/conda/envs/python3.6_4.4/lib/python3.6/site-packages/h2o/job.py:69: UserWarning: Test/Validation dataset is missing column 'fold': substituting in a column of NaN
warnings.warn(w)
を私はfold_columnについて何かが足りないのですか?
公開されているデータセットを使用するようにサンプルを変更できますか? https://stackoverflow.com/help/mcveまた、CVプレッズをチェックする方法を示してください(ここで何をしているかを示すコードはありません)。 –
@ErinLeDell CVプレッズに関連する行を入れます。また、私はサンプルデータセットを作成していますが、小さな質問が1つあります。私は、サンプルコードでは、fold_columnの乱数を代入する 'cars.kfold_column(n_folds = 5、seed = 1234)'を使用していることに気付きました。乱数を割り当てる代わりに、fold_columnのデータ(リストなど)を使用したいと思います。例えば、私は 'train ['fold'] .kfold_column()'を試しましたが、まだ乱数を割り当てています。 kfold_columnにデータを導入するにはどうすればよいですか?あるいは、 'kfold_column'を使用せずにトレーニングセットに 'fold'カラムを置くだけで十分ですか? –