категоризация цифр с использованием евклидова расстояния

Я хочу классифицировать цифры, которые представлены в 64-мерном пространстве, что дает изображение символа 8X8 пикселей. Каждый атрибут представляет собой целое число от 0 до 16. У меня есть 20 строк по 64 значения плюс одно в конце, определяющее категорию. Категория предварительно определяется UCI, но я хочу знать, как они получили каждую конкретную категорию для каждой строки. Поэтому они говорят, что использовали евклидово расстояние для определения категории.

Мой вопрос: как применить евклидово расстояние к 64 значениям? Я попытался использовать следующую формулу (теорема Пифагора) Math.sqrt(Math.pow(x2-x1)+Math.pow(y2-y1)) в строке, но результат был слишком большим, и я не знаю, что это представляет. Например, для первой строки я получил 1612, что является квадратным корнем из 40,15.

Это мой код для процесса:

enter code here
    public static void main(String[]args)
    {
        int row[]= new int[64];
        for(int z=0;z<64;z++)
        {
            row[z]=digits[0][z]; //get the first row and store it

        }

        double result = 0;
        for(int z=0;z<64;z+=2)
        {
            double distance = Math.pow(row[z]-row[z+1],2); 

            result = result+distance; //add  distance each time
            System.out.print(result+", ");
        }
    }

Первый ряд цифр такой: 0,0,5,13,9,1,0,0,0,0,13,15,10,15,5,0,0,3,15,2,0, 11,8,0,0,4,12,0,0,8,8,0,0,5,8,0,0,9,8,0,0,4,11,0,1,12, 7,0,0,2,14,5,10,12,0,0,0,0,6,13,10,0,0,0,0

Я не уверен, что это имеет смысл, но если что-то непонятно, спрашивайте. Заранее спасибо.


person Hunor Balint    schedule 12.02.2016    source источник
comment
См. Apache Commons Math или Weka.   -  person Mehrdad Nurolahzade    schedule 12.02.2016


Ответы (1)


Мой вопрос: как применить евклидово расстояние к 64 значениям?

Ты не. Расстояние — это мера между двумя объектами, каждый из которых может иметь 64 значения, но вам нужны два объекта. В частности, евклидово расстояние определяется как

dist(x, y) = ||x-y||_2 = sqrt[ SUM_{i=1}^d (x_i - y_i)^2 ]

где d — количество измерений, а x_i означает i измерение x.

Поэтому они говорят, что использовали евклидово расстояние для определения категории.

Более того, они сказали, что расстояние само по себе не определяет ничего, кроме... расстояния. Категория, с другой стороны, является абстрактным объектом, который может быть определен некоторой характерной точкой (центроидом), тогда вы назначаете категорию с ближайшим (с точки зрения заданного расстояния) центроидом.

person lejlot    schedule 12.02.2016
comment
хорошо, но что представляет собой SUM_{i=1}^d? как вы сказали, d - это размер, но что такое i = 1? - person Hunor Balint; 13.02.2016
comment
Это означает, что сумма от i равна 1 до d, таким образом, с точки зрения java a for (int i=0; i<d; ++i) - person lejlot; 13.02.2016
comment
хорошо, я вижу. Я пробовал это раньше, для первой и десятой строк я получил 23,7. Что это за номер, как мне получить категорию из этого? - person Hunor Balint; 13.02.2016
comment
Как я уже сказал - вы этого не сделаете. Это просто расстояние между двумя точками. Это ничего не классифицирует. Вам нужен метод категоризации, основанный на расстоянии. Расстояние само по себе ничего не говорит, кроме того, насколько различны два объекта. - person lejlot; 13.02.2016