<a id="skfolio-distribution-basedistribution"></a>

# skfolio.distribution.BaseDistribution

<a id="skfolio.distribution.BaseDistribution"></a>

### *class* skfolio.distribution.BaseDistribution(random_state=None)

Base Distribution Estimator.

This abstract class serves as a foundation for distribution models in skfolio.

random_state *int, RandomState instance or None, default=None*
: Seed or random state to ensure reproducibility.

* **Attributes:**
  [`fitted_repr`](#skfolio.distribution.BaseDistribution.fitted_repr)
  : String representation of the fitted model.

  [`n_params`](#skfolio.distribution.BaseDistribution.n_params)
  : Number of model parameters.

### Methods

| [`aic`](#skfolio.distribution.BaseDistribution.aic)(X)                 | Compute the Akaike Information Criterion (AIC) for the model given data X.   |
|-------------------------------------------------------------------------|------------------------------------------------------------------------------|
| [`bic`](#skfolio.distribution.BaseDistribution.bic)(X)                 | Compute the Bayesian Information Criterion (BIC) for the model given data X. |
| [`fit`](#skfolio.distribution.BaseDistribution.fit)(X[, y])            | Fit the univariate distribution model.                                       |
| [`get_metadata_routing`](#skfolio.distribution.BaseDistribution.get_metadata_routing)() | Get metadata routing of this object.                                         |
| [`get_params`](#skfolio.distribution.BaseDistribution.get_params)([deep])     | Get parameters for this estimator.                                           |
| [`sample`](#skfolio.distribution.BaseDistribution.sample)([n_samples])    | Generate random samples from the fitted model.                               |
| [`score`](#skfolio.distribution.BaseDistribution.score)(X[, y])          | Compute the total log-likelihood under the model.                            |
| [`score_samples`](#skfolio.distribution.BaseDistribution.score_samples)(X)       | Compute the log-likelihood of each sample (log-pdf) under the model.         |
| [`set_params`](#skfolio.distribution.BaseDistribution.set_params)(\*\*params) | Set the parameters of this estimator.                                        |

<a id="skfolio.distribution.BaseDistribution.aic"></a>

#### aic(X)

Compute the Akaike Information Criterion (AIC) for the model given data X.

The AIC is defined as:

$$
\mathrm{AIC} = -2 \, \log L \;+\; 2 k,

$$

where

- $\log L$ is the total log-likelihood
- $k$ is the number of parameters in the model

A lower AIC value indicates a better trade-off between model fit and complexity.

* **Parameters:**
  **X** *array-like of shape (n_observations, n_features)*
  : The input data on which to compute the AIC.
* **Returns:**
  **aic** *float*
  : The AIC of the fitted model on the given data.

### Notes

In practice, both AIC and BIC measure the trade-off between model fit and
complexity, but BIC tends to prefer simpler models for large $n$
because of the $\ln(n)$ term.

### References

* <a id='r731676aa151f-1'>**[1]**</a> “A new look at the statistical model identification”, Akaike (1974).

<a id="skfolio.distribution.BaseDistribution.bic"></a>

#### bic(X)

Compute the Bayesian Information Criterion (BIC) for the model given data X.

The BIC is defined as:

$$
\mathrm{BIC} = -2 \, \log L \;+\; k \,\ln(n),

$$

where

- $\log L$ is the (maximized) total log-likelihood
- $k$ is the number of parameters in the model
- $n$ is the number of observations

A lower BIC value suggests a better fit while imposing a stronger penalty
for model complexity than the AIC.

* **Parameters:**
  **X** *array-like of shape (n_observations, n_features)*
  : The input data on which to compute the BIC.
* **Returns:**
  **bic** *float*
  : The BIC of the fitted model on the given data.

### Notes

In practice, both AIC and BIC measure the trade-off between model fit and
complexity, but BIC tends to prefer simpler models for large $n$
because of the $\ln(n)$ term.

### References

* <a id='r5bfb00f595f0-1'>**[1]**</a> “Estimating the dimension of a model”, Schwarz, G. (1978).

<a id="skfolio.distribution.BaseDistribution.fit"></a>

#### *abstractmethod* fit(X, y=None)

Fit the univariate distribution model.

* **Parameters:**
  **X** *array-like of shape (n_observations, n_features)*
  : The input data.

  **y** *None*
  : Ignored. Provided for compatibility with scikit-learn’s API.
* **Returns:**
  **self** *BaseDistribution*
  : Returns the instance itself.

<a id="skfolio.distribution.BaseDistribution.fitted_repr"></a>

#### *abstract property* fitted_repr

String representation of the fitted model.

<a id="skfolio.distribution.BaseDistribution.get_metadata_routing"></a>

#### get_metadata_routing()

Get metadata routing of this object.

Please check [User Guide](https://skfolio.org/user_guide/metadata_routing.html.md#metadata-routing) on how the routing
mechanism works.

* **Returns:**
  **routing** *MetadataRequest*
  : A `MetadataRequest` encapsulating
    routing information.

<a id="skfolio.distribution.BaseDistribution.get_params"></a>

#### get_params(deep=True)

Get parameters for this estimator.

* **Parameters:**
  **deep** *bool, default=True*
  : If True, will return the parameters for this estimator and
    contained subobjects that are estimators.
* **Returns:**
  **params** *dict*
  : Parameter names mapped to their values.

<a id="skfolio.distribution.BaseDistribution.n_params"></a>

#### *abstract property* n_params

Number of model parameters.

<a id="skfolio.distribution.BaseDistribution.sample"></a>

#### sample(n_samples=1)

Generate random samples from the fitted model.

* **Parameters:**
  **n_samples** *int, default=1*
  : Number of samples to generate.
* **Returns:**
  **X** *array-like of shape (n_samples, 1)*
  : List of samples.

<a id="skfolio.distribution.BaseDistribution.score"></a>

#### score(X, y=None)

Compute the total log-likelihood under the model.

* **Parameters:**
  **X** *array-like of shape (n_observations, n_features)*
  : An array of data points for which the total log-likelihood is computed.

  **y** *None*
  : Ignored. Provided for compatibility with scikit-learn’s API.
* **Returns:**
  **logprob** *float*
  : The total log-likelihood (sum of log-pdf values).

<a id="skfolio.distribution.BaseDistribution.score_samples"></a>

#### *abstractmethod* score_samples(X)

Compute the log-likelihood of each sample (log-pdf) under the model.

* **Parameters:**
  **X** *array-like of shape (n_observations, n_features)*
  : The input data.
* **Returns:**
  **density** *ndarray of shape (n_observations,)*
  : Log-likelihood values for each observation in X.

<a id="skfolio.distribution.BaseDistribution.set_params"></a>

#### set_params(\*\*params)

Set the parameters of this estimator.

The method works on simple estimators as well as on nested objects
(such as `Pipeline`). The latter have
parameters of the form `<component>__<parameter>` so that it’s
possible to update each component of a nested object.

* **Parameters:**
  **\*\*params** *dict*
  : Estimator parameters.
* **Returns:**
  **self** *estimator instance*
  : Estimator instance.

