【问题标题】:Formulae of Cosine Distance?余弦距离的公式?
【发布时间】:2013-12-31 22:35:54
【问题描述】:

1) 我正在使用以下方法来测量两个向量(比如 A 和 B)之间的余弦距离。

假设我们有两个向量,例如向量 A 和向量 B,

A & B 之间的余弦距离 = (dot(A, B) / (Magnitude (A) * Magnitude (B)))

这个公式对吗?如果不是,请建议我正确的公式?

2) K-NN 在准确性上总是比 Rocchio 好,还是在某些情况下 Rocchio 的性能比 K-NN 好? K-NN 看起来像是对 Rocchio 的增强,理论概念表明 K-NN 的性能将比 Rocchio 好得多,但我发现在实际实现中反之亦然,其中 Rocchio 的性能比 K-NN 好得多?

【问题讨论】:

  • 您已经正确定义了两个向量之间夹角的余弦,但这不是“距离”:当向量最接近时(在同一方向上),它最大。

标签: machine-learning classification


【解决方案1】:

(1) 余弦距离是相似性度量之一。其他可能包括欧几里得距离或加权欧几里得距离。你的实现是正确的。

(2) KNN和Rocchio的主要区别在于前者没有训练,而后者在训练过程中生成了原型向量。在测试过程中,KNN 中使用了所有的训练实例,但 Rocchio 中仅使用了prototype vectors(通常每个类一个向量)。因此,Rocchio 在训练和测试方面都更加高效。然而,它缺乏足够的理论有效性来证明 Rocchio 的稳定性和鲁棒性。并且表明,如果类别不是线性可分的,Rocchio 就不能很好地工作。

【讨论】:

  • Thanx @lennon310,我已经为 Rocchio 完成了自己的实现,因为它在 weka 中不可用。我有一个新闻文章数据集(1600 个用于训练)和 400 个(测试)。 rocchio 实现给了我 82% 的准确率,而当我对具有 10 和 5 个邻居的 K-nn 使用 weka 实现时,对于相同的数据集(大约 64%),结果令人失望。我在一些文章中读到 Rocchio 是高效的,但 K-nn 更准确,这让我认为我的实现有一个遗留错误,这使得准确性更高。你觉得有这样的理由吗?
  • 谢谢卡希夫。我建议你打乱数据并尝试多次交叉验证,平均准确性以做出更好的评估。在大多数情况下,KNN 预计比 Rocchio 具有更高的准确度,但 Rocchio 可能对噪声有更好的容忍度
猜你喜欢
  • 2017-07-10
  • 2017-12-12
  • 2021-09-09
  • 2013-02-24
  • 2011-10-20
  • 2020-02-11
  • 1970-01-01
  • 2014-08-21
  • 2015-05-31
相关资源
最近更新 更多