>백엔드 개발 >PHP 튜토리얼 >PHP를 사용하여 협업 필터링 및 추천 시스템을 구현하는 방법

PHP를 사용하여 협업 필터링 및 추천 시스템을 구현하는 방법

PHPz
PHPz원래의
2023-08-02 11:17:081638검색

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. 유사성 계산
    협업 필터링에서는 사용자 간의 유사성을 계산해야 합니다. 일반적으로 사용되는 유사성 계산 방법은 Pearson 상관 계수입니다. 다음은 Pearson 상관 계수를 계산하기 위해 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 함수는 추천 점수를 기준으로 높은 항목에서 낮은 항목 순으로 정렬된 항목 배열을 반환합니다. $n 表示要生成的推荐数量,默认为5。user_based_recommendation 函数将返回一个按推荐评分从高到低排列的物品数组。

  1. 使用示例
    下面是一个使用上述函数的示例:
$recommendations = user_based_recommendation($ratings, 'user1', 3);

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

以上示例将为user1

    사용 예

    다음은 위 함수를 사용한 예입니다.

    rrreee🎜위 예에서는 user1에 대한 추천 항목 3개를 생성하고 그 결과를 출력합니다. 🎜🎜요약: 🎜위 단계를 통해 PHP를 사용하여 협업 필터링 및 추천 시스템을 구현하는 방법을 보여주었습니다. 먼저 사용자 항목 매트릭스의 데이터를 준비하고 사용자 간 유사도를 계산했습니다. 그런 다음 유사성을 기반으로 개인화된 추천이 생성됩니다. 이는 하나의 구현 방법일 뿐이며 실제 애플리케이션은 특정 요구에 따라 적절히 수정해야 할 수도 있습니다. 이 기사가 PHP를 사용하여 협업 필터링 및 추천 시스템을 구현하는 방법을 이해하는 데 도움이 되기를 바랍니다. 🎜

위 내용은 PHP를 사용하여 협업 필터링 및 추천 시스템을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.