文档章节

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

nickles
 nickles
发布于 2017/07/29 16:39
字数 1161
阅读 16
收藏 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
粉丝 4
博文 39
码字总数 32378
作品 0
深圳
程序员
使用OSS中的数据作为机器学习的训练样本

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

龙临
04/12
0
0
推荐系统-初识

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

whk66668888
2017/10/31
0
0
让你"又爱又恨"的推荐系统--程序猿篇

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

流川枫AI
01/06
0
0
电商个性化推荐系统:协同过滤算法方案解析

算法简介 在网络资讯和电子商务信息爆炸式的增长,繁杂的信息中容易造成流失,再次背景下用户的个性化推荐系统显得尤为重要,对电子商务平台和社交信息平台产生了质的影响。 协同过滤推荐算法...

xiaomin0322
06/11
0
0
推荐算法概述:基于内容的推荐算法、协同过滤推荐算法和基于知识的推荐算法

所谓推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西。推荐算法主要分为两种 1. 基于内容的推荐 基于内容的信息推荐方法的理论依据主要来自于信息检索和信息过...

xiaomin0322
06/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java工程师用spring boot和web3j构建以太坊区块链应用

区块链最近IT世界的流行语之一。这项有关数字加密货币的技术,并与比特币一起构成了这个热门的流行趋势。它是去中心化的,不可变的分块数据结构,这是可以安全连接和使用的密码算法。在这种结...

笔阁
10分钟前
2
0
聊聊sentinel的SentinelWebAutoConfiguration

序 本文主要研究一下sentinel的SentinelWebAutoConfiguration SentinelWebAutoConfiguration spring-cloud-alibaba-sentinel-autoconfigure-0.2.0.BUILD-SNAPSHOT-sources.jar!/org/springf......

go4it
12分钟前
0
0
java ArrayList 根据对象内的属性排序

//根据修改时间排序Comparator com = new Comparator<ReleaseInfo>() {public int compare(ReleaseInfo reInfo1, ReleaseInfo reInfo2) { //return reInfo2.getModifyTime().c......

成长中的小白
12分钟前
0
0
PowerDesigner p f m

(非原创) P:PirmaryKey 主键 F:ForeignKey 外键 M:Mandatory 强制要求(不能为空) 主键: 主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从...

森火
12分钟前
0
0
Nexus Repository Manager 搭建私有docker仓库

Nexus Repository Manager 搭建私有docker仓库 2018年05月08日 14:44:23 阅读数:115 1.下载nexus3的镜像: docker pull sonatype/nexus3 2.使用镜像启动一个容器: docker run -d --name n...

linjin200
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部