public static DBSCAN<double[]> fit(double[][] data, int minPts, double radius) {
        return fit(data, new KDTree<>(data, data), minPts, radius);
    }
@Test
    public void testGaussianMixture() throws Exception {
        System.out.println("Gaussian Mixture");

        double[][] x = GaussianMixture.x;
        int[] y = GaussianMixture.y;

        DBSCAN<double[]> model = DBSCAN.fit(x,200, 0.8);
        System.out.println(model);
        
        double r = RandIndex.of(y, model.y);
        double r2 = AdjustedRandIndex.of(y, model.y);
        System.out.format("Training rand index = %.2f%%, adjusted rand index = %.2f%%%n", 100.0 * r, 100.0 * r2);
        assertEquals(0.5424, r, 1E-4);
        assertEquals(0.1215, r2, 1E-4);

        System.out.format("MI = %.2f%n", MutualInformation.of(y, model.y));
        System.out.format("NMI.joint = %.2f%%%n", 100 * NormalizedMutualInformation.joint(y, model.y));
        System.out.format("NMI.max = %.2f%%%n", 100 * NormalizedMutualInformation.max(y, model.y));
        System.out.format("NMI.min = %.2f%%%n", 100 * NormalizedMutualInformation.min(y, model.y));
        System.out.format("NMI.sum = %.2f%%%n", 100 * NormalizedMutualInformation.sum(y, model.y));
        System.out.format("NMI.sqrt = %.2f%%%n", 100 * NormalizedMutualInformation.sqrt(y, model.y));

        java.nio.file.Path temp = Write.object(model);
        Read.object(temp);
    }