使用mysql实现一个简单的推荐算法
推荐算法是会经常遇到的技术。主要解决的是问题是:如果你喜欢书 a,那么你可能会喜欢书 b。
本文我们使用 mysql ,基于数据统计,拆解实现了一个简单的推荐算法。
首先,创建一个 用户喜欢的书数据表,所表示的是 user_id 喜欢 book_id。
create table user_likes ( user_id int not null, book_id varchar(10) not null, primary key (user_id,book_id), unique key book_id (book_id, user_id) ); create table user_likes_similar ( user_id int not null, liked_user_id int not null, rank int not null, key book_id (user_id, liked_user_id) );
插入 4 条测试数据
insert into user_likes values (1, 'a'), (1, 'b'), (1, 'c'); insert into user_likes values (2, 'a'), (2, 'b'), (2, 'c'), (2,'d'); insert into user_likes values (3, 'x'), (3, 'y'), (3, 'c'), (3,'z'); insert into user_likes values (4, 'w'), (4, 'q'), (4, 'c'), (4,'z');
代表的含义为:用户 1 喜欢 a、b、c,用户 2 喜欢 a、b、c、d,用户 3 喜欢 x、y、c、z,用户 4 喜欢 w、q、c、z。
以为用户 1 计算推荐书籍为例,我们需要计算用户 1 和其他用户的相似度,然后根据相似度排序。
清空相似度数据表
delete from user_likes_similar where user_id = 1;
计算用户相似度数据表
insert into user_likes_similar select 1 as user_id, similar.user_id as liked_user_id, count(*) as rank from user_likes target join user_likes similar on target.book_id= similar.book_id and target.user_id != similar.user_id where target.user_id = 1 group by similar.user_id ;
可以看到查找到的相似度结果为
user_id, liked_user_id, rank 1, 2, 2 1, 3, 1 1, 4, 1
然后根据相似度排序,取前 10 个,就是推荐的书籍了。
select similar.book_id, sum(user_likes_similar.rank) as total_rank from user_likes_similar join user_likes similar on user_likes_similar.liked_user_id = similar.user_id left join user_likes target on target.user_id = 1 and target.book_id = similar.book_id where user_likes_similar.user_id = 1 and target.book_id is null group by similar.book_id order by total_rank desc limit 10;
【推荐学习:mysql视频教程】
以上就是聊聊怎么用mysql快速实现一个推荐算法的详细内容,更多请关注其它相关文章!