皮尔逊相似和修正余弦相似度有什么区别,分别用matlab实现
时间: 2023-06-18 22:02:51 浏览: 96
皮尔逊相似度和修正余弦相似度都是常用的相似度计算方法,区别在于计算公式和适用场景。
1. 皮尔逊相似度
皮尔逊相似度是一种度量两个变量之间相关性的方法,其值介于 -1 和 1 之间。当两个变量完全相关时,皮尔逊相似度为 1;当两个变量完全不相关时,皮尔逊相似度为 -1;当两个变量之间没有关系时,皮尔逊相似度为 0。
皮尔逊相似度计算公式如下:
$similarity_{p}(u,v)=\frac{\sum_{i=1}^{n}(r_{u,i}-\bar{r_{u}})(r_{v,i}-\bar{r_{v}})}{\sqrt{\sum_{i=1}^{n}(r_{u,i}-\bar{r_{u}})^{2}}\sqrt{\sum_{i=1}^{n}(r_{v,i}-\bar{r_{v}})^{2}}}$
其中,$r_{u,i}$ 表示用户 $u$ 对物品 $i$ 的评分,$\bar{r_{u}}$ 表示用户 $u$ 对所有物品的评分平均值,$n$ 表示物品总数。
在 MATLAB 中,可以使用以下代码实现皮尔逊相似度的计算:
```matlab
function sim = pearson_sim(u, v)
% u, v: 用户 u 和用户 v 的评分向量
% sim: 用户 u 和用户 v 的皮尔逊相似度
n = length(u);
avg_u = mean(u);
avg_v = mean(v);
numerator = sum((u - avg_u) .* (v - avg_v));
denominator = sqrt(sum((u - avg_u) .^ 2)) * sqrt(sum((v - avg_v) .^ 2));
sim = numerator / denominator;
end
```
2. 修正余弦相似度
修正余弦相似度是一种度量两个向量之间相似度的方法,其值介于 0 和 1 之间。当两个向量完全相同时,修正余弦相似度为 1;当两个向量完全不同时,修正余弦相似度为 0。
修正余弦相似度计算公式如下:
$similarity_{c}(u,v)=\frac{\sum_{i=1}^{n}r_{u,i}r_{v,i}}{\sqrt{\sum_{i=1}^{n}r_{u,i}^{2}}\sqrt{\sum_{i=1}^{n}r_{v,i}^{2}}+1}$
其中,$r_{u,i}$ 表示用户 $u$ 对物品 $i$ 的评分,$n$ 表示物品总数。
在 MATLAB 中,可以使用以下代码实现修正余弦相似度的计算:
```matlab
function sim = cosine_sim(u, v)
% u, v: 用户 u 和用户 v 的评分向量
% sim: 用户 u 和用户 v 的修正余弦相似度
numerator = sum(u .* v);
denominator = sqrt(sum(u .^ 2)) * sqrt(sum(v .^ 2)) + 1;
sim = numerator / denominator;
end
```
阅读全文