Loading...

vastorbit.machine_learning.vast.linear_model.ElasticNet

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

Creates an ElasticNet object using scikit-learn for training and the scalability of VAST DataBase for the inferences.

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)

  • coef_ (numpy.array) – The regression coefficients. The order of coefficients is the same as the order of columns used during the fitting phase.

  • intercept_ (float) – The expected value of the dependent variable when all independent variables are zero, serving as the baseline or constant term in the model.

  • feature_importances_ (numpy.array) – The importance of features is computed through the model coefficients, which are normalized based on their range. Subsequently, an activation function calculates the final score. It is necessary to use the features_importance() method to compute it initially, and the computed values will be subsequently utilized for subsequent calls.

  • 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.

You can easily divide your dataset into training and testing subsets using the VastFrame.train_test_split() method. This is a crucial step when preparing your data for machine learning, as it allows you to evaluate the performance of your models accurately.

data = vod.load_winequality()
train, test = data.train_test_split(test_size = 0.2)

Warning

In this case, vastorbit utilizes seeded randomization to guarantee the reproducibility of your data split. However, please be aware that this approach may lead to reduced performance. For a more efficient data split, you can use the VastFrame.to_db() method to save your results into tables or temporary tables. This will help enhance the overall performance of the process.

Model Initialization

First we import the ElasticNet model:

from vastorbit.machine_learning.vast import ElasticNet

Then we can create the model:

model = ElasticNet(
    tol = 1e-6,
    alpha = 1,
    max_iter = 100,
    l1_ratio = 0.5,
    fit_intercept = True,
)

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(
    train,
    [
        "fixed_acidity",
        "volatile_acidity",
        "citric_acid",
        "residual_sugar",
        "chlorides",
        "density",
    ],
    "quality",
    test,
)

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.

Metrics

We can get the entire report using:

model.report()
value
explained_variance-4.440892098500626e-16
max_error3.1941710094576337
median_absolute_error0.7353323567135761
mean_absolute_error0.6889727136034196
mean_squared_error0.8181429842639966
root_mean_squared_error0.8763680325741421
r2-0.0005676871269888473
r2_adj-0.005153940849496053
aic-249.98454845124127
bic-213.86863412676
Rows: 1-10 | Columns: 2

Important

Most metrics are computed using a single SQL query, but some of them might require multiple SQL queries. Selecting only the necessary metrics in the report can help optimize performance. E.g. model.report(metrics = ["mse", "r2"]).

For LinearModel, we can easily get the ANOVA table using:

model.report(metrics = "anova")
DfSSMSFp_value
Regression60.233485972211879440.038914328701979910.0489464928891941360.9995252216135188
Residual13091040.70492621826680.7950381407320601
Total13151038.4468085106537
Rows: 1-3 | Columns: 6

You can also use the LinearModel.score function to compute the R-squared value:

model.score()

Prediction

Prediction is straight-forward:

model.predict(
    test,
    [
        "fixed_acidity",
        "volatile_acidity",
        "citric_acid",
        "residual_sugar",
        "chlorides",
        "density",
    ],
    "prediction",
)
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
seedrand
Decimal(26, 6)
123
prediction
Double
16.30.670.4812.60.05257.0222.00.99793.170.529.360white0.05.805828990542366
29.00.310.486.60.04311.073.00.99382.90.3811.650white0.175.805828990542366
37.10.260.325.90.03739.097.00.99343.310.411.660white0.015.805828990542366
46.90.350.741.00.04418.0132.00.9923.130.5510.250white0.05.805828990542366
56.80.220.490.90.05226.0128.00.9913.250.3511.460white0.145.805828990542366
67.20.220.491.00.04534.0140.00.993.050.3412.760white0.135.805828990542366
78.20.180.491.10.03328.081.00.99233.00.6810.471white0.045.805828990542366
87.20.260.7413.60.0556.0162.00.9983.030.448.850white0.085.805828990542366
97.20.310.241.40.05717.0117.00.99283.160.3510.550white0.05.805828990542366
107.40.160.491.20.05518.0150.00.99173.230.4711.260white0.25.805828990542366
117.80.430.4913.00.03337.0158.00.99553.140.3511.360white0.095.805828990542366
128.30.210.4919.80.05450.0231.01.00122.990.549.250white0.155.805828990542366
137.40.160.491.20.05518.0150.00.99173.230.4711.260white0.15.805828990542366
148.30.190.491.20.05111.0137.00.99183.060.4611.060white0.135.805828990542366
158.00.440.499.10.03146.0151.00.99263.160.2712.781white0.035.805828990542366
167.80.430.4913.00.03337.0158.00.99553.140.3511.360white0.185.805828990542366
177.90.220.244.60.04439.0159.00.99272.990.2811.560white0.195.805828990542366
185.60.1850.491.10.0328.0117.00.99183.550.4510.360white0.185.805828990542366
197.50.20.491.30.0318.097.00.99183.060.6211.150white0.175.805828990542366
207.60.290.499.60.0345.0197.00.99383.130.3812.371white0.065.805828990542366
216.80.270.491.20.04435.0126.00.993.130.4812.171white0.195.805828990542366
227.70.270.491.80.04123.086.00.99143.160.4212.560white0.195.805828990542366
236.70.510.242.10.04314.0155.00.99043.220.613.060white0.175.805828990542366
246.80.360.244.60.03924.0124.00.99093.270.3412.671white0.165.805828990542366
257.80.260.747.50.04459.0160.00.9963.220.6410.060white0.175.805828990542366
266.60.30.241.20.03417.0121.00.99333.130.369.250white0.115.805828990542366
277.90.280.497.70.04548.0195.00.99543.040.5511.060white0.125.805828990542366
287.40.270.491.10.03733.0156.00.9923.150.5411.160white0.025.805828990542366
297.20.270.7412.50.03747.0156.00.99813.040.448.750white0.065.805828990542366
306.00.170.491.00.03426.0106.00.9923.210.429.860white0.115.805828990542366
317.10.180.7415.60.04444.0176.00.99963.380.679.060white0.095.805828990542366
327.10.360.241.80.02532.0102.00.99033.340.5912.860white0.05.805828990542366
337.90.180.495.20.05136.0157.00.99533.180.4810.660white0.185.805828990542366
348.80.350.491.00.03614.056.00.9922.960.3310.540white0.025.805828990542366
357.10.340.491.50.02726.0126.00.993.30.3312.271white0.145.805828990542366
369.10.280.492.00.05910.0112.00.99583.150.4610.150white0.115.805828990542366
377.40.30.498.20.05549.0188.00.99743.520.589.760white0.035.805828990542366
387.60.310.4913.40.06250.0191.00.99893.220.539.040white0.085.805828990542366
397.30.30.7413.50.03946.0165.00.99823.020.48.750white0.045.805828990542366
407.00.270.741.50.03627.0122.00.99263.350.4811.260white0.15.805828990542366
416.70.330.491.60.16720.094.00.99143.110.511.460white0.035.805828990542366
427.80.260.493.20.02728.087.00.99193.030.3211.371white0.155.805828990542366
438.00.140.491.50.03542.0120.00.99283.260.410.671white0.25.805828990542366
446.20.20.491.60.06517.0143.00.99373.220.529.260white0.075.805828990542366
457.00.140.495.90.05322.0118.00.99543.360.369.460white0.05.805828990542366
467.40.190.496.70.03715.0110.00.99383.20.3811.071white0.025.805828990542366
477.30.190.4915.550.05850.0134.00.99983.420.369.171white0.035.805828990542366
487.90.330.2831.60.05335.0176.01.01033.150.388.860white0.045.805828990542366
499.90.350.381.50.057999999999999931.047.00.996763.260.8210.671red0.25.805828990542366
508.20.430.291.60.08127.045.00.996033.250.5410.350red0.095.805828990542366
519.60.50.362.80.115999999999999926.055.00.997223.180.6810.950red0.25.805828990542366
528.90.280.451.70.0677.012.00.993543.250.5512.371red0.155.805828990542366
538.90.320.312.00.08812.019.00.99573.170.5510.460red0.015.805828990542366
547.70.580.011.80.08812.018.00.995683.320.5610.571red0.075.805828990542366
559.10.40.51.80.0717.016.00.994623.210.6912.581red0.05.805828990542366
568.00.380.441.90.0986.015.00.99563.30.6411.460red0.135.805828990542366
578.20.740.092.00.0675.010.00.994183.280.5711.860red0.125.805828990542366
587.70.610.182.40.0836.020.00.99633.290.610.260red0.135.805828990542366
597.20.350.261.80.08333.075.00.99683.40.589.560red0.175.805828990542366
608.00.620.332.70.08816.037.00.99723.310.5810.760red0.025.805828990542366
618.60.370.656.40.083.08.00.998173.270.5811.050red0.065.805828990542366
626.80.480.081.80.07440.064.00.995293.120.499.650red0.175.805828990542366
638.00.310.452.10.2165.016.00.993583.150.8112.571red0.25.805828990542366
648.40.340.422.10.07223.036.00.993923.110.7812.460red0.05.805828990542366
656.10.480.091.70.07818.030.00.994023.450.5411.260red0.175.805828990542366
668.20.230.421.90.0699.017.00.993763.210.5412.360red0.175.805828990542366
678.10.780.13.30.094.013.00.998553.360.499.550red0.195.805828990542366
688.30.530.01.40.076.014.00.995933.250.6410.060red0.095.805828990542366
697.00.690.072.50.09115.021.00.995723.380.611.360red0.185.805828990542366
705.60.660.02.50.0667.015.00.992563.520.5812.950red0.025.805828990542366
719.10.60.01.90.05799999999999995.010.00.99773.180.6310.460red0.075.805828990542366
725.90.190.211.70.04557.0135.00.993413.320.449.550red0.035.805828990542366
738.00.250.431.70.06722.050.00.99463.380.611.960red0.125.805828990542366
7410.40.520.452.00.086.013.00.997743.220.7611.460red0.035.805828990542366
757.30.40.31.70.0833.079.00.99693.410.659.560red0.025.805828990542366
768.30.60.252.20.1189.038.00.996163.150.539.850red0.055.805828990542366
7710.60.360.572.30.0876.020.00.996763.140.7211.171red0.055.805828990542366
788.50.320.422.30.07512.019.00.994343.140.7111.871red0.115.805828990542366
798.50.440.51.90.36915.038.00.996343.011.19.450red0.25.805828990542366
806.50.340.272.80.0678.044.00.993843.210.5612.060red0.195.805828990542366
818.20.350.332.40.07611.047.00.995993.270.8111.060red0.135.805828990542366
828.20.350.332.40.07611.047.00.995993.270.8111.060red0.045.805828990542366
836.70.640.232.10.0811.0119.00.995383.360.710.950red0.125.805828990542366
847.00.7450.121.80.11415.064.00.995883.220.599.560red0.025.805828990542366
857.70.570.211.50.0694.09.00.994583.160.549.860red0.05.805828990542366
867.70.260.262.00.05219.077.00.99513.150.7910.960red0.045.805828990542366
877.70.570.211.50.0694.09.00.994583.160.549.860red0.185.805828990542366
886.80.650.022.10.0788.015.00.994983.350.6210.460red0.015.805828990542366
8910.20.330.461.90.0816.09.00.996283.10.4810.460red0.135.805828990542366
908.80.270.462.10.09520.029.00.994883.260.5611.360red0.145.805828990542366
918.20.340.371.90.05743.074.00.994083.230.8112.060red0.045.805828990542366
9210.90.320.521.80.13217.044.00.997343.280.7711.560red0.15.805828990542366
939.20.460.232.60.09118.077.00.999223.150.519.450red0.165.805828990542366
946.00.330.3212.90.0546.0113.00.995723.30.5611.540red0.125.805828990542366
957.80.550.01.70.077.017.00.996593.260.649.460red0.095.805828990542366
966.90.410.332.20.08122.036.00.99493.410.7511.160red0.185.805828990542366
976.10.350.071.40.06922.0108.00.99343.230.529.250white0.145.805828990542366
986.80.220.316.30.03533.0170.00.99183.240.6612.660white0.25.805828990542366
997.20.250.3918.950.03842.0155.00.99992.970.479.060white0.195.805828990542366
1007.40.310.281.60.0533.0137.00.99293.310.5610.560white0.065.805828990542366
Rows: 1-100 | Columns: 16

Note

Predictions can be made automatically using the test set, in which case you don’t need to specify the predictors. Alternatively, you can pass only the VastFrame to the predict() function, but in this case, it’s essential that the column names of the VastFrame match the predictors and response name in the model.

Plots

If the model allows, you can also generate relevant plots. For example, regression plots can be found in the Machine Learning - Regression Plots.

model.plot()

Important

The plotting feature is typically suitable for models with fewer than three predictors.

Parameter Modification

In order to see the parameters:

model.get_params()

And to manually change some of the parameters:

model.set_params({'tol': 0.001})

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 following methods for exporting the model use MemModel, and it is recommended to use MemModel directly.

To SQL

You can get the SQL code by:

model.to_sql()

To Python

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

X = [[4.2, 0.17, 0.36, 1.8, 0.029, 0.9899]]
model.to_python()(X)

Hint

The to_python() method is used to retrieve predictions, probabilities, or cluster distances. 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([show, chart])

Computes the model's features importance.

fit(input_relation, X, y[, test_relation, ...])

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.

import_models(path[, schema, kind])

Imports machine learning models.

plot([max_nb_points, chart])

Draws the model.

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

Predicts using the input relation.

regression_report([metrics])

Computes a regression report using multiple metrics to evaluate the model (r2, mse, max error...).

report([metrics])

Computes a regression report using multiple metrics to evaluate the model (r2, mse, max error...).

score([metric])

Computes the model score.

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_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