значения пути регуляризации h2o glm

[Питон 3.5.2, h2o 3.22.1.1, JRE 1.8.0_201]

Я запускаю glm lambda_search и использую путь регуляризации для выбора лямбды.

glm_h2o = H2OGeneralizedLinearEstimator(family='binomial', alpha=1., lambda_search=True, seed=param['GLM_SEED'])
glm_h2o.train(y='label', training_frame=train_h2o, fold_column='fold')

regpath_h2o = H2OGeneralizedLinearEstimator.getGLMRegularizationPath(glm_h2o)
regpath_pd = pd.DataFrame(index=np.arange(len(regpath_h2o['lambdas'])), columns=['lambda','ncoef','auc'])
for n,(lamb,coefs) in enumerate(zip(regpath_h2o['lambdas'],regpath_h2o['coefficients'])):
    mod = H2OGeneralizedLinearEstimator.makeGLMModel(model=glm_h2o, coefs=coefs)
    regpath_pd.loc[n] = [lamb, sum(1 for x in coefs.values() if abs(x)>1E-3), mod.model_performance(train_h2o).auc()]

Значения в regpath_pd показаны ниже:

  lambda  ncoef   auc |    lambda ncoef    auc |    lambda ncoef    auc
0  0.103    1   0.5   | 10  0.041   14   0.742 | 20  0.016   54   0.794
1  0.094    3   0.632 | 11  0.037   15   0.743 | 21  0.015   62   0.799
2  0.085    3   0.632 | 12  0.034   18   0.749 | 22  0.013   72   0.804
3  0.078    5   0.696 | 13  0.031   19   0.752 | 23  0.012   83   0.849
4  0.071    5   0.696 | 14  0.028   20   0.754 | 24  0.011   90   0.813
5  0.065    6   0.697 | 15  0.026   26   0.766 | 25  0.010  110   0.816
6  0.059    7   0.702 | 16  0.023   31   0.770 | 26  0.009  123   0.819
7  0.054    8   0.707 | 17  0.021   34   0.774 | 27  0.008  147   0.822
8  0.049   10   0.729 | 18  0.019   41   0.777 | 28  0.008  165   0.825
9  0.045   13   0.740 | 19  0.018   50   0.791 | 29  0.007  190   0.828

Я ожидал, что по мере уменьшения лямбда-штрафа ncoef и auc будут увеличиваться (не уменьшаться). Это верно для большей части времени с одним исключением. См. индекс 23 — AUC немного увеличивается, а затем снова уменьшается. Есть ли этому объяснение? Мне нужно установить какой-то параметр допуска или ...? В этом прогоне nlambdas = 100 (по умолчанию). Когда я устанавливаю его на 50, значения лямбда, ncoef и auc монотонны.

К вашему сведению — для целей этого поста я усек значения лямбда и auc до 3 знаков после запятой. Ни одно из этих значений не усекается при фактическом запуске.

введите здесь описание изображения

ОБНОВЛЕНИЕ

Следуя коду здесь Я переписал цикл, чтобы модель переобучалась для каждой лямбды. Это работает правильно, и монотонность сохраняется. Очевидно, что это займет гораздо больше времени, чтобы запустить. Вот подход, к которому я пришел: определить индекс, в котором есть проблема, и обучить полную модель только для этого индекса. FWIW вот эта часть кода

auc_diff = regpath_pd['auc'][1:].values - regpath_pd['auc'][:-1].values
arg_bad = np.argwhere(auc_diff<-1E-3).ravel())

for n in arg_bad.tolist():
    lamb = regpath_h2o['lambdas'][n]
    mod = H2OGeneralizedLinearEstimator(family='binomial', alpha=1., lambda_search=False, Lambda=lamb, seed=param['GLM_SEED'])
    mod.train(y='label', training_frame=train_h2o, fold_column='fold')
    regpath_pd.loc[n] = [lamb, sum(1 for x in mod.coef().values() if abs(x)>1E-3), mod.model_performance().auc()]

Полученный график показан ниже (в другом масштабе). Похоже проблема с getGLMRegularizationPath.

введите здесь описание изображения


person ironv    schedule 21.01.2019    source источник


Ответы (1)


Мы подозреваем, что в коде AUC может быть ошибка. Мы воспроизвели ваш код с нашими данными, но не смогли воспроизвести. Лучший способ двигаться вперед — предоставить нам свой набор данных, если это возможно. Как только мы сможем воспроизвести, мы будем работать над исправлением. Спасибо!

person Joe    schedule 23.01.2019