大数据算法->推荐系统常用算法之基于内容的推荐系统算法
港真,自己一直非常希望做算法工程师,所以自己现在开始对现在常用的大数据算法进行不断地学习,今天了解到的算法,就是我们生活中无处不在的推荐系统算法。
其实,向别人推荐商品是一个很常见的现象,比如我用了一个好的商品,向朋友安利之类的。在以前广告系统不发达的时候,我们也是靠口口相传来进行商品的推广。那么为什么,现在推荐系统变的非常重要了呢?,在以前,我们的商品不像现在的物品一样琳琅满目,我们有时间,可以把商品都浏览一遍在进行选择,因为我们都想选择所有商品中最好的,而现在,由于资源的众多,我们不会用大把时间把所有的商品都看一遍,这就需要系统向我们推荐一些我们正在寻找的东西,比如网易云音乐的每日歌曲推荐,淘宝的商品推荐。其实这里的商品还包含信息,像今日头条向我们推荐优质的新闻,以及外国的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上的数据进 ...
随机推荐
- 没有main方法真的不能执行代码了吗?
今天看北大慕课遇到一段代码,于是下载下来跑了一下,奇葩的是,没有main方法既没报错,还出了结果. 下面贴出代码: class InitialTest { public static void mai ...
- find的用法
find在Linux系统中和其它工具,如sed.awk.grep等结合起来用,非常有用. 1.列出系统中所有属于root用户的“set uid”文件 #find / -perm 4755 –uid 0 ...
- NodeJS 实现手机短信验证 模块阿里大于
1,NodeJS 安装阿里大于模块 切换到项目目录使用npm 安装阿里于模块 npm i node-alidayu --save 2,aliyu官网使用淘宝账户登录 登录阿里大于 https://do ...
- POJ 1207 3N+1 Problem
更简单的水题,穷举法即可. 需要注意的点: 1.i 和 j的大小关系不确定,即有可能 i>j 2.即使i>j,最后输出的结果也要严格按照输出,亦即如果输入10,1,则对应输出也应为 10 ...
- An overnight dance in discotheque
An overnight dance in discotheque time limit per test 2 seconds memory limit per test 256 megabytes ...
- maven 的docker插件
首先你得配置一个带有认证的docker私有仓库. 本机要安装maven和jdk vi pom.xml <plugin> <groupId>com.spotify</gro ...
- java中byte, iso-8859-1, UTF-8,乱码的根源
Post@https://ryan-miao.github.io 背景 还是多语言, 在项目中遇到本地环境和服务端环境不一致乱码的情形.因此需要搞清楚乱码产生的过程,来分析原因. 获取多语言代码如下: ...
- 技术分析 | 新型勒索病毒Petya如何对你的文件进行加密
6月27日晚间,一波大规模勒索蠕虫病毒攻击重新席卷全球. 媒体报道,欧洲.俄罗斯等多国政府.银行.电力系统.通讯系统.企业以及机场都不同程度的受到了影响. 阿里云安全团队第一时间拿到病毒样本,并进行了 ...
- [leetcode-573-Squirrel Simulation]
There's a tree, a squirrel, and several nuts. Positions are represented by the cells in a 2D grid. Y ...
- Python读入CIFAR-10数据库
CIFAR-10可以去http://www.cs.toronto.edu/~kriz/cifar.html下载(记得下载python格式) CIFAR-10数据组成: 训练集和测试集分别有50000和 ...