def __init__(self, margin, obs_type="probit", method="ep", max_iter=100, lr=1.0): ks_model = ks.TernaryModel(margin=margin, obs_type=obs_type) fit_params = {"method": method, "max_iter": max_iter, "lr": lr} super().__init__(ks_model, fit_params)
model = model_class(**data.get("model_args", {})) for item in data["items"]: kernel_class = getattr(ks.kernel, item["kernel_class"]) kernel = kernel_class(**item["kernel_args"]) model.add_item(item["name"], kernel=kernel) for obs in data["observations"]: model.observe(**obs) model.fit(**data.get("fit_args", {})) for name, scores in data["scores"].items(): _, mean, var = model.item[name].scores assert np.allclose(scores["mean"], mean, rtol=1e-3) assert np.allclose(scores["var"], var, rtol=1e-3) assert np.allclose(model.log_likelihood, data["log_likelihood"], rtol=1e-3) @pytest.mark.parametrize("model", [ks.BinaryModel(), ks.TernaryModel()]) def test_chronological_order(model): """Observations can only be added in chronological order.""" model.add_item("x", kernel=ks.kernel.Constant(1.0)) model.observe(winners=["x"], losers=[], t=1.0) with pytest.raises(ValueError): model.observe(winners=["x"], losers=[], t=0.0) def test_damping(): """Damping should work on a simple example.""" kernel = ks.kernel.Constant(1.0) model = ks.BinaryModel() for x in ["A", "B", "C", "D"]: model.add_item(x, kernel=kernel) model.observe(winners=["C", "D"], losers=["A", "B"], t=0.0)
def __init__(self, *, margin, cvar, wvar): ks_model = ks.TernaryModel(margin=margin, obs_type="probit") TTTModel.init_items(ks_model, cvar, wvar) fit_params = {"method": "ep", "max_iter": 500, "lr": 1.0} super().__init__(ks_model, fit_params)
def __init__(self, *, margin, ovar, svar, dvar, lscale): ks_model = ks.TernaryModel(margin=margin, obs_type="probit") AffineDynamicModel.init_items(ks_model, ovar, svar, dvar, lscale) fit_params = {"method": "ep", "max_iter": 500, "lr": 1.0} super().__init__(ks_model, fit_params)