Как понять дамп модели Xgboost

Вопрос или проблема

Заметил, что в spark xgboost нет API trees_to_dataframe(), как в Python API. Я пытаюсь разобрать результат getModelDump, но меня путает его формат: какие поля что представляют и т.д.

 // обучение xgb_model в Spark версии xgboost
scala> xgb_model
res18: ml.dmlc.xgboost4j.scala.spark.XGBoostClassificationModel = xgbc_89286dd04aa3

scala> xgb_model.nativeBooster.getModelDump(null, true);
res19: Array[String] =
Array("0:[f1<53] yes=1,no=2,missing=2,gain=58047.7812,cover=336165
        1:[f3<53.9500008] yes=3,no=4,missing=3,gain=24677.3848,cover=63748.25
                3:leaf=-0.0531237721,cover=53626.5
                4:leaf=0.031994272,cover=10121.75
        2:[f16<1.66669905] yes=5,no=6,missing=6,gain=10181.9785,cover=272416.75
                5:leaf=-0.0937986076,cover=268367
                6:leaf=-0.0139159411,cover=4049.75
", "0:[f1<51] yes=1,no=2,missing=2,gain=52816.4062,cover=336097.594
        1:[f8<369.570007] yes=3,no=4,missing=4,gain=22681.3555,cover=60529.668
                3:leaf=-0.0121749714,cover=37363.5625
                4:leaf=-0.0751453713,cover=23166.1055
        2:[f16<1.67979908] yes=5,no=6,missing=6,gain=10274.8359,cover=275567.906
                5:leaf=-0.089068912,cover=271300.188
                6:leaf=-0.0108754979,cover=4267.74268
", "0:[f1<56] yes=1,no=2,missing=2,gain=4887...

scala> res19.size
res20: Int = 200

Настройки параметров моей модели приведены ниже:

xgbParams = {'n_estimators': 200, 'max_depth': 2, 'eta': 0.05, 'lambda':1, 'gamma':4, 'alpha':0.1, 'subsample':0.8, #'min_child_weight': 1,
         'colsample_bytree':0.8, 'objective': 'binary:logistic', 'colsample_bylevel':0.8,
         'eval_metric':'logloss', 'seed': 1122, 'missing': -999999999}

Я думаю, что res19.size = 200 имеет смысл, так как я установил n_estimators в 200. Мне не ясно, что означает каждая строка в res19, все они форматируются так:
Я думаю, что f2 должно представлять какую-то конкретную характеристику, но как я могу найти пример имени характеристики? Также, что представляют 0, 1, 2? а что означают yes=3, no=4?

Я также проверил understanding-python-xgboost-model-dump-output-of-a-very-simple-tree, но этот пост объясняет только значение, представленное узлом-листьем.

Заранее спасибо!!

0:[f2<0.380098999] yes=1,no=2,missing=1,gain=732.850342,cover=72529.7266
        1:[f47<31.9999981] yes=3,no=4,missing=3,gain=753.887451,cover=67352.3594
                3:leaf=4.21585646e-05,cover=63820.7422
                4:leaf=0.0237709191,cover=3531.61987
        2:[f4<1050] yes=5,no=6,missing=6,gain=410.277802,cover=5177.3667
                5:leaf=0.00518732425,cover=1373.32422
                6:leaf=-0.0266880095,cover=3804.04224

```

Я читаю это так:

  • 0:, 1:, 2: и т.д. — это идентификаторы узлов для текущего дерева
  • F2, F47, F3 и т.д. — это индекс признака, по которому происходит разделение в этом узле (это станет более понятным, если вы предоставите имена признаков вашему объекту модели)
  • <#.#### — это порог для этого узла
  • “yes=1,no=2,missing=1” означает, если Fx<#.#### перейти к узлу с ID 1, если нет — к узлу с ID 2, а при отсутствии данных по умолчанию — к узлу 1.

Ответ или решение

Понимание структуры и формата модуля XGBoost при развитии моделей в Spark может представлять сложность, особенно в ситуациях, когда отсутствуют такие удобные инструменты, как метод trees_to_dataframe() в Python. В случае анализа вывода метода getModelDump, важно разобраться в том, какие элементы содержит текстовая репрезентация модели и как она интерпретируется. Давайте детально рассмотрим это.

Теоретическая Часть

XGBoost работает как ансамбль решений деревьев решений, где каждый элемент ансамбля представляет собой отдельное дерево решений. В выводе модели, предоставляемой методом getModelDump, каждое дерево решений в формате текста отражает то, как модель делает предсказания, основываясь на значениях входных переменных. Вот ключевые элементы, которые можно обнаружить в текстовом дампе:

  1. Номера узлов (Node IDs): Числа, такие как 0:, 1:, 2:, представляют уникальные идентификаторы каждого узла в дереве. Начальный узел всегда номер "0" и охватывает весь набор данных.

  2. Пороги разделения (Splitting Thresholds): Каждый узел, кроме листового, будет разделен на основе условия, такого как f2<0.380098999. Здесь f2 представляет собой индекс признака (фичи), используемого для разделения данных, а число после < — это пороговое значение для этого признака.

  3. Переходы между узлами (Node Transitions): Параметры yes=X, no=Y, missing=Z указывают, в какой узел перейти в зависимости от того, выполнено ли условие. Если значение признака меньше порогового, происходит переход в узел, указанный после yes. В противном случае — после no. Если значение отсутствует, используется узел missing.

  4. Листовые узлы (Leaf Nodes): Листовые узлы содержат предсказания. Пример: leaf=0.0237709191 указывает, что в этом узле окончательное предсказание имеет определенное значение.

  5. Метрики (Metrics): Дамп модели может также содержать метрики такие, как gain и cover, которые отражают важность и количество данных, проходящих через узлы.

Пример

Давайте рассмотрим пример:

0:[f2<0.380098999] yes=1,no=2,missing=1,gain=732.850342,cover=72529.7266
    1:[f47<31.9999981] yes=3,no=4,missing=3,gain=753.887451,cover=67352.3594
        3:leaf=4.21585646e-05,cover=63820.7422
        4:leaf=0.0237709191,cover=3531.61987
    2:[f4<1050] yes=5,no=6,missing=6,gain=410.277802,cover=5177.3667
        5:leaf=0.00518732425,cover=1373.32422
        6:leaf=-0.0266880095,cover=3804.04224

Этот текст отображает дерево решений, где первый узел (0) делится по признаку f2. Если значение f2 меньше 0.380098999, данные переходят в узел 1, иначе — в узел 2. Если данные отсутствуют по f2, также используется узел 1. Узел 1 далее делится по признаку f47. Конечные результаты предсказаний находятся в узлах 3-6, которые являются листовыми.

Применение и интерпретация

При анализе дампа модели важно не только понимать формат, но и интерпретировать, как конкретные признаки и пороги влияют на предсказания модели. В реальных приложениях для добавления ясности и удобства рекомендуется предоставлять именованные признаки в модели, что упростит интерпретацию индексов fX.

Исполение пайплайна на основе понимания дампа модели:

  1. Назначение важности параметров: Использование показателей gain и cover помогает понять, какие признаки наиболее влиятельны в модели. Это может быть полезным для оптимизации модели или отладки данных.

  2. Понимание поведения модели: Анализ логики дерева решений через дамп выводов помогает понять, насколько хорошо модель оправдывает ожидания на основании тестовых данных и как она принимает решения.

  3. Отладка и улучшение модели: Идентификация специфических условий, при которых модель ошибается, может помочь настроить параметры модели, такие как глубина дерева (max_depth), регуляризация (lambda, alpha) и другие.

В итоге, понимание дампа модели XGBoost в Spark является сильным инструментом для улучшения прозрачности и объяснимости моделей, что особенно важно в критически важных приложениях, где каждая деталь предсказания должна быть объяснима.

Оцените материал
Добавить комментарий

Капча загружается...