Fitting with Penalties ======================= Another useful feature of ``pykelihood`` is the ability to customize the log-likelihood function with penalties, conditioning methods, stability conditions, etc. Most statistics-related packages offer to fit data using the standard opposite log-likelihood function, or in the best case, preselected models. To our knowledge, ``pykelihood`` is the only Python package allowing to easily customize the log-likelihood function to fit data. For example, say we want to penalize the target distribution parameters which L1-norm is too large: we would then apply a Lasso penalty. >>> data = np.random.normal(0, 1, 1000) >>> def lassolike_score(distribution, data): ... return -np.sum(distribution.logpdf(data)) + 5 * np.abs(distribution.loc()) ... >>> cond_fit = Normal().fit(data, score=lassolike_score) We then compare a fit using the standard negative log-likelihood function to the use of the Lasso-penalized likelihood. >>> std_fit = Normal().fit(data) >>> std_fit.loc.value -0.010891307380632494 >>> cond_fit.loc.value -0.006210406541824357 The outcomes show that the penalty has been taken into account; the ``loc`` parameter of the distribution applying the penalty is smaller than with the standard opposite log-likelihood function.