vastorbit.machine_learning.model_selection.best_k¶
- vastorbit.machine_learning.model_selection.best_k(input_relation: Annotated[str | VastFrame, ''], X: Annotated[str | list[str], 'STRING representing one column or a list of columns'] | None = None, n_clusters: tuple | list = (1, 100), init: Literal['k-means++', 'random', None] = None, max_iter: int = 50, tol: float = 0.0001, elbow_score_stop: float = 0.8, **kwargs) int¶
Finds the
KMeanskbased on a score.- Parameters:
input_relation (SQLRelation) – Relation used to train the model.
X (SQLColumns, optional) –
listof the predictor columns. If empty, all numerical columns are used.n_clusters (tuple | list, optional) – Tuple representing the number of clusters to start and end with. This can also be a customized list with various
kvalues to test.init (str | list, optional) –
The method used to find the initial cluster centers.
- k-means++:
Use the
k-means++method to initialize the centers.
- random:
Randomly subsamples the data to find initial centers.
Default value is
k-means++.max_iter (int, optional) – The maximum number of iterations for the algorithm.
tol (float, optional) – Determines whether the algorithm has converged. The algorithm is considered converged after no center has moved more than a distance of
tolfrom the previous iteration.elbow_score_stop (float, optional) – Stops searching for parameters when the specified elbow score is reached.
- Returns:
the k-means / k-prototypes
k.- Return type:
int
Examples
The following examples provide a basic understanding of usage. For more detailed examples, please refer to the: Elbow Curve page.
Load data for machine learning¶
We import
vastorbit:import vastorbit as vo
Hint
By assigning an alias to
vastorbit, we mitigate the risk of code collisions with other libraries. This precaution is necessary because vastorbit uses commonly known function names like “average” and “median”, which can potentially lead to naming conflicts. The use of an alias ensures that the functions fromvastorbitare used as intended without interfering with functions from other libraries.For this example, we will use the iris dataset.
import vastorbit.datasets as vod data = vod.load_iris()
123sepallengthcmDecimal(5, 2)123sepalwidthcmDecimal(5, 2)123petallengthcmDecimal(5, 2)123petalwidthcmDecimal(5, 2)AbcspeciesVarchar(30)1 5.1 3.5 1.4 0.2 Iris-setosa 2 4.9 3.0 1.4 0.2 Iris-setosa 3 4.7 3.2 1.3 0.2 Iris-setosa 4 4.6 3.1 1.5 0.2 Iris-setosa 5 5.0 3.6 1.4 0.2 Iris-setosa 6 5.4 3.9 1.7 0.4 Iris-setosa 7 4.6 3.4 1.4 0.3 Iris-setosa 8 5.0 3.4 1.5 0.2 Iris-setosa 9 4.4 2.9 1.4 0.2 Iris-setosa 10 4.9 3.1 1.5 0.1 Iris-setosa 11 5.4 3.7 1.5 0.2 Iris-setosa 12 4.8 3.4 1.6 0.2 Iris-setosa 13 4.8 3.0 1.4 0.1 Iris-setosa 14 4.3 3.0 1.1 0.1 Iris-setosa 15 5.8 4.0 1.2 0.2 Iris-setosa 16 5.7 4.4 1.5 0.4 Iris-setosa 17 5.4 3.9 1.3 0.4 Iris-setosa 18 5.1 3.5 1.4 0.3 Iris-setosa 19 5.7 3.8 1.7 0.3 Iris-setosa 20 5.1 3.8 1.5 0.3 Iris-setosa 21 5.4 3.4 1.7 0.2 Iris-setosa 22 5.1 3.7 1.5 0.4 Iris-setosa 23 4.6 3.6 1.0 0.2 Iris-setosa 24 5.1 3.3 1.7 0.5 Iris-setosa 25 4.8 3.4 1.9 0.2 Iris-setosa 26 5.0 3.0 1.6 0.2 Iris-setosa 27 5.0 3.4 1.6 0.4 Iris-setosa 28 5.2 3.5 1.5 0.2 Iris-setosa 29 5.2 3.4 1.4 0.2 Iris-setosa 30 4.7 3.2 1.6 0.2 Iris-setosa 31 4.8 3.1 1.6 0.2 Iris-setosa 32 5.4 3.4 1.5 0.4 Iris-setosa 33 5.2 4.1 1.5 0.1 Iris-setosa 34 5.5 4.2 1.4 0.2 Iris-setosa 35 4.9 3.1 1.5 0.1 Iris-setosa 36 5.0 3.2 1.2 0.2 Iris-setosa 37 5.5 3.5 1.3 0.2 Iris-setosa 38 4.9 3.1 1.5 0.1 Iris-setosa 39 4.4 3.0 1.3 0.2 Iris-setosa 40 5.1 3.4 1.5 0.2 Iris-setosa 41 5.0 3.5 1.3 0.3 Iris-setosa 42 4.5 2.3 1.3 0.3 Iris-setosa 43 4.4 3.2 1.3 0.2 Iris-setosa 44 5.0 3.5 1.6 0.6 Iris-setosa 45 5.1 3.8 1.9 0.4 Iris-setosa 46 4.8 3.0 1.4 0.3 Iris-setosa 47 5.1 3.8 1.6 0.2 Iris-setosa 48 4.6 3.2 1.4 0.2 Iris-setosa 49 5.3 3.7 1.5 0.2 Iris-setosa 50 5.0 3.3 1.4 0.2 Iris-setosa 51 7.0 3.2 4.7 1.4 Iris-versicolor 52 6.4 3.2 4.5 1.5 Iris-versicolor 53 6.9 3.1 4.9 1.5 Iris-versicolor 54 5.5 2.3 4.0 1.3 Iris-versicolor 55 6.5 2.8 4.6 1.5 Iris-versicolor 56 5.7 2.8 4.5 1.3 Iris-versicolor 57 6.3 3.3 4.7 1.6 Iris-versicolor 58 4.9 2.4 3.3 1.0 Iris-versicolor 59 6.6 2.9 4.6 1.3 Iris-versicolor 60 5.2 2.7 3.9 1.4 Iris-versicolor 61 5.0 2.0 3.5 1.0 Iris-versicolor 62 5.9 3.0 4.2 1.5 Iris-versicolor 63 6.0 2.2 4.0 1.0 Iris-versicolor 64 6.1 2.9 4.7 1.4 Iris-versicolor 65 5.6 2.9 3.6 1.3 Iris-versicolor 66 6.7 3.1 4.4 1.4 Iris-versicolor 67 5.6 3.0 4.5 1.5 Iris-versicolor 68 5.8 2.7 4.1 1.0 Iris-versicolor 69 6.2 2.2 4.5 1.5 Iris-versicolor 70 5.6 2.5 3.9 1.1 Iris-versicolor 71 5.9 3.2 4.8 1.8 Iris-versicolor 72 6.1 2.8 4.0 1.3 Iris-versicolor 73 6.3 2.5 4.9 1.5 Iris-versicolor 74 6.1 2.8 4.7 1.2 Iris-versicolor 75 6.4 2.9 4.3 1.3 Iris-versicolor 76 6.6 3.0 4.4 1.4 Iris-versicolor 77 6.8 2.8 4.8 1.4 Iris-versicolor 78 6.7 3.0 5.0 1.7 Iris-versicolor 79 6.0 2.9 4.5 1.5 Iris-versicolor 80 5.7 2.6 3.5 1.0 Iris-versicolor 81 5.5 2.4 3.8 1.1 Iris-versicolor 82 5.5 2.4 3.7 1.0 Iris-versicolor 83 5.8 2.7 3.9 1.2 Iris-versicolor 84 6.0 2.7 5.1 1.6 Iris-versicolor 85 5.4 3.0 4.5 1.5 Iris-versicolor 86 6.0 3.4 4.5 1.6 Iris-versicolor 87 6.7 3.1 4.7 1.5 Iris-versicolor 88 6.3 2.3 4.4 1.3 Iris-versicolor 89 5.6 3.0 4.1 1.3 Iris-versicolor 90 5.5 2.5 4.0 1.3 Iris-versicolor 91 5.5 2.6 4.4 1.2 Iris-versicolor 92 6.1 3.0 4.6 1.4 Iris-versicolor 93 5.8 2.6 4.0 1.2 Iris-versicolor 94 5.0 2.3 3.3 1.0 Iris-versicolor 95 5.6 2.7 4.2 1.3 Iris-versicolor 96 5.7 3.0 4.2 1.2 Iris-versicolor 97 5.7 2.9 4.2 1.3 Iris-versicolor 98 6.2 2.9 4.3 1.3 Iris-versicolor 99 5.1 2.5 3.0 1.1 Iris-versicolor 100 5.7 2.8 4.1 1.3 Iris-versicolor Rows: 1-100 | Columns: 5Note
vastorbit offers a wide range of sample datasets that are ideal for training and testing purposes. You can explore the full list of available datasets in the Datasets, which provides detailed information on each dataset and how to use them effectively. These datasets are invaluable resources for honing your data analysis and machine learning skills within the vastorbit environment.
Data Exploration¶
Through a quick scatter plot, we can observe that the data has three main clusters.
data.scatter( columns = ["PetalLengthCm", "SepalLengthCm"], by = "Species", )
Elbow Score¶
Let’s compute the optimal
kfor ourKMeansalgorithm and check if it aligns with the three clusters we observed earlier.from vastorbit.machine_learning.model_selection import best_k best_k( input_relation = data, X = data.get_columns(exclude_columns= "Species"), # All columns except Species n_clusters = (1, 100), init = "k-means++", elbow_score_stop = 0.9, )
Note
You can experiment with the Elbow score to determine the optimal number of clusters. The score is based on the ratio of Between -Cluster Sum of Squares to Total Sum of Squares, providing a way to assess the clustering accuracy. A score of 1 indicates a perfect clustering.
See also
elbow(): Draws an Elbow curve.