<?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