ошибки классификатора lightGBM для class_weights - PullRequest
0 голосов
/ 28 марта 2020

Я хочу применить веса к моим классам в lgbm (ie. Вручную вынуждает модель отдавать предпочтение определенным категориям). Я вижу, какие у меня категории, но когда я делаю весовые коэффициенты класса, используя эти категории, ошибки модели с ValueError: Class label [somevalue] not present.

import lightgbm as lgbm
### Data prep
#[skipping as long & irrelevant -- only need to know classes for the question]#

### Get classes from data
model = lgbm.LGBMClassifier()
model.fit(X_train,y_train)
model.classes_

дают: array([ 100., 200., 300., 500., 600., 700., 800., 1000.])

применять известные классы к диктату class_weight согласно документации

class_weight (dict, 'сбалансированный' или None, необязательный (по умолчанию = None)) - Веса, связанные с классами в форме {class_label: weight}. [...]

model = lgbm.LGBMClassifier(class_weight = {100.:1,   200.:20,  300.:30,  500.:50,  600.:60,  700.:70,  800.:80,1000.:100} )
model.fit(X_train,y_train)

и мы получаем ошибку: ValueError: Class label 100.0 not present.

Ошибка повторяется для первого элемента в словаре, если мы переупорядочиваем или удаляем элементы.

1 Ответ

0 голосов
/ 28 марта 2020

Похоже, что lightGBM не принимает значения class_label в словаре class_weight. Вместо этого он размещает ваши метки в порядке возрастания, и вы должны ссылаться на них по индексу в соответствии с этим порядком.

, поэтому

class_weight = {100.:1,   200.:20,  300.:30,  500.:50,  600.:60,  700.:70,  800.:80,1000.:100}

становится

class_weight = {0:1,   1:1,  2:30,  3:50,  4:60,  5:70,  6:80,7:100}

и рабочий код:

model = lgbm.LGBMClassifier(class_weight = {0:1,   1:1,  2:30,  3:50,  4:60,  5:70,  6:80,7:100} )
model.fit(X_train,y_train)

Что представляет собой настоящий недокументированный обман поведения и делает код довольно сложным для понимания ...

Может ли кто-нибудь подтвердить, что это правильное предполагаемое поведение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...