我正在寻找 Java 中针对非结构化数据的 K 最近邻算法的实现。我发现了许多数字数据的实现,但是我如何实现它并计算文本(字符串)的欧几里得距离。
以下是 double 的一个示例:
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 并计算欧氏距离?
您正确地注意到,您唯一要做的就是定义字符串之间的距离概念。问题是它依赖于任务。它可以是任何来自如果两个字符串中都有世界“数据”,我们将距离分配为 1,否则为 0更复杂的东西,比如霍加狓 BM25 https://en.wikipedia.org/wiki/Okapi_BM25.
看看各种字符串指标 https://en.wikipedia.org/wiki/String_metric或者可能是 python 实现tf-idf https://stackoverflow.com/a/32473678/1090562.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)