# K-means clustering
> Supported in: Batch
K-means clustering is an unsupervised machine learning algorithm. It groups dataset vectors into k clusters. The k value is determined by computing the best silhouette score of the specified range between minimum k and maximum k. Number of k values defines how many k values should be tried within this range, inclusive of the boundaries.
**Transform categories**: Other
## Declared arguments
* **Input dataset:** Source dataset containing vector column.
*Table*
* **Maximum k:** Maximum number of clusters.
*Literal\*
* **Minimum k:** Minimum number of clusters.
*Literal\*
* **Number of k values:** Number of k values to test, over values from minimum k to maximum k. Note that we will train number of k clustering models, so the pipeline execution might be slow if number of k values is set to a high value. The best model is selected based on the silhouette score.
*Literal\*
* **Vector column:** Column containing the float vectors that will be used for the clustering.
*Column\>*
## Examples
### Example 1: Base case
**Argument values:**
* **Input dataset:** ri.foundry.main.dataset.a
* **Maximum k:** 12
* **Minimum k:** 3
* **Number of k values:** 4
* **Vector column:** `feature_column`
**Input:**
| feature\_column |
| ----- |
| \[ 0.05, 3.1, 2.3 ] |
| \[ 1.0, 3.1, 2.3 ] |
| \[ 1.0, 3.5, 2.3 ] |
| \[ 19.0, 12.3, -1.4 ] |
**Output:**
| feature\_column | cluster\_id |
| ----- | ----- |
| \[ 1.0, 3.1, 2.3 ] | 0 |
| \[ 1.0, 3.5, 2.3 ] | 0 |
| \[ 19.0, 12.3, -1.4 ] | 1 |
| \[ 0.05, 3.1, 2.3 ] | 2 |
***
### Example 2: Null case
**Argument values:**
* **Input dataset:** ri.foundry.main.dataset.a
* **Maximum k:** 12
* **Minimum k:** 3
* **Number of k values:** 4
* **Vector column:** `feature_column`
**Input:**
| feature\_column |
| ----- |
| \[ 0.05, 3.1, 2.3 ] |
| *null* |
| \[ 1.0, 3.1, 2.3 ] |
| \[ 1.0, 3.5, 2.3 ] |
| \[ 19.0, 12.3, -1.4 ] |
**Output:**
| feature\_column | cluster\_id |
| ----- | ----- |
| \[ 1.0, 3.1, 2.3 ] | 0 |
| \[ 1.0, 3.5, 2.3 ] | 0 |
| \[ 19.0, 12.3, -1.4 ] | 1 |
| \[ 0.05, 3.1, 2.3 ] | 2 |
***
### Example 3: Edge case
**Argument values:**
* **Input dataset:** ri.foundry.main.dataset.a
* **Maximum k:** 3
* **Minimum k:** 3
* **Number of k values:** 1
* **Vector column:** `feature_column`
**Input:**
| feature\_column |
| ----- |
| \[ 0.05, 3.1, 2.3 ] |
| \[ 1.0, 3.5, 2.3 ] |
| \[ 19.0, 12.3, -1.4 ] |
**Output:**
| feature\_column | cluster\_id |
| ----- | ----- |
| \[ 19.0, 12.3, -1.4 ] | 0 |
| \[ 0.05, 3.1, 2.3 ] | 1 |
| \[ 1.0, 3.5, 2.3 ] | 2 |
***