【问题标题】:Algorithm for similarity?相似度算法?
【发布时间】:2011-09-17 16:45:13
【问题描述】:

如果这看起来像重复,我很抱歉,但由于上一个问题似乎引起了一些混乱,这里是另一个尝试。

我有 2 个基本数组:

float[] baseArr1 = new float[3] {0.430651724, 0.137407839, 0.177024469};
float[] baseArr2 = new float[3] {0.718210936, 0.001312795, 0.009634903};

另外2个数组进行比较:

float[] compArr1 = new float[3] {1, 1, 1};
float[] compArr2 = new float[3] {1, 0, 0};

compArr1 和 compArr2 然后与 baseArr1 和 baseArr2 进行比较。我知道我应该得到的答案,但我很难想出一个算法来得出答案。与baseArr1比较时,答案应为compArr1,与baseArr2比较时,答案应为compArr2。

请注意,两个 baseArrs 的值不一定必须加起来为 1。此外,这里还有两个更简洁的数组,可以让我的观点更清楚:

float[] extraArr1 = new float[3] {.5, .3, .3};
float[] extraArr2 = new float[3] {.75, 0, 0};

其中extraArr1 更接近于compArr1,而extraArr2 更接近于compArr2。我已经尝试了一些人建议的余弦相似度算法,但有时答案不正确。

标准是每个元素的值“更多”。例如,compArr1 具有比 compArr2 更接近 baseArr1 的值,并且 compArr2 与 baseArr2 的“接近度”比 compArr1 与 baseArr2 的“接近度”更大。

谢谢!

更新:

我得到了答案!我会在这里发布以供将来参考,我承认我遇到了很多麻烦,也给其他人带来了困惑,但也感谢你试图帮助我!这是我做的:

float[] pbaseArrX = new float[3];
float[] pcompArrX = new float[3];

float dist1 = 0, dist2 = 0;

for (int i = 0; i < baseArrX.Count; i++)
{
  pbaseArrX[i] = baseArrX[i] / (baseArrX[0] + baseArrX[1] + baseArrX[2]);
}

//Do the following for both compArr1 and compArr2;
for (int i = 0; i < compArrX.Count; i++)
{
  pcompArrX[i] = pcompArrX[i] / (pcompArrX[0] + pcompArrX[1] + pcompArr[2]);
}

//Get distance for both
for (int i = 0; i < pcompArrX.Count; i++)
{
  distX = distX + ((pcompArrX[i] - pbaseArrX[i])^2);
}

//Then just use conditional to determine which is 'closer'

【问题讨论】:

  • 在我看来,baseArr1 更接近{1, 0, 0} 而不是{1, 1, 1}。你确定这些值吗?
  • 只要您只提供所需输入-输出对的示例,就有(无数!)无数种可能的算法。你的标准是什么?它似乎与标量值的相对大小有关,但您的截止点并不明显。
  • @Pontus,只有无数种可能的算法。
  • "与 baseArr1 比较时,答案应为 compArr1,与 baseArr2 比较时,答案应为 compArr2。"基于什么标准?
  • 那一点帮助都没有。你所做的只是说同样的话并添加引号。 “亲密”不是一个明确的概念。您所描述的仍然可以通过无数种方式实现。想象一下,我请您帮助我使用一种算法,该算法给定一个数字,找到大于输入的“最佳”数字。什么是“最佳”数字?同样,没有正式定义就没有“亲密关系”。

标签: algorithm similarity


【解决方案1】:

您想从所有 compArrX 数组中找到最接近 baseArr1 的数组。

可以使用各种距离。最常见的是:

还有很多其他人喜欢:

我们无法知道哪一个最适合您的数据模型。

【讨论】:

  • 我喜欢马氏距离。您可以通过将 comp 变量作为平均值并添加标准偏差来使其工作:comp1 的第二和第三分量的标准偏差较大,而 comp2 的标准偏差很小。 :)
  • @Dysaster:是的,我也认为比例不变的方法可能是 OP 想要的(基于第二个示例 {.5, .3, .3}
【解决方案2】:

另一种相似性(或不相似性)度量 - Earth Mover's Distance

【讨论】:

  • 但这衡量的是分布之间的相似性,而不是点。您将如何对分数实施该措施?
  • EMD 在 OP 想要一个尺度不变的东西的情况下是合理的,在这种情况下,点应该被归一化为单位向量。 wiki 文章提到了将 EMD 扩展到具有不同坐标和的向量的可能性,但我还没有看到它正式化。
猜你喜欢
  • 2011-08-13
  • 2011-12-10
  • 2011-02-28
  • 2013-02-24
  • 2011-04-04
  • 2023-03-27
  • 1970-01-01
  • 2011-07-03
相关资源
最近更新 更多