ここに私の最初の試みはこの問題を解決することです。新しいユーザーには、さまざまな商品の評価をお願いします。次に、これらの評価に基づいて最も類似している既存の3人のユーザーを特定します。その後、私はこれら3人のユーザーの情報を使用して、初めてサイトを訪れる際にアイテムを推薦することができます。私はアイテムのアイテムを解決していない私にアドバイス:)
/**
* Select all of the customer ratings
*/
$rows = getRows("SELECT * FROM customer_ratings;", 'NUM');
if(isset($_POST['submit'])){
//Fill distanse array to zero for all items
$distance = array_fill(0, count($rows), 0);
$instance = $_POST['instance'];
//Loop over each of the exisiting ratings rows
for($i = 0; $i < count($rows); $i++) {
//Loop over the 5 items (The first two are id and name we only need 2-6)
for($j = 2; $j < 7; $j++) {
$distance[$i] += abs(($rows[$i][$j] - $instance[$j]));
}
}
//Sort distances by ascending order
asort($distance);
$distanceCopy = $distance;
$stringBuff = "";
//Select the three most similar
for($i = 0; $i < 3; $i++){
$maxs = array_keys($distanceCopy, min($distanceCopy));
$stringBuff = $stringBuff . " ". ($maxs[0]+1) .",";
unset($distanceCopy[$maxs[0]]);
}
$stringBuff = substr_replace($stringBuff,"", -1);
echo "String buff: ".$stringBuff;
$mostSimilar = getRows("SELECT name FROM customer_ratings WHERE id IN ($stringBuff);", 'NUM');
}
を与えたすべての人に
おかげで、問題をコールドスタート。現在、多くの推奨事項は、ユーザが任意の2つのアイテムを好んでいた回数のカウンタを有するすべてのアイテムのマトリックスを使用して行われる。たとえば、userAがitem1、item2、item3を好きでuserBがitem1とitem3を好む場合、行列は(item1、item2)1、(item1、item3)2などのように見えます。新しいユーザーの推奨事項では、私はその提言がより適切であると思う。彼らは私が何か新しいことを学んでいない場合:) – TrueWheel
OK。あなたの共起数は、あなたがユーザーの類似点を計算するのに役立つものではありません。そのためには、本当にユーザーとユーザーの共同作業が必要です。しかし、それは正接です。私はあなたのための最善の答えは、あなたが持っている最初の評価からの推奨を計算し、評価がないときにトップ10リストを表示することだと思います。 –
アドバイスをいただきありがとうございます。私は、ユーザーが最初にサイトにサインアップしたときに製品を評価するよう求めてきました。次に、共起カウントを使用できるようになるまで、初期の推奨事項について同様のユーザーを特定します。私は以下のコードを貼り付けます。 – TrueWheel