# KNN

O K-Nearest Neighbors é um modelo de classificaçã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 (base de dados) no momento da predição. Quando um novo dado precisa ser classificado, o modelo calcula a distância entre esse dado e todos os pontos da base, identificando os K vizinhos mais próximos. A classe mais comum entre esses vizinhos é então atribuída ao dado.

Por depender diretamente da base 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: TKNNClassification;
begin
  vKNN := TKNNClassification.Create('C:\Delphai\Delphai\Datasets\Iris.csv', 3, False);
  try
    ShowMessage(vKNN.Predict([6.3, 3.3, 4.7, 1.6]));
  finally
    vKNN.Free;
  end;
end;
```



#### GUIA DE CLASSES E MÉTODOS

TKNNClassification

* _FDataset : TAIDatasetClassification;_ : acessa a base de dados atual contido no modelo.
* _procedure ClearDataset;_ : limpa a base 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 : TArray\<Double>; aInputNormalized : Boolean = False): string;_ : prevê a melhor categoria para a 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).

