# Function std_dev::regression::best_fit

source · ```
pub fn best_fit(
predictors: &[f64],
outcomes: &[f64],
linear_estimator: &impl LinearEstimator
) -> DynModel
```

Available on

**crate feature**only.`regression`

## Expand description

Finds the model best fit to the input data. This is done using heuristics and testing of methods.

## Panics

Panics if the model has less than two parameters or if the two slices have different lengths.

## Heuristics

These seemed good to me. Any ideas on improving them are welcome.

- Power and exponentials only if no data is < 1. This is due to the sub-optimal behaviour of logarithm with values close to and under 0. This restriction might be lifted to just < 1e-9 in the future.
- Power is heavily favoured if
`let distance_from_integer = -(0.5 - exponent % 1).abs() + 0.5; distance_from_integer < 0.15 && -2.5 <= exponent <= 3.5`

- Power is also heavily favoured if the same as above occurs but with the reciprocal of the exponent. Then, the range 0.5 < exponent.recip() <= 3.5 is considered.
- Exponential favoured if R² > 0.8, which seldom happens with exponential regression.
- Bump the rating of linear, as that’s probably what you want.
- 2’nd degree polynomial is only considered if
`n > 15`

, where`n`

is`predictors.len()`

. - 3’nd degree polynomial is only considered if
`n > 50`