简单推荐系统


Simple Recommendation system

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

约翰买A B C D EAlex买A B X Y Z

我买A B C F R

我会被John推荐,因为我和他有更多的匹配。因此,建议采用D项和E项。这很简单。有人能帮我一下吗?

这是一种蛮力方法。可能不是最优雅的,但它可以工作:

// $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));

推荐系统可以使用不同的算法构建,如基于项目、基于用户、基于内容和其他技术。我通常会实现几个算法,然后通过扩展找出最好的一个。例如,如果我们使用协同过滤技术和关联规则,我们会发现确定产品/类别推荐的信心,提升和支持。推荐市场购物篮分析

如果你在Java中制作推荐系统,那么使用Apache Mahout。根据你的问题,你必须使用itembase推荐,算法将是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);
}