【发布时间】: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