public static LinearModel fit(Formula formula, DataFrame data, Properties params) {
        double lambda1 = Double.parseDouble(params.getProperty("smile.elastic_net.lambda1"));
        double lambda2 = Double.parseDouble(params.getProperty("smile.elastic_net.lambda2"));
        double tol = Double.parseDouble(params.getProperty("smile.elastic_net.tolerance", "1E-4"));
        int maxIter = Integer.parseInt(params.getProperty("smile.elastic_net.iterations", "1000"));
        return fit(formula, data, lambda1, lambda2, tol, maxIter);
    }
@Test
    public void tesAbalone() {
        System.out.println("Abalone");

        RegressionValidation<LinearModel> result = RegressionValidation.of(Abalone.formula, Abalone.train, Abalone.test,
                (formula, data) -> ElasticNet.fit(formula, data, 0.8, 0.2));

        System.out.println(result.model);
        System.out.println(result);
        assertEquals(2.1263, result.metrics.rmse, 1E-4);
    }