2016-02-09 4 views
-1

Я ищу реализацию для алгоритма K-Nearest Neighbor в Java для неструктурированных данных. Я нашел много реализаций для числовых данных, однако как я могу реализовать его и вычислить Евклидово расстояние для текста (строки).K-Nearest Neighbor Implementation for Strings (неструктурированные данные) в Java

Вот один пример двойной:

public static double EuclideanDistance(double [] X, double []Y) 
{ 
    int count = 0; 
    double distance = 0.0; 
    double sum = 0.0; 
    if(X.length != Y.length) 
    { 
     try { 
      throw new Exception("the number of elements" + 
         " in X must match the number of elements in Y"); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    else 
    { 
     count = X.length; 
    } 
    for (int i = 0; i < count; i++) 
    { 
     sum = sum + Math.pow(Math.abs(X[i] - Y[i]),2); 
    } 
    distance = Math.sqrt(sum); 
    return distance; 
} 

Как я могу реализовать для струнных (неструктурированных данных)? Например, Класс 1: «Это было удивительно, я любил его.» «Это идеальный фильм»

Класс 2: «скучный скучный скучный...» «Мне не нравится»

Как мы можем внедрить KNN для такого типа данных и вычислить евклидово расстояние?

+0

Каково ваше определение «расстояние», когда дело доходит до строк? Это характер по характеру? – ostrichofevil

+0

нет, это слово за словом. –

+0

Я не могу ответить на это, если не знаю, что вы хотите сделать. Каковы размеры ваших данных? Как вы хотите преобразовать строки в числовые значения? – ostrichofevil

ответ

0

Вы правильно заметили, что вам нужно всего лишь определить понятие расстояния между вашими строками. Проблема в том, что она зависит от задачи. Это может быть что угодно: от . Давайте назначим расстояние до 1, если обе строки имеют в мире «данные», а 0 в противном случае - это нечто более сложное, как Okapi BM25.

Взгляните на различные string metrics или может быть реализована на основе python tf-idf.