Loading...

vastorbit.machine_learning.vast.cluster.BisectingKMeans

class vastorbit.machine_learning.vast.cluster.BisectingKMeans(name: str = None, overwrite_model: bool = False, **kwargs)

Creates a BisectingKMeans object using the VAST bisecting k-means algorithm. k-means clustering is a method of vector quantization, originally from signal processing, that aims to partition n observations into k clusters. Each observation belongs to the cluster with the nearest mean (cluster centers or cluster centroid), which serves as a prototype of the cluster. This results in a partitioning of the data space into Voronoi cells. Bisecting k-means combines k-means and hierarchical clustering.

Parameters:
  • name (str, optional) – Name of the model. The model is stored in the database.

  • overwrite_model (bool, optional) – If set to True, training a model with the same name as an existing model overwrites the existing model.

  • **kwargs (scikit-learn model parameters.)

Variables:
  • created (Many attributes are)

  • phase. (during the fitting)

  • feature_names_in_ (cluster_centers_, labels_, inertia_, n_features_in_,)

  • note:: (..) – All attributes can be accessed using the get_attributes() method.

Examples

The following examples provide a basic understanding of usage. For more detailed examples, please refer to the Machine Learning or the Examples section on the website.

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 from vastorbit are used as intended without interfering with functions from other libraries.

For this example, we will use the winequality dataset.

import vastorbit.datasets as vod

data = vod.load_winequality()
123
fixed_acidity
Decimal(6, 3)
123
volatile_acidity
Decimal(7, 4)
123
citric_acid
Decimal(6, 3)
123
residual_sugar
Decimal(7, 3)
123
chlorides
Double
123
free_sulfur_dioxide
Decimal(7, 2)
123
total_sulfur_dioxide
Decimal(7, 2)
123
density
Double
123
ph
Decimal(6, 3)
123
sulphates
Decimal(6, 3)
123
alcohol
Double
123
quality
Integer
123
good
Integer
Abc
color
Varchar(20)
16.30.670.4812.60.05257.0222.00.99793.170.529.360white
27.40.40.295.40.04431.0122.00.9943.30.511.181white
37.10.260.312.20.04429.0128.00.99373.340.6410.981white
49.00.310.486.60.04311.073.00.99382.90.3811.650white
56.30.390.246.90.0699.0117.00.99423.150.3510.240white
68.20.220.366.80.03412.090.00.99443.010.3810.581white
77.10.190.283.60.03316.078.00.9932.910.7811.460white
87.30.250.3613.10.0535.0200.00.99863.040.468.971white
97.90.20.341.20.0429.0118.00.99323.140.4110.660white
107.10.260.325.90.03739.097.00.99343.310.411.660white
117.00.20.345.70.03532.083.00.99283.190.4611.560white
126.90.30.334.10.03526.0155.00.99253.250.7912.381white
138.10.290.497.10.04222.0124.00.99443.140.4110.860white
145.80.170.31.40.03755.0130.00.99093.290.3811.360white
155.90.4150.020.80.03822.063.00.99323.360.369.350white
166.60.230.261.30.04516.0128.00.99343.360.610.060white
178.60.550.3515.550.05735.5366.51.00013.040.6311.030white
186.90.350.741.00.04418.0132.00.9923.130.5510.250white
197.60.140.741.60.0427.0103.00.99163.070.410.871white
209.20.280.4911.80.04229.0137.00.9983.10.3410.140white
216.20.180.494.50.04717.090.00.99193.270.3711.660white
225.30.1650.241.10.05125.0105.00.99253.320.479.150white
239.80.250.7410.00.05636.0225.00.99773.060.4310.040white
248.10.290.497.10.04222.0124.00.99443.140.4110.860white
256.80.220.490.90.05226.0128.00.9913.250.3511.460white
267.20.220.491.00.04534.0140.00.993.050.3412.760white
277.40.250.491.10.04235.0156.00.99173.130.5511.350white
288.20.180.491.10.03328.081.00.99233.00.6810.471white
296.10.220.491.50.05118.087.00.99283.30.469.650white
307.00.390.241.00.0488.0119.00.99233.00.3110.140white
316.10.220.491.50.05118.087.00.99283.30.469.650white
326.50.360.492.90.0316.094.00.99023.10.4912.171white
337.10.290.491.20.03132.099.00.98933.070.3312.260white
347.40.250.491.10.04235.0156.00.99173.130.5511.350white
356.90.230.2414.20.05319.094.00.99823.170.59.650white
368.50.560.7417.850.05151.0243.01.00052.990.79.250white
378.20.180.491.10.03328.081.00.99233.00.6810.471white
386.30.230.497.10.0567.0210.00.99513.230.349.550white
396.10.250.497.60.05267.0226.00.99563.160.478.950white
407.20.260.7413.60.0556.0162.00.9983.030.448.850white
417.20.310.241.40.05717.0117.00.99283.160.3510.550white
428.00.250.491.20.06127.0117.00.99383.080.349.450white
437.00.180.495.30.0434.0125.00.99143.240.412.260white
447.80.430.4913.00.03337.0158.00.99553.140.3511.360white
458.30.20.744.450.04433.0130.00.99243.250.4212.260white
466.30.270.491.20.06335.092.00.99113.380.4212.260white
477.40.160.491.20.05518.0150.00.99173.230.4711.260white
487.40.160.491.20.05518.0150.00.99173.230.4711.260white
496.90.190.496.60.03649.0172.00.99323.20.2711.560white
507.80.430.4913.00.03337.0158.00.99553.140.3511.360white
517.20.40.491.10.04811.0138.00.99293.010.429.350white
527.80.430.4913.00.03337.0158.00.99553.140.3511.360white
537.60.520.4914.00.03437.0156.00.99583.140.3811.871white
548.30.210.4919.80.05450.0231.01.00122.990.549.250white
556.90.340.7411.20.06944.0150.00.99683.00.819.250white
566.30.270.491.20.06335.092.00.99113.380.4212.260white
578.30.20.744.450.04433.0130.00.99243.250.4212.260white
587.10.220.742.70.04442.0144.00.9913.310.4112.260white
597.90.110.494.50.04827.0133.00.99463.240.4210.660white
608.50.170.743.60.0529.0128.00.99283.280.412.460white
616.40.1450.495.40.04854.0164.00.99463.560.4410.860white
627.40.160.491.20.05518.0150.00.99173.230.4711.260white
638.30.190.491.20.05111.0137.00.99183.060.4611.060white
648.00.440.499.10.03146.0151.00.99263.160.2712.781white
657.00.20.740.80.04419.0163.00.99313.460.5310.250white
666.90.190.496.60.03649.0172.00.99323.20.2711.560white
677.10.250.493.00.0330.096.00.99033.130.3912.371white
686.50.240.241.60.04615.060.00.99283.190.399.850white
697.20.40.491.10.04811.0138.00.99293.010.429.350white
707.60.520.4914.00.03437.0156.00.99583.140.3811.871white
717.80.430.4913.00.03337.0158.00.99553.140.3511.360white
727.80.210.491.350.0526.048.00.99113.150.2811.450white
737.00.20.495.90.03839.0128.00.99383.210.4810.860white
746.90.250.243.60.05713.085.00.99422.990.489.540white
757.20.080.491.30.0518.0148.00.99453.460.4410.260white
767.10.850.498.70.02840.0184.00.99623.220.3610.750white
777.60.510.241.20.0410.0104.00.9923.050.2910.860white
787.90.220.244.60.04439.0159.00.99272.990.2811.560white
797.70.160.492.00.05620.0124.00.99483.320.4910.760white
807.20.080.491.30.0518.0148.00.99453.460.4410.260white
816.60.250.241.70.04826.0124.00.99423.370.610.160white
826.70.160.492.40.04657.0187.00.99523.620.8110.460white
836.90.250.243.60.05713.085.00.99422.990.489.540white
847.50.320.244.60.0538.0134.00.99583.140.59.130white
857.40.280.491.50.03420.0126.00.99182.980.3910.660white
866.20.150.490.90.03317.051.00.99323.30.79.460white
876.70.250.7419.40.05444.0169.01.00043.510.459.860white
886.50.260.7413.30.04468.0224.00.99723.180.549.560white
897.90.160.7417.850.03752.0187.00.99982.990.419.350white
905.60.1850.491.10.0328.0117.00.99183.550.4510.360white
917.50.20.491.30.0318.097.00.99183.060.6211.150white
928.00.30.499.40.04647.0188.00.99643.140.4810.050white
938.00.340.499.00.03339.0180.00.99363.130.3812.381white
947.70.350.498.650.03342.0186.00.99313.140.3812.481white
957.60.290.499.60.0345.0197.00.99383.130.3812.371white
966.70.620.241.10.0396.062.00.99343.410.3210.450white
976.80.270.491.20.04435.0126.00.993.130.4812.171white
987.70.270.491.80.04123.086.00.99143.160.4212.560white
996.70.510.242.10.04314.0155.00.99043.220.613.060white
1007.40.190.499.30.0326.0132.00.9942.990.3211.071white
Rows: 1-100 | Columns: 14

Note

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.

Model Initialization

First we import the BisectingKMeans model:

from vastorbit.machine_learning.vast import BisectingKMeans

Then we can create the model:

model = BisectingKMeans(
    n_clusters = 8,
    algorithm = 'lloyd',
    bisecting_strategy = "biggest_inertia",
    max_iter = 300,
    tol = 1e-4,
)

Important

The model name is crucial for the model management system and versioning. It’s highly recommended to provide a name if you plan to reuse the model later.

Model Training

We can now fit the model:

model.fit(data, X = ["density", "sulphates"])

Important

To train a model, you can directly use the VastFrame or the name of the relation stored in the database. The test set is optional and is only used to compute the test metrics. In vastorbit, we don’t work using X matrices and y vectors. Instead, we work directly with lists of predictors and the response name.

Hint

For clustering and anomaly detection, the use of predictors is optional. In such cases, all available predictors are considered, which can include solely numerical variables or a combination of numerical and categorical variables, depending on the model’s capabilities.

Metrics

You can also find the cluster positions by:

model.clusters_

In order to get the size of each cluster, you can use:

model.cluster_size_

To evaluate the model, various attributes are computed, such as the between sum of squares, the total within clusters sum of squares, and the total sum of squares.

model.between_clusters_ss_
model.total_within_clusters_ss_
model.total_ss_

You also have access to the sum of squares of each cluster.

model.cluster_i_ss_

Some other useful attributes can be used to evaluate the model, like the Elbow Score (the bigger it is, the better it is).

model.elbow_score_

Prediction

Predicting or ranking the dataset is straight-forward:

model.predict(data, ["density", "sulphates"])
123
fixed_acidity
Decimal(6, 3)
123
volatile_acidity
Decimal(7, 4)
123
citric_acid
Decimal(6, 3)
123
residual_sugar
Decimal(7, 3)
123
chlorides
Double
123
free_sulfur_dioxide
Decimal(7, 2)
123
total_sulfur_dioxide
Decimal(7, 2)
123
density
Double
123
ph
Decimal(6, 3)
123
sulphates
Decimal(6, 3)
123
alcohol
Double
123
quality
Integer
123
good
Integer
Abc
color
Varchar(20)
123
BisectingKMeans_defaultvastorbittmpbisectingkmeansmemoryadmin9921f18e754811f1becdea8c65480234
Integer
16.30.670.4812.60.05257.0222.00.99793.170.529.360white6
27.40.40.295.40.04431.0122.00.9943.30.511.181white6
37.10.260.312.20.04429.0128.00.99373.340.6410.981white6
49.00.310.486.60.04311.073.00.99382.90.3811.650white6
56.30.390.246.90.0699.0117.00.99423.150.3510.240white6
68.20.220.366.80.03412.090.00.99443.010.3810.581white6
77.10.190.283.60.03316.078.00.9932.910.7811.460white6
87.30.250.3613.10.0535.0200.00.99863.040.468.971white6
97.90.20.341.20.0429.0118.00.99323.140.4110.660white6
107.10.260.325.90.03739.097.00.99343.310.411.660white6
117.00.20.345.70.03532.083.00.99283.190.4611.560white6
126.90.30.334.10.03526.0155.00.99253.250.7912.381white6
138.10.290.497.10.04222.0124.00.99443.140.4110.860white6
145.80.170.31.40.03755.0130.00.99093.290.3811.360white6
155.90.4150.020.80.03822.063.00.99323.360.369.350white6
166.60.230.261.30.04516.0128.00.99343.360.610.060white6
178.60.550.3515.550.05735.5366.51.00013.040.6311.030white6
186.90.350.741.00.04418.0132.00.9923.130.5510.250white6
197.60.140.741.60.0427.0103.00.99163.070.410.871white6
209.20.280.4911.80.04229.0137.00.9983.10.3410.140white6
216.20.180.494.50.04717.090.00.99193.270.3711.660white6
225.30.1650.241.10.05125.0105.00.99253.320.479.150white6
239.80.250.7410.00.05636.0225.00.99773.060.4310.040white6
248.10.290.497.10.04222.0124.00.99443.140.4110.860white6
256.80.220.490.90.05226.0128.00.9913.250.3511.460white6
267.20.220.491.00.04534.0140.00.993.050.3412.760white6
277.40.250.491.10.04235.0156.00.99173.130.5511.350white6
288.20.180.491.10.03328.081.00.99233.00.6810.471white6
296.10.220.491.50.05118.087.00.99283.30.469.650white6
307.00.390.241.00.0488.0119.00.99233.00.3110.140white6
316.10.220.491.50.05118.087.00.99283.30.469.650white6
326.50.360.492.90.0316.094.00.99023.10.4912.171white6
337.10.290.491.20.03132.099.00.98933.070.3312.260white6
347.40.250.491.10.04235.0156.00.99173.130.5511.350white6
356.90.230.2414.20.05319.094.00.99823.170.59.650white6
368.50.560.7417.850.05151.0243.01.00052.990.79.250white6
378.20.180.491.10.03328.081.00.99233.00.6810.471white6
386.30.230.497.10.0567.0210.00.99513.230.349.550white6
396.10.250.497.60.05267.0226.00.99563.160.478.950white6
407.20.260.7413.60.0556.0162.00.9983.030.448.850white6
417.20.310.241.40.05717.0117.00.99283.160.3510.550white6
428.00.250.491.20.06127.0117.00.99383.080.349.450white6
437.00.180.495.30.0434.0125.00.99143.240.412.260white6
447.80.430.4913.00.03337.0158.00.99553.140.3511.360white6
458.30.20.744.450.04433.0130.00.99243.250.4212.260white6
466.30.270.491.20.06335.092.00.99113.380.4212.260white6
477.40.160.491.20.05518.0150.00.99173.230.4711.260white6
487.40.160.491.20.05518.0150.00.99173.230.4711.260white6
496.90.190.496.60.03649.0172.00.99323.20.2711.560white6
507.80.430.4913.00.03337.0158.00.99553.140.3511.360white6
517.20.40.491.10.04811.0138.00.99293.010.429.350white6
527.80.430.4913.00.03337.0158.00.99553.140.3511.360white6
537.60.520.4914.00.03437.0156.00.99583.140.3811.871white6
548.30.210.4919.80.05450.0231.01.00122.990.549.250white6
556.90.340.7411.20.06944.0150.00.99683.00.819.250white6
566.30.270.491.20.06335.092.00.99113.380.4212.260white6
578.30.20.744.450.04433.0130.00.99243.250.4212.260white6
587.10.220.742.70.04442.0144.00.9913.310.4112.260white6
597.90.110.494.50.04827.0133.00.99463.240.4210.660white6
608.50.170.743.60.0529.0128.00.99283.280.412.460white6
616.40.1450.495.40.04854.0164.00.99463.560.4410.860white6
627.40.160.491.20.05518.0150.00.99173.230.4711.260white6
638.30.190.491.20.05111.0137.00.99183.060.4611.060white6
648.00.440.499.10.03146.0151.00.99263.160.2712.781white6
657.00.20.740.80.04419.0163.00.99313.460.5310.250white6
666.90.190.496.60.03649.0172.00.99323.20.2711.560white6
677.10.250.493.00.0330.096.00.99033.130.3912.371white6
686.50.240.241.60.04615.060.00.99283.190.399.850white6
697.20.40.491.10.04811.0138.00.99293.010.429.350white6
707.60.520.4914.00.03437.0156.00.99583.140.3811.871white6
717.80.430.4913.00.03337.0158.00.99553.140.3511.360white6
727.80.210.491.350.0526.048.00.99113.150.2811.450white6
737.00.20.495.90.03839.0128.00.99383.210.4810.860white6
746.90.250.243.60.05713.085.00.99422.990.489.540white6
757.20.080.491.30.0518.0148.00.99453.460.4410.260white6
767.10.850.498.70.02840.0184.00.99623.220.3610.750white6
777.60.510.241.20.0410.0104.00.9923.050.2910.860white6
787.90.220.244.60.04439.0159.00.99272.990.2811.560white6
797.70.160.492.00.05620.0124.00.99483.320.4910.760white6
807.20.080.491.30.0518.0148.00.99453.460.4410.260white6
816.60.250.241.70.04826.0124.00.99423.370.610.160white6
826.70.160.492.40.04657.0187.00.99523.620.8110.460white6
836.90.250.243.60.05713.085.00.99422.990.489.540white6
847.50.320.244.60.0538.0134.00.99583.140.59.130white6
857.40.280.491.50.03420.0126.00.99182.980.3910.660white6
866.20.150.490.90.03317.051.00.99323.30.79.460white6
876.70.250.7419.40.05444.0169.01.00043.510.459.860white6
886.50.260.7413.30.04468.0224.00.99723.180.549.560white6
897.90.160.7417.850.03752.0187.00.99982.990.419.350white6
905.60.1850.491.10.0328.0117.00.99183.550.4510.360white6
917.50.20.491.30.0318.097.00.99183.060.6211.150white6
928.00.30.499.40.04647.0188.00.99643.140.4810.050white6
938.00.340.499.00.03339.0180.00.99363.130.3812.381white6
947.70.350.498.650.03342.0186.00.99313.140.3812.481white6
957.60.290.499.60.0345.0197.00.99383.130.3812.371white6
966.70.620.241.10.0396.062.00.99343.410.3210.450white6
976.80.270.491.20.04435.0126.00.993.130.4812.171white6
987.70.270.491.80.04123.086.00.99143.160.4212.560white6
996.70.510.242.10.04314.0155.00.99043.220.613.060white6
1007.40.190.499.30.0326.0132.00.9942.990.3211.071white6
Rows: 1-100 | Columns: 15

As shown above, a new column has been created, containing the bisected clusters.

Plots - Cluster Plot

Plots highlighting the different clusters can be easily drawn using:

model.plot()

Plots - Tree

Tree models can be visualized by drawing their tree plots. For more examples, check out Machine Learning - Tree Plots.

model.plot_tree()
../_images/machine_learning_VAST_tree_bisect_km_.png

Note

The above example may not render properly in the doc because of the huge size of the tree. But it should render nicely in jupyter environment.

In order to plot graph using graphviz separately, you can extract the graphviz DOT file code as follows:

model.to_graphviz()

This string can then be copied into a DOT file which can be parsed by graphviz.

Plots - Contour

In order to understand the parameter space, we can also look at the contour plots:

model.contour()

Note

Machine learning models with two predictors can usually benefit from their own contour plot. This visual representation aids in exploring predictions and gaining a deeper understanding of how these models perform in different scenarios. Please refer to Contour Plot for more examples.

Parameter Modification

In order to see the parameters:

model.get_params()

And to manually change some of the parameters:

model.set_params({'n_clusters': 5})

Model Exporting

To Memmodel

model.to_memmodel()

Note

MemModel objects serve as in-memory representations of machine learning models. They can be used for both in-database and in-memory prediction tasks. These objects can be pickled in the same way that you would pickle a scikit-learn model.

The preceding methods for exporting the model use MemModel, and it is recommended to use MemModel directly.

To SQL

You can get the SQL query equivalent of the GB model by:

model.to_sql()

Note

This SQL query can be directly used in any database.

Deploy SQL

To get the SQL query which uses VAST functions use below:

model.deploySQL()

To Python

To obtain the prediction function in Python syntax, use the following code:

X = [[0.9, 0.5]]
model.to_python()(X)

Hint

The to_python() method is used to retrieve the anomaly score. For specific details on how to use this method for different model types, refer to the relevant documentation for each model.

__init__(name: str = None, overwrite_model: bool = False, **kwargs) None

Methods

__init__([name, overwrite_model])

contour([nbins, chart])

Draws the model's contour plot.

deploySQL([X])

Returns the SQL code needed to deploy the model.

drop()

Drops the model from the VAST DataBase.

export_models(name, path[, kind])

Exports machine learning models.

features_importance([tree_id, show, chart])

Computes the model's features importance.

fit(input_relation[, X, return_report])

Trains the model.

get_attributes([attr_name])

Returns the model attributes.

get_match_index(x, col_list[, str_check])

Returns the matching index.

get_params()

Returns the parameters of the model.

get_plotting_lib([class_name, chart, ...])

Returns the first available library (Plotly, Matplotlib) to draw a specific graphic.

get_tree()

Returns a table containing information about the BK-tree.

import_models(path[, schema, kind])

Imports machine learning models.

plot([max_nb_points, chart])

Draws the model.

plot_tree([pic_path])

Draws the input tree.

plot_voronoi([max_nb_points, plot_crosses, ...])

Draws the Voronoi Graph of the model.

predict(vdf[, X, name, inplace])

Makes predictions using the input relation.

set_params([parameters])

Sets the parameters of the model.

summarize()

Summarizes the model.

to_binary(path)

Exports the model to the VAST Binary format.

to_graphviz([round_score, percent, ...])

Returns the code for a Graphviz tree.

to_memmodel()

Converts the model to an InMemory object that can be used for different types of predictions.

to_python([return_proba, ...])

Returns the Python function needed for in-memory scoring without using built-in VAST functions.

to_sql([X, return_proba, ...])

Returns the SQL code needed to deploy the model without using built-in VAST functions.

Attributes