ホームページ >バックエンド開発 >PHPチュートリアル >PHP を使用して協調フィルタリングと推奨システムを実装する方法

PHP を使用して協調フィルタリングと推奨システムを実装する方法

PHPz
PHPzオリジナル
2023-08-02 11:17:081633ブラウズ

PHP を使用して協調フィルタリングおよび推奨システムを実装する方法

協調フィルタリングおよび推奨システムは、非常に一般的に使用されるアルゴリズムおよびテクノロジであり、電子商取引、ソーシャル メディア、およびオンライン サービスで広く使用されています。協調フィルタリング アルゴリズムは、ユーザーの行動と好みを分析し、他のユーザーの行動と比較して類似のユーザーを見つけ、これらの類似点に基づいてユーザーにパーソナライズされた推奨事項を作成します。この記事では、PHP で協調フィルタリングとレコメンデーション システムを実装する方法を紹介します。

  1. データの準備
    協調フィルタリングとレコメンデーション システムを実装する前に、まずデータを準備する必要があります。一般に、各項目に対する各ユーザーの評価や好みを記録するには、ユーザーと項目のマトリックスが必要です。この行列は配列で表すことができます。以下はサンプル データです。
$ratings = [
    'user1' => ['item1' => 4, 'item2' => 3, 'item3' => 5],
    'user2' => ['item1' => 5, 'item2' => 1, 'item3' => 2],
    'user3' => ['item1' => 2, 'item2' => 4, 'item3' => 1],
];
  1. 類似度の計算
    協調フィルタリングでは、ユーザー間の類似度を計算する必要があります。一般的に使用される類似度の計算方法は、ピアソン相関係数です。以下は、ピアソン相関係数を計算するために PHP で実装された関数です。
function pearson_similarity($ratings, $user1, $user2) {
    $common_items = array_intersect(array_keys($ratings[$user1]), array_keys($ratings[$user2]));
    
    $n = count($common_items);

    $sum1 = $sum2 = $sum1_sq = $sum2_sq = $p_sum = 0;
    
    foreach ($common_items as $item) {
        $rating1 = $ratings[$user1][$item];
        $rating2 = $ratings[$user2][$item];

        $sum1 += $rating1;
        $sum2 += $rating2;

        $sum1_sq += pow($rating1, 2);
        $sum2_sq += pow($rating2, 2);
        
        $p_sum += $rating1 * $rating2;
    }

    $num = $p_sum - ($sum1 * $sum2 / $n);
    $den = sqrt(($sum1_sq - pow($sum1, 2) / $n) * ($sum2_sq - pow($sum2, 2) / $n));

    if ($den == 0) return 0;
    return $num / $den;
}
  1. 推奨生成
    ユーザー間の類似度を使用して、類似度の推奨に基づいて生成できます。一般的なアプローチは、ユーザーベースの協調フィルタリング アルゴリズムです。以下は、PHP で実装されたユーザーベースの協調フィルタリング推奨アルゴリズムの機能です。
function user_based_recommendation($ratings, $user, $n = 5) {
    $similarity = array();
    $weighted_sum = array();
    $similarity_sum = array();

    foreach ($ratings as $other_user => $items) {
        if ($other_user == $user) continue;

        $sim = pearson_similarity($ratings, $user, $other_user);
        if ($sim <= 0) continue;

        foreach ($items as $item => $rating) {
            if (!isset($ratings[$user][$item]) || $ratings[$user][$item] == 0) {
                $weighted_sum[$item] += $rating * $sim;
                $similarity_sum[$item] += $sim;
            }
        }
    }

    $rankings = array();
    foreach ($weighted_sum as $item => $weighted_rating) {
        if ($similarity_sum[$item] > 0) {
            $rankings[$item] = $weighted_rating / $similarity_sum[$item];
        }
    }

    arsort($rankings);
    return array_slice($rankings, 0, $n, true);
}

上記のコード例では、$n は生成される推奨の数を表します。 、デフォルトは 5 です。 user_based_recommendation この関数は、推奨スコアの高い順に並べ替えられた項目の配列を返します。

  1. 使用例
    上記の関数の使用例を次に示します:
$recommendations = user_based_recommendation($ratings, 'user1', 3);

foreach ($recommendations as $item => $rating) {
    echo "推荐物品:$item, 评分:$rating
";
}

上記の例では、user1## に 3 つの推奨アイテムが生成されます。 # を実行し、結果を出力します。

概要:

上記の手順を通じて、PHP を使用して協調フィルタリングおよび推奨システムを実装する方法を示しました。まず、ユーザーとアイテムのマトリクスのデータを用意し、ユーザー間の類似度を計算しました。次に、類似性に基づいてパーソナライズされた推奨事項が生成されます。これは実装方法の 1 つであり、実際のアプリケーションは特定のニーズに応じて適切に変更する必要がある場合があります。この記事が、PHP を使用して協調フィルタリングおよび推奨システムを実装する方法を理解するのに役立つことを願っています。

以上がPHP を使用して協調フィルタリングと推奨システムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。