推荐引擎算法 - 猜你喜欢的东西

千人千面、个性化推荐:解读数据赋能商家背后的AI技术 【摘要】 12月6-7日,由阿里巴巴集团、阿里巴巴技术发展部、阿里云云栖社区联合主办,以“2016 双11技术创新”为主题的阿里巴巴技术论坛上,来自商家事业部的技术总监魏虎给大家分享了数据赋能商家背后的AI技术。首先对大数据和人工智能进行了简要介绍,接着着重分析了客户运营平台,包括实时分群算法、match和rank框架以及千人千面技术,最后讲解了千牛头条、服务市场和智能客服中AI技术的应用。... 阅读详情

在一些大型购物网站,我们常会看到一个功能叫“猜你喜欢”(或其它类似的名字),里面列出一些跟你买过商品相关的其它商品。网站的用户越多,或你在网站上购买的东西越多,它往往就猜的越准。在一些音乐网站、书评网站、电影网站也有类似的推荐系统,比如豆瓣上的“豆瓣猜”、百度音乐的“为你推荐”等,推荐结果都不错。

这些推荐系统的具体实现我们无法知晓,但原理是类似的,都是采用基于协同过滤的推荐机制。这里我们探讨一下这个推荐机制的原理。

举例

下图是一个用户对课程评分表。评分从1星到5星,灰色表示该用户没有对该课程评分。由图可知,用户3没有学过《面向对象基础》和《Struts开发框架》。问,如果要给用户3推荐其中一门课程,应该推荐哪一门?


基本概念

相似度

如果一个用户喜欢一种物品,那么他很可能也喜欢类似的物品。如果我们找到了测量物品之间相似程度的方法,也就解决了推荐系统的核心问题。

那如何找出这些方法呢?比如,啤酒与芝麻酱更相似还是与纸尿裤更相似?怎么知道啤酒和纸尿布的相似度是多少?

解决这个问题之前,不妨先考虑一个简单的问题。假设平面上有3个点,坐标分别是A(1,2)、B(1,3)和C(4,7),如图:


AB的距离=

BC的距离=

很显然B与A的距离小于B与C的距离,换句话说B与A更接近(相似)。

这种用根方差计算出来的距离叫欧式距离,欧式距离可以扩展到多维空间。大于3维的空间我们想象不出来,但是算法是一样的。

如果我们有下面的数据


那么通过用欧式距离公式可知:

《机器学习》与《python编程》的距离=

为了便于理解和比较,一般将相似度的值设在0到1之间,用欧式距离d得出的相似度可以表示为:


除了用欧式距离计算相似度外,常用的方法还有皮尔逊相关系数(Pearson correlation)和余玄相似度(cosine similarity).

下面是一段python代码,实现了基于欧式距离的相似度计算

```python

from numpy import *

from numpy import linalg as la

def eSim(A,B):

return 1.0/(1.0+la.norm(A-B))

```

再添加一个加载数据的方法。该方法返回一个二维数组,表示用户对课程的评价值。

```python

def loadData():

return[[5, 3, 0, 2, 2],

[4, 0, 0, 3, 3],

[5, 0, 0, 1, 1],

[1, 1, 1, 2, 0],

[2, 2, 2, 0, 0],

[1, 1, 1, 0, 0],

[5, 5, 5, 0, 0]]

```

推荐引擎 - 给用户推荐最喜欢的课程

目的:给定一个用户,程序返回N个该用户最喜欢的课程

步骤

* 查询用户没有评级的课程, 即矩阵中的0元素

* 在用户没有评级的所有课程中,对每个课程预测一个评级分数

* 评分从高到底排序, 返回前N个课程

推荐引擎需要一个对课程评估分值的函数

```python

'''

函数功能:在给定相似度计算方法的条件下,估计该用户对课程的评分值

input

ds: 评价矩阵

userIdx: 用户编号

simFunc: 相似度计算方法

courseIdx: 课程编号

output

编号为courseIdx的课程对应的估计分值

'''

def standEst(ds, userIdx, simFunc, courseIdx):

n = shape(ds)[1] #课程数量

simTotal = 0.0; ratSimTotal = 0.0

#遍历所有课程

for j in range(n):

userRating = ds[userIdx,j]  #用户对第j个课程的评价

if userRating == 0: continue  #用户没有对该课程评分,跳过

#寻找两个用户都评级的课程

overLap = nonzero(logical_and(ds[:,courseIdx].A>0, ds[:,j].A>0))[0]

#如果两个课程(courseIdx和j)没有共同评价人,则相似度=0

if len(overLap) == 0: similarity = 0

#否则,计算相似度

else: similarity = simFunc(ds[overLap,courseIdx], ds[overLap,j])

#总相似度(相似度可以理解为权重)

simTotal += similarity

#相似度*评分的合计

ratSimTotal += similarity * userRating

if simTotal == 0: return 0

else: return ratSimTotal/simTotal #预计得分

```

推荐引擎代码

```python

'''

推荐引擎: 给用户推荐N个最喜欢的课程

input

ds: 评价矩阵

userIdx:

N: 最高推荐N个结果

simFunc

estFunc

'''

def recommendCourses(ds, userIdx, N=3, simFunc=eSim, estFunc=standEst):

unratedCourses = nonzero(ds[userIdx,:].A==0)[1] #当前用户没有打分的课程

if len(unratedCourses) == 0: return '你已经学过所有课程'

courseScores = [] #课程分数列表

for courseIdx in unratedCourses:

estimatedScore = estFunc(ds, userIdx, simFunc, courseIdx)

courseScores.append((courseIdx, estimatedScore))

return sorted(courseScores, key=lambda jj: jj[1], reverse=True)[:N]

```

测试函数,给用户3推荐课程

```python

def test():

dataMat = mat(loadData())

print recommendCourses(dataMat,2)

```

执行代码

```bash

>>> import recommend

>>> recommend.test()

[(2, 3.6666666666666665), (1, 2.068764098505754)]

```

推荐结果:下标为2的课程(《Struts开发框架》)得分3.67星,下标为1的课程(《面向对象思想》)得分为2星。因此,判断用户更喜欢《Struts开发框架》。

从直观上也可以这样理解:用户4,5,6,7都对《Java编程》和《Struts开发框架》做了评价,而且评价相同。因此,《Struts开发框架》与《Java编程》属于非常相似的物品。 而用户3对《Java编程》评价极高(5星),故判断《Struts开发框架》也应该得高分(对于用户3而言)。

局限

* 计算量问题:这个算法需要对整个数据集进行多次复杂的计算,如果数据量很大,则性能可能无法接受。一种解决办法是对矩阵进行SVD分解,把高维度的矩阵转换成低维度度的矩阵。此外,采用离线计算,将相似度这个中间结果保存起来重复利用也可以提高性能。

* 冷启动问题:新课程加进来时,由于缺乏数据无法进行推荐。这个可以通过给课程打标签的方式进行。

协同过滤推荐算法详解 一、什么是协同过滤? 协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。 协同过滤一般是在海量的用户中发掘 阅读详情

相关推荐

推荐算法:为什么浏览器总是知道我喜欢的内容?

一、由来已久的分发问题 你一定有过或正在经历类似这样的情况,当你打开浏览器,看到一个关于李连杰的武打场面的短视频,从小喜爱李连杰的你便点了进去,回忆童年时的记忆,顺便搜了以下这个短视频出自那个电影里面,发现电影名字叫做《龙之吻》(详细的剧情你记不清了),在看完《龙之吻》相关的一些介绍后,心满意足的关闭了页面,浏览自己想看的东西。第二天,你再一次打开了浏览器,你发现在浏览器的内容推荐区出现了以前从...

shujufenxishi111的博客 2206

推荐系统实战——猜你喜欢推荐系统

协同过滤算法是推荐系统中最重要也是最常用的算法之一,本课程以项目实现为主,讲解基于商品的协同过滤算法应用,通过不断对算法进行优化,提升推荐结果的准确率与召回率。

探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤

本系列的第一篇为读者概要介绍了推荐引擎,下面几篇文章将深入介绍推荐引擎的相关算法,并帮助读者高效的实现这些算法。在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法。它以其方法模型简单,数据依赖性低,数据方便采集 , 推荐效果较优等多个优点成为大众眼里的推荐算法“No.1”。本文将带你深入了解协同过滤的秘密,并给出基于 Apache Mahout 的协同过滤算法的高效实现。

wenyusuran的专栏 1852

DataCastle[猜你喜欢]赛事算法分享

DataCastle[猜你喜欢]赛事冠军分享关于竞赛DC的小伙伴们大家好,我是Yes,boy! ,来自东北大学计算机学院。在猜你喜欢推荐系统竞赛中,很幸运以7.89465的得分取得第一名,看到大家在群里对推荐系统的热情很高,所以在这里我简单介绍下竞赛中我的思路。 本次比赛的赛题背景是给出了约3400万条数据,包含一个商品网站站内顾客在某一时刻对某一个商品的打分值,分值范围为1至5分。目的是通过对这

Lao男孩的博客 3877

第四章:推荐引擎算法与实践

1. 背景介绍 随着互联网的快速发展和信息量的爆炸式增长,用户面临着信息过载的问题。为了解决这个问题,推荐系统应运而生。推荐系统通过分析用户的历史行为、兴趣偏好等信息,为用户推荐个性化的商品、服务或内容,帮助用户发现他们可能感兴趣的内容。推荐引擎是推荐系统中的核心组件,负责根据用户的特征和行为数据,预测用户对特定项目的评分或偏好,并生成推荐列表。

AI天才研究院 753

TI C2000 , .cmd文件,.TI.ramfunc,将程序分配为在RAM中运行/Flash运行的配置方法和原理讲解,(如28375S ,280049,28335等等芯片)

1 基础知识讲解 1.1 在RAM中运行还是在flash中运行指的是什么? 1.1.1 背景:程序编译完之后生成的.bin文件,.bin文件中包含代码段,代码段中全是汇编指令,而汇编指令中包含多个函数,各函数头的地址不同,如存在A函数和B函数,假设RAM地址区间是0x0000-0x8000,flash的地址区间是0xA000-0xF000,A函数要调用B函数,则A函数调用B函数的那段汇编指令中包含的是B函数头的存储地址,A函数和B函数都在flash中有存储 1.1.2 情况1:B函数是配置为在RAM中运行,

weixin_43776284的博客 8068

php猜你喜欢怎么实现,原来“猜你喜欢”竟是一种“算法”

原标题:原来“猜你喜欢”竟是一种“算法”每个人的智能手机设备里都存放着各种功能的应用软件,打开程式主页,通常看到一列清单,标注称“猜你喜欢”,实际上是设有产品和内容的推荐列表。看似自动生成,但其实背后依靠的是一种计算机算法——推荐算法,通过追踪和收集使用者过去的消费数据,预测、匹配用户的潜在需求,生成个性化推荐列表。电子商务逐渐普及,音乐、图书、视频、新闻、购物等等都由传统形式向线上模式转变,顾客...

weixin_42298128的博客 1225

STM32-TIM4-定时器中断

#include "project.h" #include "timer.h" //TIM4_Init(2000 ,72);//定时2ms /* 定时器中断的定时时间设定 定时器只需要配置时钟、TIM和NVIC即可 */ void TIM4_Init(u16 period, u16 prescaler) { NVIC_InitTypeDef NVIC_InitStructure; TIM_...

snaygo 6204

用python实现猜你喜欢_推荐引擎算法 - 猜你喜欢的东西

在一些大型购物网站,我们常会看到一个功能叫“猜你喜欢”(或其它类似的名字),里面列出一些跟你买过商品相关的其它商品。网站的用户越多,或你在网站上购买的东西越多,它往往就猜的越准。在一些音乐网站、书评网站、电影网站也有类似的推荐系统,比如豆瓣上的“豆瓣猜”、百度音乐的“为你推荐”等,推荐结果都不错。这些推荐系统的具体实现我们无法知晓,但原理是类似的,都是采用基于协同过滤的推荐机制。这里我们探讨一下这...

weixin_39633054的博客 787

Comsol超声空化气泡仿真:从基础理论到工业应用实践

本文详细介绍了Comsol超声空化气泡仿真的基础理论及工业应用实践。通过解析超声空化现象、Comsol模型搭建流程及求解器优化技巧,帮助工程师掌握气泡仿真技术,提升超声波清洗和乳液制备等工业应用的效率与质量。

weixin_27966471的博客 252

告别全局搜索!7种SRP-PHAT快速算法实战对比:哪个更适合你的麦克风阵列?

本文深入探讨了7种SRP-PHAT改进算法在声源定位领域的实战表现,包括SRC、CFRC、SPF等方案。通过对比计算效率、定位精度和环境鲁棒性等核心指标,为不同场景(如会议室、智能家居、工业机器人)提供算法选型建议,帮助工程师优化麦克风阵列性能。

weixin_42546392的博客 397

​机器如何“猜你喜欢”?深度学习模型在1688的应用实践

小叽导语:本文主要介绍了Wide&Deep、PNN、DeepFM三个模型以及1688CBU事业部的顾海倩同学提出的Wide&Resnet模型结构,并尝试在1688猜你喜欢的真实数据场景中进行应用。文内有一些实验结果,也提出了一些遇到的问题,希望能与大家一起分享讨论。 一、背景猜你喜欢是推荐领域极其经典的一个场景,在1688首页无线端猜你喜...

weixin_34375054的博客 183

我用WorkBuddy“克隆“了一个我,从此每句话像我自己说的

各位,做这件事花了多长时间?准备样本可能要半小时,提炼风格十分钟,保存固化再花十分钟。加起来不到一个小时。但这一个小时之后呢?你就拥有了一个"永远在线的文字替身"。以后写口播稿,打开WorkBuddy跟它说;写课程逐字稿,跟它说;写公众号文章,也跟它说。写出来的东西,你的学员一看——“嘿,这不就是翟猛老师说的嘛。说到这儿,可能有人会问:老师,我的风格有那么重要吗?AI写的不都挺好的吗?各位你想想看,你为什么愿意听某个老师的课?不只是因为他讲的内容好,更是因为你喜欢他讲话的方式。

weixin_39284145的博客 820

推荐算法总览(完整总结)

目录 1. 什么是推荐算法 2. 推荐算法的目的 3.推荐算法的条件 4. 推荐算法分类 4.1 基于流行度的推荐算法 4.2基于内容的推荐算法 4.3 基于关联规则的推荐算法 4.4 基于协同过滤的推荐 4.4.1基于用户(User-based)的推荐 4.4.2基于物品(Item-based)的推荐 4.4.3 协同过滤算法总结 4.5 基于模型的推荐算法 4...

大柳的博客 9285

C/C++炫酷烟花①(完整代码)

C/C++实现炫酷烟花动画的完整代码。

AIGC 2万+

openbmc 支持mctp over pcie(二)

本文介绍了在OpenBMC系统中实现MCTP over PCIe的社区方案,主要针对AMD CPU和Intel CPU平台。方案基于社区开发的mctpd应用层和内核驱动,通过修改设备树(dts)配置内存区域,并编译Linux内核模块。验证时可通过查看/proc/net/protocols确认MCTP协议支持,使用ip addr命令检查mctppci0网络接口状态。相关代码和文档参考了AspeedTech和CodeConstruct的GitHub仓库。该方案为BMC作为MCTP端点提供了标准化实现方法。

wit_yuan的专栏 378

区分不同颜色的算法_个性化推荐算法及待解决的问题(上)

本篇文章主要介绍推荐的一些常见的算法,重在原理的理解,减少了算法公式的推导以及繁杂的解释,由于篇幅较长,本文分上和下两篇,大家可循序渐进,没必要马上理解里面的原理。推荐的诞生互联网的普及带来了信息量的爆炸增长,用户需要花费更多时间才能获得真正有用的信息,信息的增长对信息的使用效率反而降低了,这就是所谓的信息超载(informationoverload)问题。解决信息超载问题一个最有潜力的办法是推荐...

weixin_39971435的博客 219

Coze智能体开发:扣子空间制作PPT功能

扣子空间内置了丰富的场景模板,涵盖人文历史、学术分享、研究报告、数据分析等场景,可以满足不同用户的需求。 你只需输入与制作 PPT 相关的提示词,Agent 就能基于这些提示词展示思考的过程,并自动生成完整的 PPT。

王国平的博客 2053

【推荐算法入门】推荐系统之推荐算法概述

1. 什么是推荐算法 推荐算法最早在1992年就提出来了,但是火起来实际上是最近这些年的事情,因为互联网的爆发,有了更大的数据量可以供我们使用,推荐算法才有了很大的用武之地。 最开始,所以我们在网上找资料,都是进yahoo,然后分门别类的点进去,找到你想要的东西,这是一个人工过程,到后来,我们用google,直接搜索自己需要的内容,这些都可以比较精准的找到你想要的东西,但是,如果我自己都不知道...

qq_32742009的博客 3万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

关于2015阿里移动推荐算法大赛的总结(二)——推荐算法

推荐系统并不是新鲜的事物,在很久之前就存在,但是推荐系统真正进入人们的视野,并且作为一个重要的模块存在于各个互联网公司,还是近几年的事情。 随着互联网的深入发展,越来越多的信息在互联网上传播,产生了严重的信息过载。如果不采用一定的手段,用户很难从如此多的信息流中找到对自己有价值的信息。

Sin_Geek成长の迹 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

购物网站的商品推荐算法有哪些?

作者:Razzit链接:https://www.zhihu.com/question/19967564/answer/25015492来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 历史上,关联规则是最先被想到的推荐方法,啤酒和尿布的例子大家应该耳熟,不过某次去中科大参加龙星课程,据老师讲,当时IBM那帮人做关联规则苦于没有数据集,于是杜撰了一个数据集,结果跑出了...

weixin_30289831的博客 2405

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

当今最流行的推荐引擎算法有哪些?

但事实上,推荐数据集与通常的计算机视觉数据集有很大不同,这使得使用现有的实现和工具变得更加复杂(例如,TensorFlow 或 PyTorch 等库中的许多优化器不支持稀疏更新动量,这是训练推荐深度模型的基石)。要训练解决项目冷启动(或用户冷启动)的模型,您需要一个数据集,其中包括项目(或用户的)的详细描述,例如电影的类型、预算、持续时间或任何可能有助于推荐的变量。由于推荐是使用用户对商品的反馈数据集计算得出的,因此它们无法推荐没有(或只有少量)反馈的商品,例如新商品。让我们看看每种方法的优点和缺点。

aerror的专栏 488

推荐算法分类

1. 什么是推荐算法 推荐算法最早在1992年就提出来了,但是火起来实际上是最近这些年的事情,因为互联网的爆发,有了更大的数据量可以供我们使用,推荐算法才有了很大的用武之地。 最开始,所以我们在网上找资料,都是进yahoo,然后分门别类的点进去,找到你想要的东西,这是一个人工过程,到后来,我们用google,直接搜索自己需要的内容,这些都可以比较精准的找到你想要的东西,但是,如果我自己都不知道自己要找什么肿么办?最典型的例子就是,如果我打开豆瓣找电影,或者我去买说,我实际上不知道我想要买什么或者看什么,这时

shihao的博客 7559

推荐引擎的几种算法总结(转)

1、Item based collective filtering 这个算法是cf中的一种,也是当今很多大型网站都在采用的核心算法之一。 对于商城网站(以Amazon为代表,当然也包括京东那种具有搞笑特色的推荐系统在内),影视类推荐,图书类推荐,音乐类推荐系统来说,item的增长速度远不如user的增长速度,而且item之间的相似性远不如user之间的相似性那么敏感,所以可以在离线系统中将it...

eric的学习笔记 2171
上一篇: SpringMVC中return“url"和return"redirect:url"的区别
下一篇: SpringMVC 之拦截器
祯民
博客等级 码龄9年 72粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值