文档章节

aliyun-PAI-基于协同过滤的商品推荐

nickles
 nickles
发布于 2017/07/29 16:39
字数 1161
阅读 19
收藏 1

第一部分:此块引用开始至下段块引用开始,借鉴于网络,非原创,忘了原链接了,特此声明。

1.概述

和搜索引擎一样,推荐系统是为了帮助人们更快速的获得对自己有用的信息。和搜索引擎不同,推荐系统是人们被动的获取,由系统根据用户行为或其他的信息推荐给用户的,儿搜索引擎是用户主动输入关键字获取的。从某种意义上说,搜索引擎和推荐系统是互相补充的。而推荐算法的本质是通过一定的方式将用户和物品联系起来,从而有效的给用户推荐本身感兴趣或需要但是没有发现的物品。

个性化推荐系统的应用场景:电子商务(据说Amazon 35%的销售额来自推荐系统)、电影和视频网站、个性化音乐网络电台、社交网络、个性化阅读、基于位置的服务、个性化邮件、个性化广告(上下文广告、搜索广告、个性化展示广告)。

 

         一个推荐系统的评判标准:用户满意度、预测准确度、覆盖率、多样性、新颖性、惊喜度、信任度、实时性、健壮性、商业目标。

2.主要推荐系统算法

基于邻域的方法、隐语义模型、基于图的随机游走算法。在这些方法中,最著名、在业界得到最广泛应用的算法是基于邻域的方法。

基于邻域的方法主要包括:基于用户的协同过滤算法(给用户推荐和他兴趣相似的其他用户喜欢的物品)和基于物品的协同过滤算法(给用户推荐和该用户喜欢的物品属性类似的其他物品)

下面主要说明一下第一种算法

基于用户的协同过滤算法

该算法的主要步骤:1、找到与该用户兴趣相似的用户集;2、找到这个集合中的用户喜欢的但是没有听说过的物品推荐给目标用户。

第一步:计算用户的兴趣相似度

可以通过以下公式计算:

其中u,v表示两个用户,N(u)表示用户u曾经有过正反馈的物品集合;N(v)表示用户v曾经有过正反馈的物品集合。

算法的Python实现如下:

 

def User_Similarity(train):
    W=dict()
    for u in train.keys():
        for v in train.keys():
            if u == v: 
                continue;      
            W[u][v] = len(train[u],train[v])
            W[u][v] /= math.sqrt(len(train[u]) * len(train[v]) * 1.0)

 

 

可以发现该代码的时间复杂度是O(n*n),并且大多数用户的兴趣相似度可能位0,即|N(u)∩N(v)| = 0,所以该代码还是可以优化的。

我们可以先计算出|N(u)∩N(v)| ≠ 0的用户对(u,v)然后除以余弦相似度。这里可以使用倒排,将数据排列成物品到用户的倒排表,物品后链接的是与对该物品感兴趣的用户链表,然后循环统计每个物品用户链表的用户相似度即可。

算法的Python代码如下:

#!/usr/bin/env python
# coding=utf-8
def UserSimilarity(train):
    #建立倒排表
    item_users = dict()
    for u,items in train.items():
        for i in item.keys():
            if i not in item_users:
                items_users[i] = set()
            item_users[i].add(u)
    #item_users即为物品到用户的倒排表
    #计算用户之间的相关度
    C = dict()#任意用户之间的相关度
    N = dict()#用户正反馈物品的数目
    for i ,users in item_users:
        for u in users:
            N[u] += 1
            for v in users:
                if u == v:
                    continue:
                C[u][v] += 1
    #最后计算结果矩阵
    W = dict()
    for u ,related_users in C.items():
        for v,cuv in related_users:
            W[u][v] = cuv / math.sqrt(N[u]* N[v]*1.0)
return W

 

 

物品-用户倒排表

第二步:推荐和他相似的K个用户喜欢的物品

其中:p(u,i)用户u对物品i的兴趣度;

S(u,K)包含和用户u兴趣最相近的K的用户;

Wuv用户u和用户v的兴趣相似度;

Rvi用户v对物品i的兴趣度;

算法的Python代码实现:

def Recommend(user,train,W):
    rank = dict()
    interacted_items = train[user]
    for v , wuv in sort(W[u].items,key = itemgetter(1),reverse = True)[0:k]:
        for i ,rvi in train[v].items:
            if i in interacted_items:
                continue
            rank[i] += wuv * rvi
    return rank

第二部分:阿里云-PAI-推荐系统-基于协同过滤的商品推荐,此块引用往下,是一些分析和实践。

 

 

 

 

 

 

 

 

 

 

本文转载自:

共有 人打赏支持
nickles
粉丝 5
博文 39
码字总数 32378
作品 0
深圳
程序员
私信 提问
使用OSS中的数据作为机器学习的训练样本

使用OSS中的数据作为机器学习的训练样本 背景 对象存储服务OSS 阿里云对象存储服务(Object Storage Service,以下简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 云机...

龙临
04/12
0
0
让你"又爱又恨"的推荐系统--程序猿篇

推荐系统 0、又爱又恨的推荐系统 作为一名程序猿,一直对推荐系统比较感兴趣,最近看到一个用户的吐槽: 又爱又恨 推荐系统的应用场景,我相信在日常生活中大家基本都会接触到。例如,作为一...

流川枫AI
01/06
0
0
推荐系统-初识

推荐系统可认为是一种特殊形式的信息过滤(Information Filtering)系统,主要有“协同过滤推荐”、“基于内容的推荐”、“基于关联规则的推荐”、“基于知识推理的推荐”、“组合推荐”这几...

whk66668888
2017/10/31
0
0
推荐系统思考小结(基于Mahout)

最近一直学习Mahout和推荐引擎相关的知识,一直想搞清楚,什么样的推荐系统的架构才是合理,既能对海量数据进行复杂运算,又能及时响应做出推荐。在网上发现一篇对推荐系统结构讲解的很好的文...

Breath_L
2012/06/03
0
5
白话推荐系统——从原理到实践,还有福利赠送!

之前流水账似的介绍过一篇机器学习入门的文章,大致介绍了如何学习以及机器学习的入门方法并提供了一些博主自己整理的比较有用的资源。这篇就尽量以白话解释并介绍机器学习在推荐系统中的实践...

青夜之衫
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

oh-my-zsh 自定义

GitHub 地址 基于 oh-my-zsh 的自定义配置,增加了一些个人常用插件与皮肤。 采用的是 git submodule 来维护,包括 oh-my-zsh,之所以这么搞,主要是手头有多台 linux 需要维护, 每台机器、...

郁也风
5分钟前
0
0
Docker安装踩坑:E_FAIL 0x80004005的解决

参考 菜鸟教程--Windows Docker 安装 http://www.runoob.com/docker/windows-docker-install.html 官方文档-Install Docker Toolbox on Windows https://docs.docker.com/toolbox/toolbox_in......

karma123
31分钟前
2
0
js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
17
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
31
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部