# Regressão Ridge

A regressão Ridge é uma variação da regressão linear que ajuda a evitar o problema de superajuste. Ela faz isso adicionando uma penalidade à equação para evitar que os coeficientes fiquem muito grandes. Essa penalidade reduz a influência de variáveis menos importantes, tornando o modelo mais simples e estável. É como se o Ridge "puxasse" os coeficientes para mais perto de zero, sem eliminá-los completamente.

Essa técnica é especialmente útil quando há muitas variáveis relacionadas entre si ou quando os dados são limitados. Ao controlar o impacto de variáveis menos relevantes, a regressão Ridge cria modelos que funcionam melhor em situações práticas, ajudando a prever resultados com mais precisão em novos conjuntos de dados.

O treinamento do modelo é rápido, após o treinamento não é necessário a base de dados para realizar predições. É possível salvar e importar o treinamento finalizado em um arquivo extremamente leve.

#### EXEMPLO DE USO

```
uses
  URidgeRegression;
  
procedure ExampleRidgeRegression;
var
  vRidge: TRidgeRegression;
begin
  vRidge := TRidgeRegression.Create(0.1);
  try
    vRidge.Train('C:\Delphai\Delphai\Datasets\Housing Price.csv', True);
    ShowMessage('House price: ' + FormatCurr('##0.00', vRidge.Predict([2459, 1, 1, 1964, 3.1047807561601664, 0, 4])));
  finally
    vRidge.Free;
  end;
end;
```

#### GUIA DE CLASSES E MÉTODOS

TRidgeRegression

* *FDataset : TAIDatasetClassification;* : acessa a base de dados atual contido no modelo.
* *procedure ClearDataset;* : limpa a base de dados.
* *constructor Create(aAlfa : Double);* : cria um novo objeto para ser treinado.
  * *aAlfa* : parâmetro de regularização que controla a penalização dos coeficientes, equilibrando ajuste ao modelo e complexidade para evitar overfitting, em outras palavras, é como um "freio" que ajuda a evitar que o modelo fique muito ajustado aos dados, tornando as previsões mais confiáveis. Quanto maior o alfa, mais o modelo é simplificado.
* *constructor Create(aTrainedFile : String); overload;* : cria o objeto carregando a estrutura de um arquivo já treinado.
* *procedure Train(aTrainingData : String; aHasHeader : Boolean = True); overload;* : realiza o treinamento com os dados passados.
  * *aTrainingData* : caminho do arquivo CSV.
  * *aHasHeader* : indica se tem cabeçalho no arquivo.
* *procedure Train(aTrainingData : TDataSet); overload;* : realiza o treinamento e gera os nós com base nos dados passados.
  * *aTrainingData* : objeto TDataSet que contém os dados que serão usados para treinamento.
* *function Predict(aSample: TArray\<Double>; aInputNormalized : Boolean = False): String;* : prevê o valor da amostra.
  * *aSample* : amostra a ser analisada.
  * *aInputNormalized* : deve ser passado como true somente se os dados da entrada já foram normalizadas por fora do componente (o que deve ser feito utilizando o range salvo no objeto).
* *procedure LoadFromFile(const FileName: string);* : carrega do arquivo treinado.
* *procedure SaveToFile(const FileName: string);* : salva o arquivo treinado.
