A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 我是楠楠 于 2018-10-11 14:54 编辑

【郑州校区】推荐系统开发实战笔记中

【郑州校区】推荐系统开发实战笔记上

1、 基础数据处理
3.1 哪些数据可以表达出偏好
用户和商品的之间的关系,什么样的数据能够表示用户对商品的喜好呢?
要从用户的行为和偏好中发现规律,并基于此给予推荐,如何收集用户的偏好信息成为系统推荐效果最基础的决定因素。用户有很多方式向系统提供自己的偏好信息,而且不同的应用也可能大不相同,下面举例进行介绍:
      
以上列举的用户行为都是比较通用的,推荐引擎设计人员可以根据自己应用的特点添加特殊的用户行为,并用他们表示用户对物品的喜好。在一般应用中,我们提取的用户行为一般都多于一种,关于如何组合这些不同的用户行为,基本上有以下两种方式:
Ø 将不同的行为分组:一般可以分为“查看”和“购买”等等,然后基于不同的行为,计算不同的用户 / 物品相似度。比如:“购买了该图书的人还购买了 ...”,“查看了图书的人还查看了 ...”
Ø 根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。一般来说,显式的用户反馈比隐式的权值大,但比较稀疏,毕竟进行显示反馈的用户是少数;同时相对于“查看”,“购买”行为反映用户喜好的程度更大,但这也因应用而异。
3.2 一个用户对一个商品的偏好数据
计算偏好数据的时候,需要将所有的操作得分通过算法进行汇总
1)根据用户操作的复杂度,对以上操作进行分类。
一般可以分为四类
#根据用户操作的复杂度,将用户的操作分为四类;
#        一类:查看、停留、评分、投票、收藏、关注;
#        二类:转发、评论;
#        三类:加入购物车:
#        四类:订单;
# 每个类别的得分的权重不一样
#         一类:10%
#        二类:20%
#        三类:30%
#        四类:40%
2)计算用户的整体偏好值
3)得到用户的偏好值
2、 推荐算法-协同过滤
概念:了解是什么?
使用:使用mahout算法库
结果:结果数据导入的redis
4.1、协同过滤-用户
第一代协同过滤技术是基于用户的协同过滤算法,基于用户的协同过滤算法在推荐系统中获得了极大的成功,但它有自身的局限性。
基于用户的协同过滤算法先计算的是用户与用户的相似度(兴趣相投,人以群分物以类聚),然后将相似度比较接近的用户A购买的物品推荐给用户B,专业的说法是该算法用最近邻居(nearest-neighbor)算法找出一个用户的邻居集合,该集合的用户和该用户有相似的喜好,算法根据邻居的偏好对该用户进行预测。
张三、王五、李四
张三和王五是否相似? 100
张三和李四是否相似? 90
4.1.1、怎么计算相似度?
张三购买过,橘子,橙子、苹果、手机、卫生纸
王五购买过,橘子,橙子、苹果、手机、
李四购买过,橘子,橙子、苹果
张三和王五的相似度 4分
张三和李四的相似度 3分
王五和李四的相似度 3分
4.1.2、怎么推荐?给李四进行推荐?
1)和李四相似的用户有谁? 张三和王五
在实际的网站中,和李四相似的用户可能有几千万。
因为一个电商网种注册用户有1000万,就需要计算每个用户之间的相似度。
A:{B:98、C:77、D:66、E:65、F:60、G:53、X:44、Y:37、Z:27 ……}
最近领域:
只选三个、只选相似度分数大于60分(5个)
Ø 固定数量的邻居:K-neighborhoods 或者 Fix-size neighborhoods
Ø 基于相似度门槛的邻居:Threshold-based neighborhoods
2)张三和王五购买过什么东西?
橘子,橙子、苹果、手机、卫生纸
橘子,橙子、苹果、手机、
3)对多个结果集进行汇总
橘子,橙子、苹果、手机、卫生纸
4)给李四进行推荐(购买过的就别推荐)
橘子,橙子、苹果
橘子,橙子、苹果、手机、卫生纸
5)推荐结果:手机和卫生纸
4.2、协同过滤-物品
第二代协同过滤技术是基于物品的协同过滤算法,基于物品的协同过滤算法与基于用户的协同过滤算法基本类似。他使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户。这听起来比较拗口,简单的说就是几件商品同时被人购买了,就可以认为这几件商品是相似的,可能这几件商品的商品名称风马牛不相及,产品属性有天壤之别,但通过模型算出来之后就是认为他们是相似的。
4.2.1、怎么计算相似度?
张三购买过,橘子,橙子、苹果、手机、卫生纸
王五购买过,橘子,橙子、苹果、手机、
李四购买过,橘子,橙子、苹果
当两个商品同时被购买,就认为相似。
橘子 和 橙子的相似度 3
橘子 和 苹果的相似度3
橘子 和 手机的相似度2
橘子 和 卫生纸的相似度 1
4.2.2、怎么推荐?
用户麻子,购买过橘子。
和橘子相似的商品:橙子3、苹果3、手机2、卫生纸1
产生推荐结果:橙子3、苹果3、手机2、卫生纸1
4.3 如何使用协同过滤算法
在实际的工作中,不需要我们自己动手开发一个算法,如同我们保存数据库的时候,不需要自己开发一个数据库。只需要调用现成的算法库。
调用时,需要知道算法库中算法的输入参数有哪些、输出参数有哪些。
Java mahout算法库,支持协同过滤。
Python
R
C
Mahout使用步骤
[AppleScript] 纯文本查看 复制代码
public static void main(String[] args) throws Exception {
    //1) 准备数据 这里是电影评分数据
    // 1,1,4
    // 1,1,3
    File file = new File("E:\\itcast\\env\\ml_data\\ml-10m\\ml-10M100K\\ratings.dat");
    //2) 将数据加载到内存中,GroupLensDataModel是针对开放电影评论数据的
    DataModel dataModel = new GroupLensDataModel(file);
    //3) 计算相似度,相似度算法有很多种,欧几里得、皮尔逊等等。
    UserSimilarity similarity = new PearsonCorrelationSimilarity(dataModel);
    //4) 计算最近邻域,邻居有两种算法,基于固定数量的邻居和基于相似度的邻居,这里使用基于固定数量的邻居
    UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(100, similarity, dataModel);
    //5) 构建推荐器,协同过滤推荐有两种,分别是基于用户的和基于物品的,这里使用基于用户的协同过滤推荐
    Recommender recommender = new GenericUserBasedRecommender(dataModel, userNeighborhood, similarity);

    //给用户ID等于5的用户推荐10部电影
    List<RecommendedItem> recommendedItemList = recommender.recommend(5, 10);
    //打印推荐的结果
    System.out.println("使用基于用户的协同过滤算法");
    System.out.println("为用户5推荐10个商品");
    for (RecommendedItem recommendedItem : recommendedItemList) {
        System.out.println(recommendedItem);
    }
    long start = System.currentTimeMillis();
    recommendedItemList = recommender.recommend(11, 10);
    System.out.println(System.currentTimeMillis()-start);
}
传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马