Lightgbm.create_tree_digraph (), mostrar sólo árbol de una función en lugar de todas las características

0

Pregunta

He construido una LightGBM modelo con fines de clasificación. Me gustaría construir un árbol de mi LightGBM modelo de uso de la lightgbm.create_tree_digraph. Pero, en lugar de mostrar todas las características de un árbol, sólo se muestran Purpose_Of_Loan la característica. Realmente me gustaría ver todas las funciones visualizadas en un árbol. Hay un total de 12 funciones en el conjunto de entrenamiento. Cualquier ayuda sería muy apreciada.

Características:

Loan_Amount_Requested      float64
Length_Employed            float64
Home_Owner                   int64
Annual_Income              float64
Income_Verified              int64
Purpose_Of_Loan              int64
Debt_To_Income             float64
Inquiries_Last_6Mo           int64
Months_Since_Deliquency    float64
Number_Open_Accounts         int64
Total_Accounts               int64
Gender                       int64

Nota: Home_Owner, Income_Verified, Purpose_Of_Loan son categóricos características.

clasificador código:

clf = LGBMClassifier(nthread=4,
                    n_estimators=100, 
                    learning_rate=0.05,
                    bagging_fraction= 1, 
                    feature_fraction= 0.1, 
                    lambda_l1= 5, 
                    lambda_l2= 0, 
                    max_depth= 5, 
                    min_child_weight= 5, 
                    min_split_gain= 0.001, 
                    is_unbalance = True,
                    num_leaves= 36)

clf.fit(X, y)

trazado del árbol de código:

viz = lightgbm.create_tree_digraph(clf.booster_)
viz

Salida:

enter image description here

lightgbm plot python
2021-11-19 16:36:49
1

Mejor respuesta

0

Realmente me gustaría ver todas las funciones visualizadas en un árbol

LightGBM no hace ninguna garantía de que cada característica de ser utilizados.

Mientras que el crecimiento de cada árbol, LightGBM añade divisiones ((feature, threshold) combinaciones) de uno en un tiempo, eligiendo los de split, que ofrece la mejor "ganancia" (cambio en la función objetivo). Esta es la forma en varias divisiones de una característica podría ser elegido en un árbol, como en tu ejemplo, y cómo las características que no son muy informativas podría nunca ser elegido para cualquier divisiones.

Después del entrenamiento, puede utilizar Booster.feature_importance(importance_type="split") para comprobar con qué frecuencia cada característica ha sido elegido para las divisiones. Se puede pasar de la palabra clave argumento iteration para que el método para ver esta información sólo de algunas iteraciones, por ejemplo, iteration=5 para ver la frecuencia de cada característica fue elegido en la primera 6 árboles.

Considere el siguiente ejemplo (usando lightgbm==3.3.1en Python 3.8).

import lightgbm as lgb
import pandas as pd
from sklearn.datasets import load_breast_cancer

X, y = load_breast_cancer(return_X_y=True)
data = lgb.Dataset(X, label=y)

# train model
bst = lgb.train(
    params={
        "objective": "binary",
        "verbose": -1
    },
    train_set=data,
    num_boost_round=10
)

# compute importances
importance_df = (
    pd.DataFrame({
        'feature_name': bst.feature_name(),
        'importance_split': bst.feature_importance(importance_type='split', iteration=-1),
    })
    .sort_values('importance_split', ascending=False)
    .reset_index(drop=True)
)
print(importance_df)

Este código produce la siguiente salida.

   feature_name  importance_split
0     Column_21                24
1     Column_28                19
2     Column_27                19
3      Column_1                15
4     Column_10                14

Que dice "característica Column_21 fue elegido por 24 divisiones, característica Column_28 fue elegido para el 19 de divisiones, etc.".

2021-11-21 05:21:09

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................