[PYTHON] LightGBM UserWarning: Verwenden von categoryical_feature in Dataset

Beim Umgang mit kategorialen Variablen in LightGBM, der Standardbibliothek des Gradient Boosting Decision Tree, einem Standard für maschinelles Lernen. Die LightGBM-Version zum Zeitpunkt des Schreibens ist 2.3.0.

Fazit

Es gibt mindestens drei Möglichkeiten, eine Kategorievariable anzugeben, aber zum Zeitpunkt des Schreibens (3) scheint dtype = 'category' gut zu sein. (1) (2) ist ebenfalls beliebt, aber UserWarning wird angezeigt. Wurde es in letzter Zeit nicht mehr empfohlen?

3 Methoden

1. Setzen Sie Dataset auf categoryical_feature

lgb_train = lgb.Dataset(X_train, y_train, categorical_feature=['A'])

"X_train" ist "pandas.DataFrame" und "A" ist der Spaltenname der Kategorievariablen.

UserWarning wird angezeigt:

python3.7/site-packages/lightgbm/basic.py:1243: UserWarning: Using categorical_feature in Dataset.
  warnings.warn('Using categorical_feature in Dataset.')

Ja, ich habe kategoriale_Funktion im Datensatz angegeben. Was?

2. Setzen Sie train () auf categoryical_feature

gbm = lgb.train(params,
                lgb_train,
                categorical_feature=['A'],
                )

UserWarning:

python3.7/site-packages/lightgbm/basic.py:1247: UserWarning: categorical_feature in Dataset is overridden.
New categorical_feature is ['A']

Nun, ist es nicht ermutigend, hier ein kategoriales Merkmal zu setzen? Wenn Sie sowohl "Datensatz" in (1) als auch "Zug ()" in (2) festlegen, ist UserWarning nicht möglich, aber ich bin der Meinung, dass es nutzlos dupliziert wird.

3. Verwenden Sie dtype = 'category'

X_train['A'] = X_train['A'].astype('category')

Damit wird UserWarning nicht angezeigt. Wenn Sie zuerst den Kategorietyp festlegen, müssen Sie in Zug und Validierung nicht zweimal categoryical_feature angeben, wie im Fall von (1). Der Kategorietyp verwendet intern einen relativ kleinen Ganzzahltyp, sodass er auch RAM-freundlich ist. Das sieht gut aus.

Es ist nicht bekannt, wann diese UserWarning angezeigt wurde und ob sie fortgesetzt wird. Ich habe diesen Artikel geschrieben, weil ich im Internet keine Informationen finden konnte. Es scheint eine kürzliche Änderung zu sein.

Recommended Posts

LightGBM UserWarning: Verwenden von categoryical_feature in Dataset
Verwenden von Verticalenv in Shell-Skripten
Übersetzt mit Googletrans in Python
Verwenden des Python-Modus in der Verarbeitung