大数据算法->推荐系统常用算法之基于内容的推荐系统算法
港真,自己一直非常希望做算法工程师,所以自己现在开始对现在常用的大数据算法进行不断地学习,今天了解到的算法,就是我们生活中无处不在的推荐系统算法。
其实,向别人推荐商品是一个很常见的现象,比如我用了一个好的商品,向朋友安利之类的。在以前广告系统不发达的时候,我们也是靠口口相传来进行商品的推广。那么为什么,现在推荐系统变的非常重要了呢?,在以前,我们的商品不像现在的物品一样琳琅满目,我们有时间,可以把商品都浏览一遍在进行选择,因为我们都想选择所有商品中最好的,而现在,由于资源的众多,我们不会用大把时间把所有的商品都看一遍,这就需要系统向我们推荐一些我们正在寻找的东西,比如网易云音乐的每日歌曲推荐,淘宝的商品推荐。其实这里的商品还包含信息,像今日头条向我们推荐优质的新闻,以及外国的News Digest,techmeme都致力于将新闻进行过滤,所以推荐系统无处不在。
好了,以上是引言,现在开始学习推荐系统:
目前的推荐系统分为基于内容的推荐系统和协同过滤模型,以及两种结合的方式,因为每种方法都有它的优势和劣势,所以在了解完每种算法后,我们进行归纳。
以下所说的商品包含信息,卖的商品等需要推荐的内容。
首先我们明确一下我们的所要分析的内容,一个是用户集,也就是我们要把商品推荐给的人,还有一个项目集,是我们要推荐的商品,还有一个效用矩阵,表明的是,部分用户对部分项目的评价,这个评价可以从用户在使用过商品直接评分(如买完商品的星级评分,看完电影的星级评分)来获得,或者用户使用一个商品的频率(如听音乐频繁播放一首歌)等等来学习获得,总之,这个效用矩阵就是来描述用户对商品的感受的。对于效用矩阵,我们提出一个效用函数的概念。即算出某用户对某商品的满意程度,据此我们可以构建效用矩阵。(可以理解为类似于用户没有给出具体评分,而我们可以根据他的使用习惯,来进行计算出的对商品的评分)。
所以我们现在要做的事情就是向用户推荐他没有用过,但是可能想用的东西。
首先我们来看看基于内容的推荐系统算法是怎么做的:
它基于这样的思想,举个例子,假设用户以前看80-90年代的,香港的,动作片,它就会根据用户的这个喜好,在项目集中找出符合这些特征的影片,推荐给用户,所以,大家有没有发现,这样的推荐系统需要对项目进行特征化操作,给每个项目找出其特点,也就是给每个项目打上标签,然后根据用户的喜好,来进行推荐,这就是基于内容推荐的大致思想。而这一方法的难点在于对项目进行特征化描述,举个例子,针对文本进行描述的话,我们还可以采用关键词,但是对于图片来说,计算机就显得相形见绌了,对于计算机来说,它只认识二进制,而我们对于图片内容的分析也比较困难。
在这里:我们举个例子来对文本进行特征化描述,假设我们有N个文档,来寻找每个文档的关键词。在这里我们采用关键词衡量指标:TF-IDF
TF就是每个词的词频,统计一篇文章的每个词的词频,找出频率较高的,再除以这篇文档除该词之外的最高频率的词,来作为该关键词在该文档的频率。之所以要除,是因为,我们的文档长度是不同的,我们希望消除不同长度文档所带来的频率差异,进而采用这种做法。
接下来说IDF:首先我们看IDF是如何计算的:IDF(关键词:i) = log(N/n(i));
别忘了N是所有文档的个数,我们看,当n(i)增大时IDF的值是减小的,这里的n(i)值得是关键词i所出现的文档数,在几个文档出现,就是几,那么这个IDF是干什么的呢,大家想想,比如 a the 这样的词,在每篇文档中出现的频率都很高,但这不是我们要找的关键词,但会对我们的统计产生影响,因此我们需要将这些词筛掉,这就是IDF存在的原因,如果有一个词他在每个文档都出现了,那它作为某个文档的关键词可能性就会下降。
通过那么关键词I的频率就可以表示为TF*IDF;这样我们就可以真对某文档建立一个向量。
当文档很长的时候,这个向量就会很庞大,这也是这个算法的局限性。其也有优点:那就是不依赖其他用户的评价,只依赖项目的特征,比如新到一批电影,该推荐方式就可以进行推荐,而不需要考虑其他用户对这些电影的评价,而采用协同过滤的话,由于这些影片是新来的,没有用户打分,所以较难进行推荐,还有就是基于内容推荐的项目特征较为集中。推荐的内容都较为相似,用户接受度高,但也影响了用户选择的多样性。
那么下篇文章我们来看一下协同过滤模型是如何处理的。
大数据算法->推荐系统常用算法之基于内容的推荐系统算法的更多相关文章
- 【T-BABY 夜谈大数据】基于内容的推荐算法
这个系列主要也是自己最近在研究大数据方向,所以边研究.开发也边整理相关的资料.网上的资料经常是碎片式的,如果要完整的看完可能需要同时看好几篇文章,所以我希望有兴趣的人能够更轻松和快速地学习相关的知识. ...
- 新闻推荐系统:基于内容的推荐算法(Recommender System:Content-based Recommendation)
https://blog.csdn.net/qq_32690999/article/details/77434381 因为开发了一个新闻推荐系统的模块,在推荐算法这一块涉及到了基于内容的推荐算法(Co ...
- 大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作
第十九章 Scala语言的数据结构和算法19.1 数据结构(算法)的介绍19.2 看几个实际编程中遇到的问题19.2.1 一个五子棋程序19.2.2 约瑟夫问题(丢手帕问题)19.2.3 其它常见算法 ...
- Hadoop大数据生态系统及常用组件(山东数漫江湖)
经过多年信息化建设,我们已经进入一个神奇的“大数据”时代,无论是在通讯社交过程中使用的微信.QQ.电话.短信,还是吃喝玩乐时的用到的团购.电商.移动支付,都不断产生海量信息数据,数据和我们的工作生活密 ...
- 胖子哥的大数据之路(10)- 基于Hive构建数据仓库实例
一.引言 基于Hive+Hadoop模式构建数据仓库,是大数据时代的一个不错的选择,本文以郑商所每日交易行情数据为案例,探讨数据Hive数据导入的操作实例. 二.源数据-每日行情数据 三.建表脚本 C ...
- 大数据:Hive常用参数调优
1.limit限制调整 一般情况下,Limit语句还是需要执行整个查询语句,然后再返回部分结果. 有一个配置属性可以开启,避免这种情况---对数据源进行抽样 hive.limit.optimize.e ...
- 推荐系统第5周--- 基于内容的推荐,隐语义模型LFM
基于内容的推荐
- 做了一道跑大数据的最短路挂了,基于vector的二维模拟邻接表实现Dijkstra算法(*【模板】)
代码: #include <stdio.h> #include <string.h> #include <string> #include <vector&g ...
- 大数据之路week07--day05 (一个基于Hadoop的数据仓库建模工具之一 HIve)
什么是Hive? 我来一个短而精悍的总结(面试常问) 1:hive是基于hadoop的数据仓库建模工具之一(后面还有TEZ,Spark). 2:hive可以使用类sql方言,对存储在hdfs上的数据进 ...
随机推荐
- 原生javascript实现网页显示日期时钟效果
刚接触javascript中Date内置对象时,以为这些方法都太简单了,结果要自己实际操作写一个时钟效果还真一时把我难住了,主要有几点大家要注意的.先看实际效果 要实现这样的效果 某年某月某日星期几几 ...
- Wowza 部署 安装 配置 测试 直播
下载,最好用快的IP下好后传到需要的节点上,下面链接不能下载的情况下百度谷歌必应找资源,jdk旧版在oracle需登录方可下载 JDK1.6 wget -c http://dl.download.cs ...
- IntelliJ IDEA:给web应用提供JSTL支持
最近在看<Head First Servlet JSP>学习JSP,看到JSTL一章,为了添加JSTL支持折腾了好久. 网上的教程五花八门,而且多数比较旧. 我尝试了各种方法都没有成功,很 ...
- 数据结构与算法(c++)——查找二叉树与中序遍历
查找树ADT--查找二叉树 定义:对于树中的每个节点X,它的左子树中的所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项. 现在给出字段和方法定义(BinarySearchTree.h) # ...
- RDLC报表纵向合并单元格。
在做RDLC报表时发现居然没有纵向合并单元格,震惊! 网上查了一些资料,有些方法很可爱,采用去除边框法,但是用这种方法如果要求文本属性居中的话那则达不到美观效果,还有些复杂一点的方法,我都没耐心看,然 ...
- 数据的ID名生成新的引用索引树
<?php $arr= [ '0'=>[ "id"=>2, "name"=>"建材", "pid" ...
- Python 实现 Discuz论坛附件下载权限绕过漏洞
背景:最近压力有些大,想玩点游戏放松下,去Mac论坛下载,发现需要各种权限,于是蛋疼了. 所以,上网查了discuz! x3.1破解,手动替换,发现出现“链接已过期”.所以写了下面程序. 0.将下列代 ...
- USACO Healthy Holsteins
首先看题目: Healthy HolsteinsBurch & Kolstad Farmer John prides himself on having the healthiest dair ...
- Python 文件对象
Python 文件对象 1) 内置函数 open() 用于打开和创建文件对象 open(name,[,mode[,bufsize]]) 文件名.模式.缓冲区参数 mode: r 只读 w 写入 a 附 ...
- RabbitMQ安装|使用|概念|Golang开发
搬砖的陈大师版权所有,转载请注明:http://www.lenggirl.com/tool/RabbitMQ.html 手册:http://www.rabbitmq.com/getstarted.ht ...