Я пытаюсь активировать lightgbm с помощью метрики map (я объясню, почему я делаю это в конце этого поста), со следующими параметрами dict (используя sklearn API):
param = {
'objective': 'binary',
'num_threads': 40,
'metric': 'map',
'eval_at': 300,
'feature_fraction': 1.0,
'bagging_fraction': 1.0,
'min_data_in_leaf': 50,
'max_depth': -1,
'subsample_for_bin': 200000,
'subsample': 1.0,
'subsample_freq': 0,
'min_split_gain': 0.0,
'min_child_weight': 0.001,
'min_child_samples': 20,
'n_estimators': 9999
}
но я получаю следующую ошибку:
> [LightGBM] [Fatal] For MAP metric, there should be query information
> Traceback (most recent call last): File
> "/home/danri/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py",
> line 2910, in run_code
> exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-76-81403c753a65>", line 44, in <module>
> eval_metric=param_1['metric']) File "/home/danri/anaconda3/lib/python3.6/site-packages/lightgbm/sklearn.py",
> line 539, in fit
> callbacks=callbacks) File "/home/danri/anaconda3/lib/python3.6/site-packages/lightgbm/sklearn.py",
> line 391, in fit
> callbacks=callbacks) File "/home/danri/anaconda3/lib/python3.6/site-packages/lightgbm/engine.py",
> line 168, in train
> booster = Booster(params=params, train_set=train_set) File "/home/danri/anaconda3/lib/python3.6/site-packages/lightgbm/basic.py",
> line 1215, in __init__
> ctypes.byref(self.handle))) File "/home/danri/anaconda3/lib/python3.6/site-packages/lightgbm/basic.py",
> line 47, in _safe_call
> raise LightGBMError(_LIB.LGBM_GetLastError()) lightgbm.basic.LightGBMError: b'For MAP metric, there should be query
> information'
Единственное объяснение, которое я нашел для концепции информации о запросе, было в lightgbm parameters docs
и это объяснение:
Данные запроса
Для обучения LambdaRank необходима информация запроса для данных обучения.
LightGBM использует дополнительный файл для хранения данных запроса. Следующее является
Пример:
27 18 67 ...
Это означает, что первые 27 строк выборки принадлежат одному запросу, а следующие 18 строк
принадлежат другому и т. д. (Примечание: данные должны упорядочиваться по запросу) Если
имя файла данных «train.txt», файл запроса должен быть назван как
«Train.txt.query» и в той же папке с тренировочными данными. LightGBM будет
загрузить файл запроса автоматически, если он существует.
Теперь вы можете указать конкретный идентификатор запроса / группы в файле данных. Пожалуйста, обратитесь к
Группа параметров выше.
Я также изучил код lightgbm, чтобы найти его применение, но все еще не понимал концепцию информации запроса. Может ли кто-нибудь объяснить это?
Причина, по которой я пытаюсь использовать метрику «карта», заключается в том, что целью моей модели классификации является достижение максимального значения PPV при 10% -ом риске. Когда я оптимизирую с помощью 'auc', любое улучшение в рейтинге (в децилях с высоким риском или в других частях набора данных образцов) улучшает AUC. Я хочу, чтобы модель оптимизировалась только при улучшении 10% PPV, так как это будет ее использование в реальном мире (т.е. отправка людей с 10% риска на определенное лечение).
Хотел бы получить любую помощь.
Спасибо!