Cómo agrupar mis datos con una matriz de distancia personalizado utilizando el método de biblioteca CLARANS sonrisa

Vahe Karapetyan:

Quiero agrupar mis datos con una matriz de distancia personalizada en lugar de la incorporada en algoritmos (es decir euclidiana). Y no parece haber ninguna manera clara de hacerlo.

He intentado añadir algo de mi código para las demostraciones en el proyecto de la sonrisa. También trató de hacerlo con las pruebas en mi proyecto, aquí hay un trozo del código:

        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = vrpJsonFromFile.readLine()) != null) {
            sb.append(line).append("\n");
        }
        JSONArray jsonArray = new JSONObject(sb.toString()).getJSONArray("services");
        Double[][] data = new Double[jsonArray.length()][2];
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject address = jsonArray.getJSONObject(i).getJSONObject("address");
            data[i][0] = Double.parseDouble(address.getString("lon"));
            data[i][1] = Double.parseDouble(address.getString("lat"));
        }

        // here
        Distance<Double[]> distance1 = (x, y) -> Math.sqrt(Math.pow(y[1]-x[1],2) + Math.pow(y[0]-x[0], 2));
        CLARANS<Double[]> clarans = new CLARANS<>(data, distance1, 3);
        System.out.println(clarans);

Este código crea un CLARANS de agrupamiento con el algoritmo de Euclides (ver la línea por debajo de la // aquí comentario). Debería cambiarlo con mi propia matriz de distancia y espero que hay una manera de hacer eso en la sonrisa.

Ha dejado de fumar - Anony-Mousse:

Es probable que pueda utilizar

Distance<Integer> d = (i,j) -> matrix[i][j];

para agrupar los números de objeto, no sus vectores.

Pero puede ser digno de mirar Elki vez que se ha predefinido clases de matrices de distancia, y los usos optimizado representaciones de conjuntos de objetos en lugar de tener que usar costosos en caja Integercomo en el anterior lambda. Debido a que iy json números enteros en caja, esto requiere direccionamiento indirecto de memoria adicional (y errores de caché) para cada cálculo de la distancia, que puede reducir mucho el rendimiento. También tiene algoritmo de los mejores FastCLARANS, así como FastPAM que son supuestamente O (k) veces más rápido.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=214400&siteId=1
Recomendado
Clasificación