大家好,我正在尝试建立一个非常简单的推荐系统。我想不出它背后的伪代码,但我知道其中的逻辑。
约翰买A B C D E亚历克斯买A B X Y Z
我买A,B,C,F,R
我会从John那里得到推荐,因为我和他有更多的匹配。因此,D和E项将被推荐。这很简单。有没有人能帮我一下?
发布于 2014-05-04 11:31:40
这是一种暴力的方式。可能不是最优雅的,但它是有效的:
// $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));
发布于 2017-08-16 12:56:04
推荐系统可以使用不同的算法来构建,如基于项目的、基于用户的、基于内容的和其他技术。我通常倾向于实现一些算法,然后根据规模找到最好的算法。例如,如果我们使用协同过滤技术和关联规则,我们可以在确定产品/类别推荐时找到置信度、提升和支持。market basket analysis for recommendations
发布于 2020-01-23 21:19:23
如果你正在用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);
}
https://stackoverflow.com/questions/23450766
复制相似问题