推荐算法之-欧几里德距离计算用户相似度

<?php
/**
 * 欧几里德距离计算出3个用户的相似度
 * 通过7件产品分析用户喜好相似度,假设x,y是空间上的两个点
 * d(x,y) := √∑(xi-yi)^2
 *
 * 相似度使用函数 sim(x,y)=1/1+d(x,y)
 */

$infoTable = [
    'user1' => [
        5, 5, 4, 7, 8, 9, 4, //  分别为产品1评分,产品2评分,产品3评分,产品4评分,产品5评分,产品6评分,产品7评分
    ],
    'user2' => [
        3, 6, 3, 9, 4, 2, 6,
    ],
    'user3' => [
        5, 5, 5, 7, 8, 9, 3,
    ],
];

function calc($user1, $user2)
{
    global $infoTable;

    $sum = 0;
    $len = 7; //7个产品
    for ($i = 0; $i < $len; $i++) {
        $sum += pow($infoTable[$user1][$i] - $infoTable[$user2][$i], 2);
    }
    $s = sim(sqrt($sum));

    return $s;
    //user1 & user3
}

function sim($dx)
{
    return 1 / (1 + $dx);
}

echo 'user1 & user2=' . calc('user1', 'user2') . PHP_EOL;
echo 'user1 & user3=' . calc('user1', 'user3') . PHP_EOL;
echo 'user2 & user3=' . calc('user2', 'user3') . PHP_EOL;

详细介绍转到https://blog.csdn.net/willduan1/article/details/51000601

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_________MAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值