# Regressão

Métodos de regressão são maneiras de usar aprendizado de máquina, matemática e estatística para encontrar relações entre coisas. O objetivo é fazer previsões de números, como estimar o preço de algo ou prever um valor futuro.

Por exemplo, imagine que você quer prever o preço de uma casa. Para isso, você pode usar informações como o tamanho da casa, o número de quartos e se está bem localizada. Com esses dados, os métodos de regressão ajudam a calcular o valor mais provável da casa.

#### EXEMPLO DE USO

É possível replicar o exemplo acima com poucas linhas. Para gerar o arquivo com todas as configurações necessárias para utilizar posteriormente:

```
uses
  UEasyAI;
  
procedure TrainModel;
var
  vEasyAIClass: TEasyAIRegression;
begin
  vEasyAIClass := TEasyAIRegression.Create;
  try
    vEasyAIClass.LoadDataset('C:\DelphAI\DelphAI\Datasets\Housing Price.csv');
    vEasyAIClass.FindBestModel('C:\Example\trainedFile-Housing-price');
  finally
    vEasyAIClass.Free;
  end;
end;
```

Ao concluir a procedure "FindBestModel", será criado o arquivo no diretório passado por parâmetro e uma mensagem de alerta será exibida, avisando se é necessário ou não carregar novamente o database antes do uso.

Para utilizar o modelo a partir do arquivo gerado:

<pre><code><strong>uses
</strong>  UEasyAI;
  
procedure ShowPredictedHousesPrice;
var
  vEasyAIClass: TEasyAIRegression;
begin
  vEasyAIClass := TEasyAIRegression.Create;
  try
    vEasyAIClass.LoadDataset('C:\DelphAI\DelphAI\Datasets\Housing Price.csv'); // Só é necessário se foi alertado que o melhor modelo precisa do dataset.
    vEasyAIClass.LoadFromFile('C:\Example\trainedFile-Housing-price');
    // To predict a house with the same properties the model was trained on:
    // Square_Footage = 1
    // Num_Bedrooms = 1
    // Num_Bathrooms = 1
    // Year_Built = 1964
    // Lot_Size = 3.1047807561601664
    // Garage_Size = 0
    // Neighborhood_Quality = 4
    ShowMessage('House price: ' + FormatCurr('##0.00', vEasyAIClass.Predict([2459, 1, 1, 1964, 3.1047807561601664, 0, 4])));
  finally
    vEasyAIClass.Free;
  end;
end;
</code></pre>

A estrutura da base de dados pode ser encontrado [aqui](/delphai/documentacao/base-de-dados/regressao.md).

#### GUIA DE CLASSES E MÉTODOS

TEasyAIRegression

* *constructor Create;* : cria o objeto.
* *procedure LoadDataset(aDataSet : String; aHasHeader : Boolean = True);* : carrega a base de dados para treinamento ou uso nos modelos que necessitam.
  * *aDataSet* : caminho do arquivo CSV.
  * *aHasHeader* : indica se tem cabeçalho no arquivo.
* *procedure LoadDataset(aDataSet : TDataSet);* : carrega a base de dados para treinamento ou uso nos modelos que necessitam.
  * *aDataSet* : objeto TDataSet que contém os dados que serão usados para treinamento.
* *procedure FindBestModel(aPathResultFile: String; aMode : TEasyTestingMode = tmStandard; aMaxThreads : Integer = 0; aCsvResultModels : String = ''; aLogFile : String = '');* : testa várias opções de modelos para encontrar e preparar o melhor dentre eles para ser usado nas predições.
  * *aPathResultFile* : caminho onde salva as configurações do modelo encontrado, antes do uso basta usá-lo para preparar todo o objeto para predições.
  * *aMode* : modo de pesquisa se será realizada, tendo 3 opções:
    * *tmFast* : testa somente os prováveis melhores modelos. É o modo mais rápido;
    * *tmStandard* : testa os prováveis melhores modelos, além de explorar parâmetros mais extremos;
    * *tmExtensive* : testa um grande número de modelos, incluindo o dos outros métodos. É o modo mais demorado.
  * *aMaxThreads* : opcional, máximo de threads que serão utilizadas simultaneamente. Caso for 0, irá usar a quantidade de threads disponíveis no CPU.
  * *aCsvResultModels* : opcional, caminho onde será salvo um arquivo CSV contendo cada método testado, junto aos seus resultados.
  * *aLogFile* : opcional, caminho do arquivo de log.
* *procedure LoadFromFile(aPath : String);* : carrega o arquivo gerado no "FindBestModel" para criar e preparar o uso do melhor modelo encontrado.
* *function Predict(aSample : TArray\<Double>) : Double;* : prevê o valor da amostra.
  * *aSample* : amostra a ser analisada. Exemplo, se o modelo foi treinado com 5 colunas de propriedades + 1 do resultado, agora deve ser passado apenas o array com o valor das 5 propriedades.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://delphai.gitbook.io/delphai/documentacao/markdown/regressao.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
