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?
回答:
(1) 余弦距离是一种相似性度量方法。其他的度量方法可能包括欧几里得距离或加权欧几里得距离。你的实现是正确的。
(2) KNN与Rocchio的主要区别在于前者没有训练过程,而后者在训练过程中会生成原型向量。在测试过程中,KNN使用所有训练实例,而Rocchio仅使用原型向量(通常每个类别一个向量)。因此,Rocchio在训练和测试过程中效率更高。然而,它缺乏足够的理论依据来证明Rocchio的稳定性和鲁棒性。并且已显示,如果类别不是线性可分的,Rocchio的表现不佳。