项目提取码:1234
1、数据导入mongodb DataLoader2、统计推荐模块 StatisticsRecommenderproduct和rating表,通过spark加载进来数据(RDD格式)转化为Dataframe格式存入MongoDB中
3、基于LFM(隐语义模型)的离线推荐模块 OfflineRecommender1、加载Rating表,通过spark sql 做不同的统计
2、历史热门商品,按照评分个数统计,存储到RateMoreProducts表中
3、近期热门商品,通过商品时间戳排序,对最近2个月的商品进行评价数统计,存储到RateMoreRecentlyProducts表中
4、优质商品推荐,计算所有商品的平均评分,进行排序,存储到AverageProducts表中
LFM隐语义模型
1、加载Rating表[userId,productId,score]
2、取出用户数据和商品数据,userId,productId
3、通过ALS训练
4、获得预测评分矩阵,得到用户的推荐列表
5、从预测评分矩阵中提取得到用户推荐列表
6、利用商品的特征向量,计算商品的相似度列表
7、两两配对商品,计算余弦相似度
8、存储两两商品的余弦相似度,存储为ProductRec表
ALS模型评估与参数选择
- 这里就是写了一个模型主体部分,简简单的模型概念
ALS协同过滤算法
OnlineRecommender
6、实时推荐系统联调KafkaStream
7、基于内容的离线推荐模块ContentRecommender
TF-IDF
-
一句话:字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
-
TF-IDF = TF * IDF
8、基于ItemCf的离线推荐模块1、读入Produc表,对tags列进行分词
2、定义一个分词器,分词结束计算每个词的频次
3、定义一个IDF工具,计算TF-IDF
4、两两配对商品,计算余弦相似度
5、存储为ContentbasedProductRecs表
- ItemCFRecommender
- 基于物品的协同过滤(Item-CF)
关于系统的启动方法如果两个商品有同样的受众(感兴趣的人群),那么它们就是有内在相关性的。所以可以利用已有的行为数据,分析商品受众的相似程度,进而得出商品间的相似度。
启动mongo
sudo mongod --dbpath=/var/lib/mongodb
启动zookeeper
/usr/local/zookeeper/zookeeper-3.4.11/bin/zkServer.sh start
启动kafka
/usr/local/kafka_2.11-0.10.2.1/bin/kafka-server-start.sh -daemon /usr/local/kafka_2.11-0.10.2.1/config/server.properties
启动redis
redis-server
redis客户端
redis-cli
运行OnlineRecommend
创建生产者
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic recommender
产生数据
4867|8195|4.0|1556433066
启动kakfaStream/Application
启动flume
./bin/flume-ng agent -c ./conf/ -f ./conf/log-kafka.properties -n agent -Dflume.root.logger=INFO,console
启动tomcat7 进入系统
至此系统完成全部启动



