microsoft/qlib · error · ValueError
Unsupported reweighter type.
Error message
Unsupported reweighter type.
What it means
Thrown by LGBModel._prepare_data when the reweighter argument is neither None nor a qlib.model.base.Reweighter instance. The API accepts only these two forms; passing arrays, callables, or duck-typed objects fails before the lgb.Dataset is built.
Source
Thrown at qlib/contrib/model/gbdt.py:53
for key in ["train", "valid"]:
if key in dataset.segments:
df = dataset.prepare(key, col_set=["feature", "label"], data_key=DataHandlerLP.DK_L)
if df.empty:
raise ValueError("Empty data from dataset, please check your dataset config.")
x, y = df["feature"], df["label"]
# Lightgbm need 1D array as its label
if y.values.ndim == 2 and y.values.shape[1] == 1:
y = np.squeeze(y.values)
else:
raise ValueError("LightGBM doesn't support multi-label training")
if reweighter is None:
w = None
elif isinstance(reweighter, Reweighter):
w = reweighter.reweight(df)
else:
raise ValueError("Unsupported reweighter type.")
ds_l.append((lgb.Dataset(x.values, label=y, weight=w, free_raw_data=False), key))
return ds_l
def fit(
self,
dataset: DatasetH,
num_boost_round=None,
early_stopping_rounds=None,
verbose_eval=20,
evals_result=None,
reweighter=None,
**kwargs,
):
if evals_result is None:
evals_result = {} # in case of unsafety of Python default values
ds_l = self._prepare_data(dataset, reweighter)
ds, names = list(zip(*ds_l))
early_stopping_callback = lgb.early_stopping(View on GitHub (pinned to 79633dd950)
Solutions
- Subclass qlib.model.base.Reweighter and implement reweight(self, df) -> pd.Series
- Pass reweighter=None when no weighting is needed
Example fix
# before
model.fit(dataset, reweighter=np.ones(n))
# after
from qlib.model.base import Reweighter
class MyReweighter(Reweighter):
def reweight(self, df):
return pd.Series(1.0, index=df.index)
model.fit(dataset, reweighter=MyReweighter()) Defensive patterns
Strategy: type-guard
Validate before calling
from qlib.model.base import Reweighter assert reweighter is None or isinstance(reweighter, Reweighter)
Type guard
from qlib.model.base import Reweighter
def is_valid_reweighter(r) -> bool:
return r is None or isinstance(r, Reweighter) Prevention
- Subclass Reweighter for custom weighting schemes
- Never pass weight arrays directly to fit
When it happens
Trigger: model.fit(dataset, reweighter=np.array([...])) or reweighter=some_function; a custom class implementing reweight() without subclassing Reweighter.
Common situations: Coming from sklearn's sample_weight convention; writing a custom weighting scheme unaware of the Reweighter base class.
Related errors
- Unsupported reweighter type.
- Unsupported reweighter type.
- Unsupported reweighter type.
- LightGBM doesn't support multi-label training
- Empty data from dataset, please check your dataset config.
AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15).
Data as JSON: /api/errors/9ef3666bfeea14bc.
Report an issue: GitHub.