基于协同过滤算法的商品推荐系统
·
基于协同过滤算法的商品推荐系统采用当前最流行的Springboot SpringMVC Mybatis框架开发,前端使用目前最流行的VUE框架,数据库采用开源Mysql。架构前后端分离。功能方面:模拟完整的购物流程,商品浏览,商品分类,商品搜索,商品详情,购物车,订单支付,个人中心,登录注册等模块。
系统中的猜你喜欢采用了协同过滤算法计算用户相似度,从而推荐当前登录用户可能喜欢的商品。
协同过滤算法讲解视频:基于用户协同过滤算法讲解与演示_哔哩哔哩_bilibili
一、协同过滤算法
两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商:

上式定义了总体相关系数,常用希腊小写字母
作为代表符号。估算样本的协方差和标准差,可得到皮尔逊相关系数,常用英文小写字母代表:


总体和样本皮尔逊系数的绝对值小于或等于1。如果样本数据点精确的落在直线上(计算样本皮尔逊系数的情况),或者双变量分布完全在直线上(计算总体皮尔逊系数的情况),则相关系数等于1或-1。
二、技术介绍:
Java;Springboot;VUE;Mysql
三、开发工具:
1.IntelliJ IDEA或者Myeclipse 3.Navicat 3.Mysql 4.JDK8
四、提供的服务:
- 源代码(前后端源代码+sql脚本)
- 配套文档(一万字以上)
- 一键启动项目(适合基础薄弱的同学,一键启动,无需搭建复杂环境)
- 远程调试包运行
源代码和配套文档领取加文章最下方的名片哦~








package com.codercode.sales.buss.good.service;
import com.alibaba.fastjson.JSON;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
import org.apache.mahout.cf.taste.impl.model.jdbc.MySQLJDBCDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.CachingRecommender;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class GoodRecommendServiceImpl implements GoodRecommendService {
@Override
public List<RecommendedItem> recommend(Long userId , Integer size) {
List<RecommendedItem> recommendations = null;
try {
Class.forName("com.mysql.jdbc.Driver");
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setServerName("localhost");//本地为localhost
dataSource.setPort(3308);
dataSource.setUser("root");
dataSource.setPassword("");
dataSource.setDatabaseName("sales-system");//数据库名
DataModel dataModel=new MySQLJDBCDataModel(dataSource,"good_score","user_id","good_id","score","time");
UserSimilarity similarity = new PearsonCorrelationSimilarity(dataModel);//用PearsonCorrelation 算法计算用户相似度
// double similarity1 = similarity.userSimilarity(1003l, 1001L);
// double similarity2 = similarity.userSimilarity(1003l, 1002L);
// double similarity3 = similarity.userSimilarity(1003l, 1003L);
// double similarity4 = similarity.userSimilarity(1003l, 1004L);
// double similarity5 = similarity.userSimilarity(1003l, 1005L);
UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, dataModel);//计算用户的“邻居”,这里将与该用户最近距离为 3 的用户设置为该用户的“邻居”。
long[] userNeighborhood = neighborhood.getUserNeighborhood(userId);
System.out.println("当前用户的邻居为:"+JSON.toJSONString(userNeighborhood));
Recommender recommender = new CachingRecommender(new GenericUserBasedRecommender(dataModel, neighborhood, similarity));//采用 CachingRecommender 为 RecommendationItem 进行缓存
recommendations = recommender.recommend(userId, size);
System.out.println("推荐结果为:"+JSON.toJSONString(recommendations));
return recommendations;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
GoodRecommendServiceImpl goodRecommendService = new GoodRecommendServiceImpl();
List list = goodRecommendService.recommend(1003L,2);
System.out.println(list);
}
}
更多推荐
所有评论(0)