简单推荐系统

时间:2014-05-03 23:09:04

标签: php mysql codeigniter

大家好, 我正在尝试构建一个非常简单的推荐系统。我无法想到它背后的伪代码,但我知道逻辑。

约翰买了A B C D E. 亚历克斯购买A B X Y Z

我买A B C F R

我会推荐约翰的物品,因为我和他有更多的比赛。因此,建议使用项目D和E.这很简单。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:3)

这是蛮力的方式。可能不是最优雅,但它有效:

// $for = the user we are getting rec's for
// $user_array = the list of all users
function recommendations($for, $user_array) {

    // For storing the best matching user
    $best_match = array('name'=>'', 'count'=>0);

    foreach ($user_array as $name=>$items) {

        // If this user, skip
        if ($name==$for) continue;

        // Number of matching records
        $c = count(array_intersect($items, $user_array[$for]));

        // If better than the current best match, replace
        if ($c > $best_match['count']) {
            $best_match = array('name'=>$name, 'count'=>$c);
        }
    }

    // If no matches found, return false
    if ($best_match['count']==0)
        return false;

    // Return array of recommendations
    return array_diff($user_array[$best_match['name']], $user_array[$for]);
}

样本用法:

$users = array (
    'john' => array('a', 'b', 'c', 'd', 'e'),
    'alex' => array('a', 'b', 'x', 'y', 'z'),
    'me' => array('a', 'b', 'c', 'f', 'r')
);

print_r(recommendations('me', $users));

答案 1 :(得分:0)

推荐系统可以使用不同的算法构建,例如基于项目,基于用户,基于内容和其他技术。我通常会实现很少的算法,并且在扩展时找出最好的算法。 例如,如果我们使用协同过滤技术和关联规则,我们会在确定产品/类别建议时找到信心,提升和支持。 market basket analysis for recommendations

答案 2 :(得分:0)

如果要使用Java创建推荐系统,请使用Apache Mahout。根据您的问题,您必须使用ItemBasedRecommendation,算法为LogLikelihoodSimilarity。

DataModel model = new FileDataModel(new File("path/fileName.csv"));

ItemSimilarity similarity = new LogLikelihoodSimilarity(model);

GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(model, similarity);

List<RecommendedItem> recommendations = recommender.recommend(userNumberForRecommendation, numberOfRecommendation);

for(RecommendedItem recommendation:recommendations) {
        System.out.println(recommendation);
}