当其中一个向量全为零时的余弦相似度

如何表达余弦相似度( http://en.wikipedia.org/wiki/Cosine_similarity

当其中一个向量全为零时?

v1 = [1, 1, 1, 1, 1]

v2 = [0, 0, 0, 0, 0]

当我们按照经典公式计算时,会遇到除以零的情况:

Let d1 = 0 0 0 0 0 0Let d2 = 1 1 1 1 1 1Cosine Similarity (d1, d2) =  dot(d1, d2) / ||d1|| ||d2||dot(d1, d2) = (0)*(1) + (0)*(1) + (0)*(1) + (0)*(1) + (0)*(1) + (0)*(1) = 0||d1|| = sqrt((0)^2 + (0)^2 + (0)^2 + (0)^2 + (0)^2 + (0)^2) = 0||d2|| = sqrt((1)^2 + (1)^2 + (1)^2 + (1)^2 + (1)^2 + (1)^2) = 2.44948974278Cosine Similarity (d1, d2) = 0 / (0) * (2.44948974278)                           = 0 / 0

我想在聚类应用中使用这种相似度度量。我经常需要比较这样的向量。还有 [0, 0, 0, 0, 0] 与 [0, 0, 0, 0, 0] 的情况

你有这方面的经验吗?由于这是一个相似度(而不是距离)度量,我是否应该为以下情况设定特殊情况

d( [1, 1, 1, 1, 1]; [0, 0, 0, 0, 0] ) = 0

d([0, 0, 0, 0, 0]; [0, 0, 0, 0, 0] ) = 1

那么

d([1, 1, 1, 0, 0]; [0, 0, 0, 0, 0] ) = ? 等等。


回答:

如果你有零向量,余弦不是适合你应用的相似度函数

余弦距离在L_2归一化数据上基本上等同于平方欧几里得距离。即,你将每个向量归一化为单位长度1,然后计算平方欧几里得距离。

余弦的另一个好处是性能 – 在非常稀疏、高维度的数据上计算它比欧几里得距离更快。它从稀疏性中获益是平方的,而不仅仅是线性的。

虽然你显然可以尝试在其中一个向量为零时将相似度设为0,而在它们完全相同的时候设为最大值,但这并不能真正解决根本问题。

不要因为你能轻松计算而选择距离度量。

相反,选择一个距离度量,使结果在你的数据上具有意义。如果值是未定义的,那么你就没有意义…

有时候,丢弃全为零的数据作为无意义数据可能是可行的(例如,分析Twitter噪音,看到一条全是数字没有文字的推文)。有时候则不行。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注