# K-Nearest Neighbors - KNN (ML\_CN\_2)

In other words, it assigns a label to a new data point based on how similar it is to the existing data points, where similarity is defined by distance metric such as Euclidean or Manhattan.&#x20;

This function can be used for both supervised and unsupervised learning.

## Sample Request

Build a KNN model named, *"ClassicModel"*

```javascript
{
    "project_id": 1,
    "parent_id": 7,
    "block_id": 8,
    "function_code": "ML_CN_2",
    "args": {
        "model_name": "ClassicModel",
        "random_state": 0,
        "n_neighbors": 5,
        "distance": "minkowski",
        "p": 2
    }
}
```

## Building a K-Nearest Neighbors model

## K-Nearest Neighbors

<mark style="color:green;">`POST`</mark> `https://autogon.ai/api/v1/engine/start`

#### Request Body

| Name                                             | Type   | Description                                                                                                                                                   |
| ------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| project\_id<mark style="color:red;">\*</mark>    | int    | The `id` of the current project                                                                                                                               |
| block\_id<mark style="color:red;">\*</mark>      | int    | The `id` of the current block                                                                                                                                 |
| function\_code<mark style="color:red;">\*</mark> | string | The function code for current block                                                                                                                           |
| parent\_id<mark style="color:red;">\*</mark>     | int    | The `id` of the previous block                                                                                                                                |
| args<mark style="color:red;">\*</mark>           | object | Block arguments                                                                                                                                               |
| model\_name<mark style="color:red;">\*</mark>    | String | Name of the model to be used for prediction.                                                                                                                  |
| random\_state                                    | int    | Controls the randomness of the estimator (defaults to 0).                                                                                                     |
| n\_neighbors                                     | int    | Number of neighbors to use by default for `kneighbors` queries (defaults to 5).                                                                               |
| distance                                         | String | Metric to use for distance computation. Default `minkowski`, which results in the standard Euclidean distance when `p = 2`.                                   |
| p                                                | int    | Power parameter for the Minkowski metric. When `p = 1,` this is equivalent to using `manhattan_distance`, and `euclidean_distance` for p = 2 (defaults to 2). |

{% tabs %}
{% tab title="200 Statemanagement object" %}

```javascript
{
    "status": "true",
    "message": {
        "id": 8,
        "project": 1,
        "block_id": 8,
        "parent_id": 7,
        "dataset_url": "",
        "x_value_url": "",
        "y_value_url": "",
        "x_train_url": "",
        "y_train_url": "",
        "x_test_url": "",
        "y_test_url": "",
        "output": "{\"ClassicModel\": {\"function_code\": \"ML_R_3\", \"model_url\": ""}}"
    }
}
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Python" %}

```
// Some code
```

{% endtab %}

{% tab title="Node" %}

```javascript
const project_id = 1
const parent_id = 7
const block_id = 8

kNearestNeighbors = await client.k_nearest_neighbors(project_id, parent_id, block_id, {
    model_name: "ClassicModel",
    random_state: 0,
    n_neighbors: 5,
    distance: "minkowski",
    p: 2
});
```

{% endtab %}
{% endtabs %}

## Sample Request

Make predictions with the pre-built model passing an optional test data.

```javascript
{
    "project_id": 1,
    "parent_id": 8,
    "block_id": 9,
    "function_code": "ML_CN_2_P",
    "args": {
        "model_name": "ClassicModel",
        "test_data": ""
    }
}
```

## Predicting with K-Nearest Neighbors

## K-Nearest Neighbors Predict

<mark style="color:green;">`POST`</mark> `https://autogon.ai/api/v1/engine/start`

#### Request Body

| Name                                             | Type   | Description                                                            |
| ------------------------------------------------ | ------ | ---------------------------------------------------------------------- |
| model\_name<mark style="color:red;">\*</mark>    | String | Name of previously trained model to be used for prediction             |
| test\_data                                       | String | Input data for prediction. Defaults to `x_train_url` in StateManagment |
| project\_id<mark style="color:red;">\*</mark>    | int    | ID of the current project                                              |
| block\_id<mark style="color:red;">\*</mark>      | int    | ID of the current block                                                |
| parent\_id<mark style="color:red;">\*</mark>     | int    | ID of the previous block                                               |
| function\_code<mark style="color:red;">\*</mark> | String | Function code for the current block                                    |

{% tabs %}
{% tab title="200: OK Statemanagement object" %}

```javascript
{
    "status": "true",
    "message": {
        "id": 9,
        "project": 1,
        "block_id": 9,
        "parent_id": 8,
        "dataset_url": "",
        "x_value_url": "",
        "y_value_url": "",
        "x_train_url": "",
        "y_train_url": "",
        "x_test_url": "",
        "y_test_url": "",
        "output": "{\"y_pred_url\": ""}"
    }
}
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Python" %}

```
// Some code
```

{% endtab %}

{% tab title="Node" %}

```javascript
const project_id = 1
const parent_id = 7
const block_id = 8

kNearestNeighborsnPredict = await client.k_nearest_neighbors_predict(project_id, parent_id, block_id, {
   model_name: "ClassicModel",
    test_data: ""
});
```

{% endtab %}
{% endtabs %}

## Sample Request

Evaluate model metrics

```javascript
{
    "project_id": 1,
    "parent_id": 8,
    "block_id": 9,
    "function_code": "ML_CN_2_M",
    "args": {
        "model_name": "ClassicModel"
    }
}
```

## K-Nearest Neighbors Metrics

<mark style="color:green;">`POST`</mark> `https://autogon.ai/api/v1/engine/start`

#### Request Body

| Name                                             | Type   | Description                                             |
| ------------------------------------------------ | ------ | ------------------------------------------------------- |
| project\_id<mark style="color:red;">\*</mark>    | int    | ID of the current project                               |
| parent\_id<mark style="color:red;">\*</mark>     | int    | ID of the previous block                                |
| block\_id<mark style="color:red;">\*</mark>      | int    | ID of the current block                                 |
| function\_code<mark style="color:red;">\*</mark> | String | Function code for the current block                     |
| model\_name<mark style="color:red;">\*</mark>    | String | Name of the pre-trained model to be used for evaluation |

{% tabs %}
{% tab title="200: OK StateManagement object" %}

```javascript
{
    "status": "true",
    "message": {
        "id": 1,
        "project": 12,
        "block_id": 10,
        "parent_id": 11,
        "dataset_url": "",
        "x_value_url": "",
        "y_value_url": "",
        "x_train_url": "",
        "y_train_url": "",
        "x_test_url": "",
        "y_test_url": "",
        "output": "{'confusion_matrix': '', 'accuracy': 0.9}"
    }
}
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Python" %}

```
// Some code
```

{% endtab %}

{% tab title="Node" %}

```javascript
const project_id = 1
const parent_id = 7
const block_id = 8

kNearestNeighborsMetrics= await client.k_nearest_neighbors_metrics(project_id, parent_id, block_id, {
    model_name: "SimpleModel",
 
});
```

{% endtab %}
{% endtabs %}
