← retour aux snippets

lightgbm: poids d'échantillons et ranking

Passer des poids et groupes (LTR) via Dataset ou API sklearn.

objectif

Passer des poids et groupes (LTR) via Dataset ou API sklearn.

code minimal

import numpy as np, lightgbm as lgb

X = np.random.RandomState(0).randn(10, 2)
y = np.random.RandomState(1).randn(10)
w = np.array([1,1,1,1,2,2,2,2,3,3], dtype=float)

dtrain = lgb.Dataset(X, label=y, weight=w)
bst = lgb.train({"objective":"regression","metric":"l2","seed":0}, dtrain, num_boost_round=50, verbose_eval=False)
print(hasattr(bst, "predict"))

utilisation

# Ranking: groupes de requêtes (ex: 3+3+4)
X = np.random.RandomState(0).randn(10, 2)
y = np.random.RandomState(1).randn(10)
q = [3,3,4]
dtrain = lgb.Dataset(X, label=y, group=q)
rank = lgb.train({"objective":"lambdarank","metric":"ndcg","seed":0}, dtrain, num_boost_round=20, verbose_eval=False)
print(len(rank.feature_name()) == 2)

variante(s) utile(s)

# API sklearn avec sample_weight
from lightgbm import LGBMRegressor
reg = LGBMRegressor(n_estimators=50, random_state=0).fit(X, y, sample_weight=np.ones(len(y)))
print(hasattr(reg, "predict"))

notes

  • En ranking, l’ordre des groupes correspond à la concaténation des lignes; vérifiez la somme des groupes égale au nombre d’échantillons.