> For the complete documentation index, see [llms.txt](https://delphai.gitbook.io/delphai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://delphai.gitbook.io/delphai/documentacao/images-and-media/regressao/knn.md).

# KNN

O K-Nearest Neighbors (KN&#x4E;**)** é um modelo de regressão que toma decisões com base na proximidade dos dados. Diferente de outros algoritmos, o KNN não realiza um processo de treinamento propriamente dito, em vez disso, ele utiliza todo o conjunto de dados original (banco de dados) no momento da predição. Quando um novo dado precisa ser previsto, o modelo calcula a distância entre esse dado e todos os pontos do banco, identificando os K vizinhos mais próximos. O valor final da predição é a média (ou outra agregação, como a mediana) dos valores associados a esses vizinhos.

Por depender diretamente do banco de dados durante a predição, o KNN pode consumir mais memória e se tornar mais lento à medida que o conjunto de dados cresce. Apesar disso, ele é uma escolha eficaz para problemas que envolvem conjuntos de dados pequenos ou médios, onde a simplicidade e a precisão local são desejáveis.

#### EXEMPLO DE USO

```
uses
  UKNN;
  
procedure KNNPredict;
var
  vKNN: TKNNRegression;
begin
  vKNN := TKNNRegression.Create('C:\Delphai\Delphai\Datasets\Housing Price.csv', 3);
  try
    ShowMessage('House price: ' + FormatCurr('##0.00', vKNN.Predict([2459, 1, 1, 1964, 3.1047807561601664, 0, 4])));
  finally
    vKNN.Free;
  end;
end;
```

#### GUIA DE CLASSES E MÉTODOS

TKNNRegression

* *FDataset : TAIDatasetClassification;* : acessa o banco de dados atual contido no modelo.
* *procedure ClearDataset;* : limpa o banco de dados.
* *constructor Create(aTrainingData : String; aK: Integer; aHasHeader : Boolean = True);* ou
* *constructor Create(aTrainingData : TDataSet; aK: Integer);* : cria o objeto com a base que será usada para treinamento.
  * *aTrainingData* : caminho do arquivo CSV ou objeto TDataSet que contém os dados que serão usados para treinamento.
  * *K* : número de vizinhos próximos que serão utilizados para considerar o resultado.
  * *aHasHeader* : indica se tem cabeçalho no arquivo.
* *function Predict(aSample : TAISampleAtr; 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).
