【问题标题】:K-Nearest Neighbor Implementation for Strings (Unstructured data) in JavaJava中字符串(非结构化数据)的K最近邻实现
【发布时间】:2022-03-29 23:24:08
【问题描述】:

我正在寻找 Java 中用于非结构化数据的 K-Nearest Neighbor 算法的实现。我发现了许多数字数据的实现,但是我如何实现它并计算文本(字符串)的欧几里得距离。

这里是双精度的一个例子:

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;
}

如何为字符串(非结构化数据)实现它?例如,

Class 1: 
"It was amazing. I loved it"
"It is perfect movie"

Class 2:
"Boring. Boring. Boring."
"I do not like it"

我们如何在此类数据上实现 KNN 并计算欧几里得距离?

【问题讨论】:

  • 当谈到字符串时,您对“距离”的定义是什么?是一个字一个字吗?
  • 不,是逐字逐句的。
  • 如果我不知道你想做什么,我真的无法回答这个问题。您的数据有哪些维度?您想如何将字符串转换为数值?
  • 你必须给它赋值! “无聊” 0.9,“不喜欢它”:0.8......它的路很长,因为你会问“但是如何为它分配数值?”并继续…………
  • 当我们对文本应用机器学习算法时,每个词都变成了一个维度。所以,这里的维度是训练集中的每个单词。

标签: java string algorithm knn euclidean-distance


【解决方案1】:

您正确地注意到,您唯一需要做的就是定义字符串之间的距离概念。问题是它依赖于任务。它可以是任何东西,从如果两个字符串都有一个世界“数据”,我们将距离分配为 1,否则为 0到更复杂的东西,如 Okapi BM25

看看各种string metrics 或者可能是tf-idf 的python 实现。

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2014-04-12
    • 2011-10-23
    • 2012-07-19
    • 2015-02-13
    相关资源
    最近更新 更多