Loading...

verticapy.machine_learning.vertica.cluster.BisectingKMeans.plot_tree

BisectingKMeans.plot_tree(pic_path: str | None = None, *args, **kwargs) → Source

Draws the input tree. Requires the graphviz module.

Parameters

pic_path: str, optional

Absolute path to save the image of the tree.

*args, **kwargs: Any, optional

Arguments to pass to the to_graphviz method.

Returns

graphviz.Source

graphviz object.

Examples

For this example, we will use the winequality dataset.

import verticapy.datasets as vpd

data = vpd.load_winequality()
123
fixed_acidity
Numeric(8)
123
volatile_acidity
Numeric(9)
123
citric_acid
Numeric(8)
123
residual_sugar
Numeric(9)
123
chlorides
Float(22)
123
free_sulfur_dioxide
Numeric(9)
123
total_sulfur_dioxide
Numeric(9)
123
density
Float(22)
123
pH
Numeric(8)
123
sulphates
Numeric(8)
123
alcohol
Float(22)
123
quality
Integer
123
good
Integer
Abc
color
Varchar(20)
13.90.2250.44.20.0329.0118.00.9893.570.3612.881white
24.70.3350.141.30.03669.0168.00.992123.470.4610.550white
34.70.4550.181.90.03633.0106.00.987463.210.8314.071white
44.70.7850.03.40.03623.0134.00.989813.530.9213.860white
54.90.3450.341.00.06832.0143.00.991383.240.410.150white
64.90.3450.341.00.06832.0143.00.991383.240.410.150white
74.90.420.02.10.04816.042.00.991543.710.7414.071red
85.00.270.41.20.07642.0124.00.992043.320.4710.160white
95.00.310.06.40.04643.0166.00.9943.30.639.960white
105.00.40.54.30.04629.080.00.99023.490.6613.660red
115.00.440.0418.60.03938.0128.00.99853.370.5710.260white
125.10.110.321.60.02812.090.00.990083.570.5212.260white
135.10.140.250.70.03915.089.00.99193.220.439.260white
145.10.1650.225.70.04742.0146.00.99343.180.559.960white
155.10.330.221.60.02718.089.00.98933.510.3812.571white
165.10.330.221.60.02718.089.00.98933.510.3812.571white
175.10.330.221.60.02718.089.00.98933.510.3812.571white
185.10.390.211.70.02715.072.00.98943.50.4512.560white
195.20.20.273.20.04716.093.00.992353.440.5310.171white
205.20.210.311.70.04817.061.00.989533.240.3712.071white
215.20.220.466.20.06641.0187.00.993623.190.429.7333333333333350white
225.20.310.22.40.02727.0117.00.988863.560.4513.071white
235.20.320.251.80.10313.050.00.99573.380.559.250red
245.20.340.376.20.03142.0133.00.990763.250.4112.560white
255.20.360.021.60.03124.0104.00.98963.440.3512.260white
265.20.3650.0813.50.04137.0142.00.9973.460.399.960white
275.20.480.041.60.05419.0106.00.99273.540.6212.271red
285.20.50.182.00.03623.0129.00.989493.360.7713.471white
295.30.160.391.00.02840.0101.00.991563.570.5910.660white
305.30.160.391.00.02840.0101.00.991563.570.5910.660white
315.30.1650.241.10.05125.0105.00.99253.320.479.150white
325.30.230.560.90.04146.0141.00.991193.160.629.750white
335.30.30.31.20.02925.093.00.987423.310.413.671white
345.30.330.31.20.04825.0119.00.990453.320.6211.360white
355.30.360.276.30.02840.0132.00.991863.370.411.660white
365.30.360.276.30.02840.0132.00.991863.370.411.660white
375.30.40.253.90.03145.0130.00.990723.310.5811.7571white
385.30.470.112.20.04816.089.00.991823.540.8813.671red
395.30.470.112.20.04816.089.00.991823.540.8813.566666666666771red
405.30.7150.191.50.1617.062.00.993953.620.6111.050red
415.40.220.291.20.04569.0152.00.991783.760.6311.071white
425.40.5950.12.80.04226.080.00.99323.360.389.350white
435.40.740.091.70.08916.026.00.994023.670.5611.660red
445.50.120.331.00.03823.0131.00.991643.250.459.850white
455.50.120.331.00.03823.0131.00.991643.250.459.850white
465.50.140.274.60.02922.0104.00.99493.340.449.050white
475.50.140.274.60.02922.0104.00.99493.340.449.050white
485.50.160.311.20.02631.068.00.98983.330.4411.6560white
495.50.160.311.20.02631.068.00.98983.330.4411.633333333333360white
505.50.180.225.50.03710.086.00.991563.460.4412.250white
515.50.240.451.70.04622.0113.00.992243.220.4810.050white
525.50.290.31.10.02220.0110.00.988693.340.3812.871white
535.50.310.293.00.02716.0102.00.990673.230.5611.260white
545.50.320.454.90.02825.0191.00.99223.510.4911.571white
555.50.350.351.10.04514.0167.00.9923.340.689.960white
565.50.3750.381.70.03617.098.00.991423.290.3910.560white
575.60.150.265.550.05151.0139.00.993363.470.511.060white
585.60.150.315.30.0388.079.00.99233.30.3910.560white
595.60.160.271.40.04453.0168.00.99183.280.3710.160white
605.60.1750.290.80.04320.067.00.991123.280.489.960white
615.60.1850.197.10.04836.0110.00.994383.260.419.560white
625.60.1850.197.10.04836.0110.00.994383.260.419.560white
635.60.220.321.20.02429.097.00.988233.20.4613.0571white
645.60.260.181.40.03418.0135.00.991743.320.3510.260white
655.60.260.265.70.03112.080.00.99233.250.3810.850white
665.60.260.511.40.02925.093.00.994283.230.4910.560white
675.60.280.284.20.04452.0158.00.9923.350.4410.771white
685.60.30.16.40.04334.0142.00.993823.140.489.850white
695.60.350.145.00.04648.0198.00.99373.30.7110.350white
705.60.490.134.50.03917.0116.00.99073.420.913.771white
715.60.490.134.50.03917.0116.00.99073.420.913.771white
725.60.660.02.20.0873.011.00.993783.710.6312.871red
735.60.660.02.20.0873.011.00.993783.710.6312.871red
745.70.150.4711.40.03549.0128.00.994563.030.3410.581white
755.70.180.262.20.02321.095.00.98933.070.5412.360white
765.70.180.361.20.0469.071.00.991993.70.6810.971white
775.70.20.32.50.04638.0125.00.992763.340.59.960white
785.70.210.320.90.03838.0121.00.990743.240.4610.660white
795.70.210.374.50.0458.0140.00.993323.290.6210.660white
805.70.220.216.00.04441.0113.00.998623.220.468.960white
815.70.220.216.00.04441.0113.00.998623.220.468.960white
825.70.220.216.00.04441.0113.00.998623.220.468.960white
835.70.220.216.00.04441.0113.00.998623.220.468.960white
845.70.220.216.00.04441.0113.00.998623.220.468.960white
855.70.220.293.50.0427.0146.00.989993.170.3612.160white
865.70.230.289.650.02526.0121.00.99253.280.3811.360white
875.70.250.2612.50.04952.5106.00.996913.080.459.460white
885.70.250.2612.50.04952.5120.00.996913.080.459.460white
895.70.250.2711.50.0424.0120.00.994113.330.3110.860white
905.70.260.2417.80.05923.0124.00.997733.30.510.150white
915.70.260.2417.80.05923.0124.00.997733.30.510.150white
925.70.260.2417.80.05923.0124.00.997733.30.510.150white
935.70.270.321.20.04620.0155.00.99343.80.4110.260white
945.70.280.2417.50.04460.0167.00.99893.310.449.450white
955.70.320.181.40.02926.0104.00.99063.440.3711.060white
965.70.320.384.750.03323.094.00.9913.420.4211.871white
975.70.360.344.20.02621.077.00.99073.410.4511.960white
985.80.140.156.10.04227.0123.00.993623.060.69.960white
995.80.150.321.20.03714.0119.00.991373.190.510.260white
1005.80.170.341.80.04596.0170.00.990353.380.911.881white
Rows: 1-100 | Columns: 14

Let’s import the model:

from verticapy.machine_learning.vertica import BisectingKMeans

Then we can create the model:

model = BisectingKMeans(
    n_cluster = 8,
    bisection_iterations = 1,
    split_method = 'sum_squares',
    min_divisible_cluster_size = 2,
    distance_method = "euclidean",
    init = "kmeanspp",
    max_iter = 300,
    tol = 1e-4,
)

We can then fit the model:

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


======
BKTree
======
center_id|density |sulphates|withinss |totWithinss|bisection_level|cluster_size|parent|left_child|right_child
---------+--------+---------+---------+-----------+---------------+------------+------+----------+-----------
    0    | 0.99470| 0.53127 |143.90056| 143.90056 |       0       |    6497    |      |    1     |     2     
    1    | 0.99573| 0.73315 |30.67213 | 60.86574  |       1       |    1551    |  0   |    9     |    10     
    2    | 0.99437| 0.46796 |30.19361 | 60.86574  |       1       |    4946    |  0   |    3     |     4     
    3    | 0.99490| 0.52428 | 5.15288 | 39.79475  |       2       |    2835    |  2   |    5     |     6     
    4    | 0.99367| 0.39233 | 3.96974 | 39.79475  |       2       |    2111    |  2   |    7     |     8     
    5    | 0.99484| 0.48931 | 0.60308 | 35.98662  |       3       |    1484    |  3   |    11    |    12     
    6    | 0.99496| 0.56269 | 0.74167 | 35.98662  |       3       |    1351    |  3   |          |           
    7    | 0.99397| 0.41584 | 0.83476 | 33.37441  |       4       |    1459    |  4   |    13    |    14     
    8    | 0.99300| 0.33971 | 0.52276 | 33.37441  |       4       |    652     |  4   |          |           
    9    | 0.99566| 0.69586 | 6.34160 | 16.52981  |       5       |    1375    |  1   |          |           
   10    | 0.99625| 1.02443 | 7.48592 | 16.52981  |       5       |    176     |  1   |          |           
   11    | 0.99462| 0.46945 | 0.04983 | 16.08356  |       6       |    642     |  5   |          |           
   12    | 0.99501| 0.50445 | 0.10701 | 16.08356  |       6       |    842     |  5   |          |           
   13    | 0.99364| 0.39346 | 0.09220 | 15.44205  |       7       |    682     |  7   |          |           
   14    | 0.99426| 0.43548 | 0.10106 | 15.44205  |       7       |    777     |  7   |          |           


=======
Metrics
=======
                       Measure                       |  Value  
-----------------------------------------------------+---------
                Total sum of squares                 |143.90056
         Total within-cluster sum of squares         |15.44205 
           Between-cluster sum of squares            |128.45851
Between-cluster sum of squares / Total sum of squares|89.26894 
      Sum of squares for cluster 1, center_id 9      | 6.34160 
     Sum of squares for cluster 2, center_id 10      | 7.48592 
     Sum of squares for cluster 3, center_id 11      | 0.04983 
     Sum of squares for cluster 4, center_id 12      | 0.10701 
      Sum of squares for cluster 5, center_id 6      | 0.74167 
     Sum of squares for cluster 6, center_id 13      | 0.09220 
     Sum of squares for cluster 7, center_id 14      | 0.10106 
      Sum of squares for cluster 8, center_id 8      | 0.52276 


===========
call_string
===========
bisecting_kmeans('"public"."_verticapy_tmp_bisectingkmeans_v_mldb_4ec8c1f8979611efa8720242ac120002_"', '"public"."_verticapy_tmp_view_v_mldb_4efa71d0979611efa8720242ac120002_"', '"density", "sulphates"', 8
USING PARAMETERS bisection_iterations=1, split_method='SUM_SQUARES', min_divisible_cluster_size=2, distance_method='euclidean', kmeans_center_init_method='kmeanspp', kmeans_epsilon=0.0001, kmeans_max_iterations=300, key_columns=''"density", "sulphates"'')

===============
Additional Info
===============
        Name         |Value
---------------------+-----
   num_of_clusters   |  8  
dimensions_of_dataset|  2  
num_of_clusters_found|  8  
  height_of_BKTree   |  5  

We can plot the tree conveniently:

../_images/machine_learning_vertica_cluster_BKMeans_plot_tree.png

Note

Refer to BisectingKMeans for more information about the different methods and usages.