大家好, 我正在尝试构建一个非常简单的推荐系统。我无法想到它背后的伪代码,但我知道逻辑。
约翰买了A B C D E. 亚历克斯购买A B X Y Z我买A B C F R
我会推荐约翰的物品,因为我和他有更多的比赛。因此,建议使用项目D和E.这很简单。有人可以帮帮我吗?
答案 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);
}