Можно ли получить график важности функции из модели h2o.automl?
У меня есть проблема двоичной классификации, и я использую "h2o.automl" для получения модели.
Можно ли получить график значений функций моего набора данных из модели "h2o.automl"?
Указатель на некоторый код Python 3 был бы очень признателен.
Благодарю. Чарльз
1 ответ
Это зависит от того, какую модель вы используете. Если вы используете верхнюю модель в таблице лидеров AutoML, то это, вероятно, будет составной ансамбль, и у нас еще нет функции для извлечения важности функций для этого типа модели (хотя есть билет, открытый для добавления этого).
Если вы хотите использовать любой другой тип модели (например, GBM), то вы можете использовать обычный способ получения значения переменной из модели H2O. Вот демонстрация с использованием примера кода из руководства пользователя H2O AutoML.
import h2o
from h2o.automl import H2OAutoML
h2o.init()
# Import a sample binary outcome training set into H2O
train = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.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()
# Run AutoML for 10 models
aml = H2OAutoML(max_models=10, seed=1)
aml.train(x=x, y=y, training_frame=train)
# View the AutoML Leaderboard
lb = aml.leaderboard
lb
Две верхние модели - это Stacked Ensembles, но третья - это GBM, поэтому мы можем извлечь переменную важность из этой модели.
In [6]: lb[:5,"model_id"]
Out[6]:
model_id
-----------------------------------------------------
StackedEnsemble_AllModels_0_AutoML_20180801_120024
StackedEnsemble_BestOfFamily_0_AutoML_20180801_120024
GBM_grid_0_AutoML_20180801_120024_model_4
GBM_grid_0_AutoML_20180801_120024_model_0
GBM_grid_0_AutoML_20180801_120024_model_1
[5 rows x 1 column]
Вот как можно получить значение переменной. Сначала возьмите объект модели GBM:
# Get third model
m = h2o.get_model(lb[2,"model_id"])
Затем вы можете получить данные обратно в Pandas DataFrame (если у вас установлена Pandas) следующим образом:
In [13]: m.varimp(use_pandas=True)
Out[13]:
variable relative_importance scaled_importance percentage
0 x26 997.396362 1.000000 0.224285
1 x28 437.546936 0.438689 0.098391
2 x27 338.475555 0.339359 0.076113
3 x6 306.173553 0.306973 0.068849
4 x25 295.848785 0.296621 0.066528
5 x23 284.468292 0.285211 0.063968
6 x1 191.988358 0.192490 0.043172
7 x4 184.072052 0.184553 0.041392
8 x10 137.810501 0.138170 0.030989
9 x14 100.928482 0.101192 0.022696
10 x12 90.265976 0.090502 0.020298
11 x22 89.900856 0.090136 0.020216
12 x20 87.367523 0.087596 0.019646
13 x19 83.130775 0.083348 0.018694
14 x5 82.661133 0.082877 0.018588
15 x16 81.957863 0.082172 0.018430
16 x18 80.794426 0.081005 0.018168
17 x7 80.664566 0.080875 0.018139
18 x11 75.841171 0.076039 0.017054
19 x2 75.037476 0.075233 0.016874
20 x8 72.234459 0.072423 0.016243
21 x15 70.233994 0.070417 0.015794
22 x3 60.015785 0.060172 0.013496
23 x9 40.281757 0.040387 0.009058
24 x13 35.475540 0.035568 0.007977
25 x17 25.367661 0.025434 0.005704
26 x24 22.506416 0.022565 0.005061
27 x21 18.564632 0.018613 0.004175
Вы также можете построить график значимости переменной, используя m.varimp_plot()
если у вас установлен matplotlib.