推薦演算法之-皮爾遜相關係數計算兩個使用者喜好相似度
阿新 • • 發佈:2018-12-31
<?php /** * 餘玄相似度計算出3個使用者的相似度 * 通過7件產品分析使用者喜好相似度 * 相似度使用函式 sim(user1,user2) =cos∂ * * 設A、B為多維矩陣 * * ∑(Ai•Bi) ∑(Ai•Bi) ∑(USER1_i•USER2_i) * cos∂ = --------------- = ----------------- = ------------------------- * |Ai|•|Bi| √∑ Ai² • √∑ Bi² √∑ USER1_i² • √∑ USER2_i² */ $infoTable = [ 'user1' => [ 5, 5, 4, 7, 8, 9, 4, // 分別為產品1評分,產品2評分,產品3評分,產品4評分,產品5評分,產品6評分,產品7評分 ], 'user2' => [ 1, 9, 1, 9, 2, 2, 8, ], 'user3' => [ 5, 5, 5, 7, 8, 9, 3, ], 'user4' => [ 9, 1, 9, 1, 8, 9, 1, ], ]; function calc($user1, $user2) { global $infoTable; $sumAiBi = 0; $sumAi = 0; $sumBi = 0; $len = 7; //7個產品 for ($i = 0; $i < $len; $i++) { //∑(Ai•Bi) $sumAiBi += $infoTable[$user1][$i] * $infoTable[$user2][$i]; //∑USER1_i $sumAi += pow($infoTable[$user1][$i], 2); //∑USER2_i $sumBi += pow($infoTable[$user2][$i], 2); } return $sumAiBi / (sqrt($sumAi) * sqrt($sumBi)); } echo 'user1 & user2=' . calc('user1', 'user2') . PHP_EOL; echo 'user1 & user3=' . calc('user1', 'user3') . PHP_EOL; echo 'user2 & user3=' . calc('user2', 'user3') . PHP_EOL; echo 'user2 & user4=' . calc('user2', 'user4') . PHP_EOL;
從上面可以看出user2和user4在產品打分上完全相反,最後得到的相似度也很低,符合客觀事實