ほとんどの場合、すでに何らかの種類のユーザーデータを持っている音楽や書籍を推奨できます。 たとえば、AmazonやOzonは、探しているものや行った場所を記憶し、このデータから推奨事項を作成します。 しかし、ユーザー自身がプロファイルに入力した方が良いです。このシステムを持っていることを伝えて、次に何を与えるかを選択できるようにすることさえできます。
中国人プログラマーによって書かれたOpenSlopeOneをねじ込むことができます。
例を考えてみましょう。 書店には、Vasya、Zhenya、Jura、Larisa、8つの製品の4人のユーザーがいます。 それぞれについて、情報があります:
名 | 購入済み(ID) | 閲覧済み(ID) |
ヴァシャ | 1,6,7 | 2,3 |
ジェンヤ | 1,2,3 | 5,7,4 |
ジュラ | 7.8 | 1.4 |
ラリサ | 8 | 6 |
アルゴリズムのセットアップ:
config.ini.php
; <?php exit; ?> DO NOT REMOVE THIS LINE
[database]
host = localhost
username = mysql
password = mysql
dbname =
port = 3306
adapter = PDO_MYSQL ; PDO_MYSQL or MYSQLI
2つのテーブルを作成します。
CREATE TABLE IF NOT EXISTS oso_user_ratings (
user_id int(11) NOT NULL, item_id int(11) NOT NULL, rating decimal(14,4) NOT NULL default '0.0000', KEY item_id (item_id), KEY user_id (user_id,item_id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS oso_slope_one (
item_id1 int(11) NOT NULL, item_id2 int(11) NOT NULL, times int(11) NOT NULL, rating decimal(14,4) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
oso_user_ratingsテーブルは、ユーザー情報を保存するためのものです。 ユーザーが購入した場合、評価フィールドに1を入力し、購入していない場合は0を設定します(正しく計算する必要があります: ユーザーとアイテムマトリックスの購入ベクトル間のコサインとしてのアイテムの類似性ですが、例として原理を示します )。 それに応じて、user_idフィールドにユーザーIDを入力し、item_idに製品IDを入力します。
原則として、テーブル内のoso_slope_oneは、重量ごとに各アイテムを生成します。 たとえば、Petyaがこの製品を購入し、私の製品がPetyaから購入された場合、Petyaの製品が私に届くと考えるのは理にかなっています。 ユーザーとの一致が多いほど、この製品を必要とする割合は大きくなります。 SlopeOneは、1つへの傾向として翻訳されます。つまり、まず、共通の関心を持つ他のユーザーから最も優先度の高い(購入した)製品を表示します。
test.php
<?php
require './OpenSlopeOne.php';
$openslopeone = new OpenSlopeOne();
$openslopeone->initSlopeOneTable();
$openslopeone->initSlopeOneTable('MySQL');
// id 1
var_dump($openslopeone->getRecommendedItemsByUser(1));
?>
推奨されるアルゴリズム:
-ラリサの8品、 彼女は私の購入したアイテム6を見ました。
-彼は2.3の製品を私に推薦しました。ジェンヤは最初にID 1の私の一般的な製品で購入しました。
-など
小さな間違いがあります。彼はまた、ユーザーが共通の関心を持って購入した製品を表示しますが、私はすでにそれを持っています。 これは、式に従ってテーブルにデータを書き込まなかったが、0または1であったためです。
私の目標は、単に仕事の原則を示し、思考のための食べ物と、あなたがプッシュすべき理由を提供することでした。 また、各アルゴリズムは、視聴者に合わせて調整する必要があります。
PS誰かが推奨事項に精通している場合は、コメントを追加してください。 たぶん私の記事にもエラーがあります。 私はあまりテストをしなかったので、アルゴリズムを使用したプロジェクトが開発中です。