推荐算法

数据结构与算法之美学习笔记:第十讲

≡放荡痞女 提交于 2019-12-04 02:13:45
一、开篇问题 推荐注册返佣金的这个功能我想你应该不陌生吧?现在很多App都有这个功能。这个功能中,用户A推荐用户B来注册,用户B又推荐了用户C来注册。我们可以说,用户C的“最终推荐人”为用户A, 用户B的“最终推荐人”也为用户A,而用户A没有“最终推荐人”。 一般来说,我们会通过数据库来记录这种推荐关系。在数据库表中,我们可以记录两⾏数据,其中actor_id表示用户id,referrer_id表示推荐人id。 基于这个背景,我的问题是, 给定一个用户ID,如何查找这个用户的“最终推荐人”? 带着这个问题,我们来学习今天的内 容,递归(Recursion) 二、如何理解递归 1、电影院案例 周末你带着女朋友去电影院看电影,女朋友问你,咱们现在坐在第几排啊?电影院里面太黑了,看不清,没法数,现在你怎么办? 2、用递归解决你在第几排的问题 别忘了你是程序员,这个可难不倒你,递归就开始排上用场了: 于是你就问前面一排的人他是第几排,你想只要在他的数字上加一,就知道自己在哪一排了。 但是,前面的人也看不清啊,所以他也问他前面的人。就这样一排一排往前问,直到问到第一排的人,说我在第一排, 然后再这样一排一排再把数字传回来。直到你前面的人告诉你他在哪几排,于是你就知道答案了。 这就是一个非常标准的递归求解问题的分解过程: 去的过程叫“递”,回来的过程叫“归” 。基本上

利用机器学习中的推荐思想为组合优化问题推荐最佳智能优化算法

本小妞迷上赌 提交于 2019-12-03 14:06:28
文章:基于多分类支持向量机的优化算法智能推荐系统与实证分析 摘要:算法智能推荐是超启发式算法研究领域一个重要分支其,目标是从众多在线算法中自动选择出最适于当前问题的算法,从而大大提升解决问题的效率。基于此提出并验证了一种优化算法智能推荐系统,理论依据是无免费午餐定理和Rice算法选择框架,并假设问题特征与算法性能表现之间存在潜在关联关系,从而可以把算法推荐问题转换为一个多分类问题。为了验证假设的成立,以多模式资源约束项目调度问题为测试样本数据集,以粒子群、模拟退火、禁忌搜索和人工蜂群等元启发式优化算法为推荐对象,以支持向量机多分类策略实现算法的分类推荐。交叉验证结果表明推荐准确率均在90%以上,各项评价指标表现优秀。 思考:那么,是否可以像决策树到随机森林算法那样,在迭代过程中既进行进行不同算法的组合,每一代中,各个个体可以从多种更新公式中任意选择一种,而不限于一种,或者不同的阶段,采用不同的算法框架等等,从不同维度对不同算法进行组合。 来源: https://www.cnblogs.com/liuxiang2020/p/11798297.html

TOP 10开源的推荐系统简介

北城以北 提交于 2019-12-03 14:02:02
最近这两年推荐系统特别火,本文搜集整理了一些比较好的开源推荐系统,即有轻量级的适用于做研究的SVDFeature、LibMF、LibFM等,也有重量级的适用于工业系统的Mahout、Oryx、EasyRecd等,供大家参考。PS:这里的top 10仅代表个人观点。 #1.SVDFeature 主页: http://svdfeature.apexlab.org/wiki/Main_Page 语言:C++ 一个feature-based协同过滤和排序工具,由上海交大Apex实验室开发,代码质量较高。在KDD Cup 2012中获得第一名,KDD Cup 2011中获得第三名,相关论文发表在2012的JMLR中,这足以说明它的高大上。 SVDFeature包含一个很灵活的Matrix Factorization推荐框架,能方便的实现SVD、SVD++等方法, 是单模型推荐算法中精度最高的一种。SVDFeature代码精炼,可以用相对较少的内存实现较大规模的单机版矩阵分解运算。另外含有Logistic regression的model,可以很方便的用来进行ensemble。 #2.LibMF 主页: http://www.csie.ntu.edu.tw/~cjlin/libmf/ 语言:C++ 作者 Chih-Jen Lin 来自大名鼎鼎的台湾国立大学,他们在机器学习领域享有盛名

基于Spark ALS算法的个性化推荐

僤鯓⒐⒋嵵緔 提交于 2019-12-03 11:59:37
今天来使用spark中的ALS算法做一个小推荐。需要数据的话可以点击查看初识sparklyr—电影数据分析,在文末点击阅读原文即可获取。 其实在R中还有一个包可以做推荐,那就是recommenderlab。如果数据量不大的时候可以使用recommenderlab包,之前也用该包做过电影评分预测模型。如果数据量较大还是推荐使用spark来进行计算。 在spark中包含了许多机器学习算法,其中就有一个推荐算法,即ALS。 ALS算法也就是协同过滤算法,它是基于矩阵分解的协同过滤,何为矩阵分解?就是把一个评分矩阵A分解为两个矩阵B,C。B*C=A。为什么要进行分解?那是因为矩阵A是一个稀疏矩阵,分解之后的B,C矩阵相对能稠密一点。使用该算法可以很方便的做一个推荐系统,核心代码只有三行。 一.读取数据 数据可以在初识sparklyr—电影数据分析文末点击阅读原文即可获取。 moviedata<-read.table("u.data",header = FALSE,sep = "\t") 这四列数据分别表示:用户id,电影id,评分,时间戳 head(moviedata)# V1 V2 V3 V4 1 196 242 3 881250949 2 186 302 3 891717742 3 22 377 1 878887116 4 244 51 2 880606923 5 166 346 1

推荐系统之基于邻域的算法---协同过滤算法

倖福魔咒の 提交于 2019-12-03 04:10:54
基于邻域的协同过滤主要分为两类,基于用户的协同过滤和基于物品的协同过滤。前者给用户推荐和他兴趣相似的其他用户喜欢的物品,后者则是推荐和他之前喜欢过的物品相似的物品。 基于用户的协同过滤算法 这里介绍基于用户的协同过滤,从定义来说,可以分为以下两步进行: 找到和目标用户兴趣相似的用户集合 找和这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户 计算用户相似度的基本算法: (1)Jaccard 公式 (2)余弦相似度: 得到用户之间的兴趣相似度后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的物品,下面的公式表示用户u对物品i的感兴趣程度: 其中S(u,K)包含和用户u兴趣最相近的K个用户,N(i)是对物品i有过行为的用户集合,w uv 是用户u和用户v的兴趣相似度,r vi 代表用户v对物品i的兴趣,在这种情况下r vi =1 可以建立物品到用户的倒查表,对每个物品都保存对该物品产生过行为的用户列表, 可以给上图中的A推荐,选取K=3,用户A对物品c,e没有过行为,因此可以把这两个物品推荐给用户A,用户A对物品c,e的兴趣是: 改进: 上边的算法是有问题的,比如两个人都买过《新华字典》这本书,但这丝毫不能说明他们两个兴趣相似,因为大多数人都买过这本书,如果两个用户都买过《数据挖掘导论》,那可以认为两个人的兴趣比较相似,因为只要研究数据挖掘的人才会买这本书

图推荐-基于随机游走的personrank算法

六月ゝ 毕业季﹏ 提交于 2019-12-03 04:10:24
转自 http://blog.csdn.net/sinat_33741547/article/details/53002524 一 基本概念 基于图的模型是推荐系统中相当重要的一种方法,以下内容的基本思想是将用户行为数据表示为一系列的二元组,每一个二元组(u,i)代表用户u对物品i产生过行为,这样便可以将这个数据集表示为一个二分图。 假设我们有以下的数据集,只考虑用户喜不喜欢该物品而不考虑用户对物品的喜欢程度, 其中用户user=[A,B,C],物品item=[a,b,c],用户和物品有以下的关系: 上述便是一个典型的二分图,我们用G(V,E)来表示,其中V为用户user和物品item组成的顶点集即[A,B,C,a,b,c],而E则代表每一个二元组(u,i)之间对应的边e(u,i),我们这里不考虑用户对物品的喜爱程度,即默认喜爱则e=1,不喜爱则e=0。 那么我们如何使用上述的二分图模型进行物品的推荐呢?根据用户与物品的相关性,对于相关性高的顶点有如下的定义: (1)两个顶点之间有很多路径相连 (2)连接两个顶点之间的路径长度都比较短 (3)连接两个顶点之间的路径不会经过度比较大的顶点 上面有一个概念需要理解,度,顶点的度是指和该顶点相关联的边数。 基于上述的定义,我们这里使用基于随机游走的PersonalRank 算法 来计算,那么这个算法是什么意思呢? 在解释之前

推荐系统发展综述

匿名 (未验证) 提交于 2019-12-03 00:37:01
1. 引言 随着信息技术和互联网技术的发展,人们从信息匮乏时代步入了信息过载时代,在这种时代背景下,人们越来越难从大量的信息中找到自身感兴趣的信息,信息也越来越难展示给可能对它感兴趣的用户,而推荐系统的任务就是连接用户和信息,创造价值。 设想用户想买一本《Recommender Systems An Introduction》,用户只需要走进一家书店,寻找这本书即可。通过互联网,用户可以打开当当,在搜索框中输入书名,然后就可以找到用户想要购买的书籍,这两种方式都需要用户有明确的目的,如购买《Recommender Systems An Introduction》或某一类别的书籍。 但是,当用户没有明确目标时,比如寻找感兴趣的音乐,用户只能通过一些预先设定的类别或标签去寻找他可能感兴趣的音乐,但面对如此之多音乐,用户很难在短时间内找出真正感兴趣的音乐。这时就需要一个自动化的工具,来分析用户曾经收听的音乐,进而寻找出用户可能感兴趣的音乐推荐给用户,这就是个性化推荐系统的工作。 作为一种信息过滤系统,推荐系统具有以下两个最显著的特性: (1)主动化。从用户角度考虑,门户网站和搜索引擎都是解决信息过载的有效方式,但它们都需要用户提供明确需求,当用户无法准确描述自己的需求时,这两种方式就无法为用户提供精确的服务了。而推荐系统不需要用户提供明确的需求,而是通过分析用户和物品的数据

3、基于物品的协同过滤算法

匿名 (未验证) 提交于 2019-12-03 00:19:01
随着网站的用户数目越来越大,计算用户兴趣相似度矩阵越来越困难,其运算时间复杂度和空间时间复杂度的增长和用户数的增长近似于平方关系。其次,基于用户的协同过滤算法很难对推荐结果作出解释。 因此产生了 基于物品的协同过滤算法(ItemCF) 。ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。 ItemCF可以利用用户的行为给推荐结果提供推荐解释 计算物品之间的相似度 根据物品的相似度和用户的历史行为给用户生成推荐列表 我们可以通过以下公式定义物品的相似度 以上,其中 N(i) 表示喜欢物品i的用户数,而分子 N(i)∩N(j) 表示喜欢物品i同时喜欢物品 j 的用户数 因此,上述公式可以理解为喜欢物品i的用户中有多少比例的用户也喜欢物品 j 然后,这里有一个问题,就是如果物品 j 很热门,那么喜欢物品i的用户很多都喜欢物品 j 那么W就会区域1.所有我们使用以下公式 以上,在分母中加上 N(j) 对相似度进行惩罚,即越热门,这个物品被使用的人越多,那么分母就会变大。从而可以挖掘 长尾信息 。 其中 C[i][j] 表示的是同时喜欢物品i 和物品j的用户数 如果物品相似度求出来了,就可以根据以下公式计算用户u对于一个物品j的兴趣度 其中 N(u) 是用户喜欢的物品的集合, S(j,k) 是和物品j最相似的K个物品的集合, w

推荐算法-欧几里得距离

匿名 (未验证) 提交于 2019-12-02 23:55:01
一、欧几里得距离 用来记录两个向量之间的距离。 欧氏距离越小,两个用户相似度就越大,欧氏距离越大,两个用户相似度就越小。 二维空间的公式: 到原点的欧氏距离。 三维空间的公式: n维空间的公式: 二、闵可夫斯基距离 当p=1时,即为曼哈顿距离; 当p=2时,即为欧几里得距离 三、实现一个简单的音乐推荐系统 1、基于相似用户做推荐 跟你听类似歌曲的人,看作口味相同的用户。 通过用户的行为来定义对歌曲的喜爱程度,给每个行为定义一个得分,得分越高表示越喜爱: 每个人对歌曲的喜爱程度表示为如下: 通过欧几里得距离来计算两个向量之间的相似度 小明:(4,5,2,1,0,3,2,0,1,1) 2、基于相似歌曲做推荐 新用户还没收集足够多的行为数据,则基于相似歌曲进行推荐。 基于歌曲特征项计算相似度,我们可以对歌曲定义一些特征项【伤感、愉快、摇滚、民谣、柔和、高亢】 人工给每首歌每个特征项打分,工程浩大,存在个人主观性,影响推荐的准确性,不可行。 那么通过什么数据来量化两个歌曲的相似程度? 对于两首歌,如果喜欢听的人群都是差不多的,就可以侧面反映出这两首歌比较相似。 来源:博客园 作者: 与君共舞 链接:https://www.cnblogs.com/wjh123/p/11401653.html

推荐算法-余弦相似度

匿名 (未验证) 提交于 2019-12-02 23:55:01
/*--> */ /*--> */ /*--> */ /*--> */ /*--> */ 一、余弦相似度: 余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性" 二维向量的余弦相似度: 多维向量的余弦相似度(类比) /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ 协同过滤(Collaborative Filtering , 简称 CF ): 收集用户行为 减噪与归一化处理 减噪:用户行为数据是用户在使用应用过程中产生的,它可能存在大量的噪音和用户的误操作,我们可以通过经典的数据挖掘算法过滤掉行为数据中的噪音,这样可以是我们的分析更加精确 归一化:将各个行为的数据统一在一个相同的取值范围中,从而使得加权求和得到的总体喜好更加精确。 二、基于物品的协同过滤推荐算法(itemCF): 算法思想:给用户推荐那些和他们之前喜欢的物品相似的物品 用户行为与权重:点击 -1、搜索 -3、收藏 -5 、付款 -10 用户 A 、B 、C 商品 1 、2 、3 、4 、5 、6 根据用户行为列表计算用户、物品的评分矩阵 根据用户、物品的评分矩阵计算物品、物品的相似矩阵 相似度矩阵x评分矩阵=推荐列表 推荐列表中用户之前已经有过行为的元素置为0 /*--> */ /*--> */ /*--> */ /*--> */ /*--> */