推荐系统随便谈(一)

  从对推荐一无所知到做过几个推荐系统,再到完成一个推荐系统生态框架的设计,觉得是时候沉淀下来一些知识,然后继续找好吃的。《推荐系统随便谈》系列将从最简单的推荐系统说起,并随着业务需求增多和认识深入来复杂化系统设计,中间偶尔分享一些其他人的设计思路。

  推荐,大家最熟悉的就是亚马逊的“看了这件商品的用户还看了”,“购买了这件商品的用户还购买了”,例子够简单易懂吧。实际上推荐可以认为是搜索的补充,搜索是用户的一种主动行为,目标十分明确,只是不知道答案,需要搜索引擎告诉我。而推荐目的在于用户不知道自己明确的需求时,告诉用户你可能喜欢某些东西。OK,有构建搜索引擎或推荐引擎经验的同学可能会发现他们的联系其实非常密切,后文再说这些复杂的地方。

  回到亚马逊的例子,实际上我们可以简单地建立起一个类似亚马逊的推荐引擎,这里咱们说是《推荐系统随便谈》系列的v1.0系统把。只需要统计每个商品与其他商品的同时被购买或浏览次数,按多到少排序,就可以得到某个商品的共同购买列表(商场大妈都会啊!)。是的,咱们小白最粗暴的解决方案就是从表面上学人家这样搞。。

item_co_occurrence = {}
item_co_occurrence["A"] = {}
item_co_occurrence["A"]["B"] = 2
item_co_occurrence["A"]["C"] = 1
item_co_occurrence["A"]["D"] = 3
item_co_occurrence["B"] = {}
item_co_occurrence["B"]["A"] = 2
item_co_occurrence["B"]["D"] = 1
item_co_occurrence["C"] = {}
item_co_occurrence["C"]["A"] = 1

  如果你真这样做,那么问题就来了。。。大妈神气地对经理说,我算出来的结果是,买了XXX的用户还购买的最多的商品是塑料袋!妈蛋,坑爹么这是@&#¥%.....如果简单的统计共同出现,那么很容易会被热门物品或者常见并没有作用的物品占据了你的候选推荐前几位。

  稍微聪明的同学会说,我得加个预处理,把你说的热门物品或者常见且没有作用的物品,比如装东西的塑料袋给删了。看起来是正确的,但是你要怎么删才合理?

  这时候搞过搜索引擎的同学站出来说,我们做文本处理时关键词提取的思想好像可以复用?“常见且没有作用的物品”其实就是“停用词”,“热门”但对整体没有贡献的物品也一样可以通过tf-idf来计算得到。是的,百度一下tf-idf,你会发现次数计算只是其中一个步骤而已。所以实际上计算两两物品相关信息时可以采用更加科学的方法,如互信息,类tf-idf,余弦距离等,当然也需要考虑自身数据是否有特殊分布。

  经过预处理和多次调整计算公式,大妈信心满满的把工具给了苦逼码农,说:我跑出来效果不错,拿去用吧!但是码农实际使用时发现确实肉眼看效果还可以,但是我一个事务,或者说一个交易可能有10+个商品,我这样搞单机怎么跑那么多的东西啊!!大妈摔桌子(╯‵□′)╯︵┻━┻说:妈蛋,做个东西又要效果又要效率!!那你就搞几台破机器一起跑啊。大妈一言道出真谛,让码农想起了Hadoop神器!!把大妈的程序用Map-Reduce过程来改造,map过程枚举,sort按字母序排,reduce过程merge计数。

  恩,第一版推荐系统完成!虽然效果和性能都非常锉,但是感谢大妈指导!大家期待下大妈用更好的方法来解决问题把。

时间: 2024-11-09 00:36:44

推荐系统随便谈(一)的相关文章

浅析Java网络编程之UDP传输(一)

网络传输方式一般有两种--TCP和UDP.本文用于简单了解一下UDP传输方式. 一.UDP有何特点? 1.面向无连接的: 2.面向报文的,且每一份报文不超过64KB: 3.不可靠但高效(不用建立连接): 4.支持一对一.一对多.多对一.多对多的交互通讯: 对于这些特点,没有什么为什么,事实而已啦! 二.在Java中怎么玩UDP? 在Java中,将建立UDP服务相关操作封装到了DatagramSocket类中,将数据报相关操作封装到了DatagramPacket类中. 三.具体玩的思路是什么? U

旧作拾遗

梦佳人两首 <其一> 昨夜梦佳人,凝眉妆镜前. 翘首望飞雁,朦胧双泪眼. 心中事千千,欲语无人言. 我心待君归,君归我未见. 君心应如秋,我心比秋悲. <其二> 昨夜梦佳人,携手同游春. 园中春最好,空中飞有鸢. 柔风拂细柳,青石映碧泉. 更有蝶飞舞,如醉翩翩跹. 亭上双飞燕,亭下芳菲迷人眼. 采之欲遗谁?所思在眼前. 回顾望佳人,低首与之语: 明年由今日,春景依如前 不知今日红颜仍在否?持酒独饮多慨然! 沉重 上帝让我背着沉重的十字架 我却将它煅成利剑 斩去 ——沉重  奋斗 日

有关大学,有关爱好,有关学习,有关奋斗,有关理想:大学应该干些什么?我大学三年以来的感悟

本文由PurpleSword(jzj1993)原创,转载请注明.原文网址 http://blog.csdn.net/jzj1993 注意:本文相当长,也写了很久,改了好多遍.没时间或者看不下去的,以及即将高考的,请自觉绕行-- 〇.前言 一个人思想的进步,往往要求他能站在各种不同的角度,客观看待同一个问题(比如苏格拉底认为,人们发生争论的根本原因,是对所争论问题的背景知识,没有形成交集).而这受限于他的经历,接触过的人,经历过的事情,看过的书,了解.学习.讨论和思考过的东西等.我自认为大学接触的

天秤座女生性格

1.关于虚伪天秤座对于自己的总结总是避免不了"虚伪"这个关键词.我敢说,天秤座是十二星座里最虚伪的星座了.天秤座是其他十一星座的好朋友.几乎和任何人都能变成朋友.请注意,朋友的定义只是对方的定义,在天秤女心里,指不定有多少不在乎呢.表面上看起来很热情很友好,这或许都是假象.可是天秤座是个很怕麻烦的星座,这在我下面的总结中也会频繁地提到.所以为了不引起麻烦,大多的天秤座会维持表面上的和平. 2.毒舌我认识的天秤座都很毒舌,但是内心却很善良.天秤座喜欢轻松的气氛,所以相互善意地挤兑所营造出

第十四篇 妻子的修炼之道(2)

这一篇完全是照搬大愿法师在<玉耶女经>中演讲的,写的很好了,直接搬过来给女性朋 友参考借鉴.          女人幸福的十大定律 第一定律:夫妻要有共同目标. 这很重要,你一定要找到大家都志趣相同.同一目标的人才可以.讲个比方,你看两个人 站在两个方向,两个人因为感情好了,所以一直深情对视,一直互相看着.但是能看多久呢,不 管你看多久,肯定有个人要先把眼睛移开,不可能一直对视下去.当他移开的时候也就是他离开 的时候了.这个是比方是什么意思呢?即便感情基础好,再好的感情,时间久了,都会趋于平淡

微软ASP.NET技术“乱谈”

微软ASP.NET技术“乱谈” 2014新年了,顺手写的一点文字,主要谈谈我对当前微软ASP.NET技术的看法,比较随意,大伙儿随便看看吧. 1 当前微软Web平台技术全貌 从2002年发布.NET 1.0和Visual Studio.NET,到2013年.NET 4.5.1和Visual Studio 2013发布时,微软.NET平台己有11年的历史,其Web技术几经变迁,当前演化为以下的主要技术子领域: 一张图了解微软Web平台技术全貌 时至今日, ASP.NET底层的基础架构基本没太大变化

【腾讯Bugly干货分享】浅谈Android自定义锁屏页的发车姿势

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57875330c9da73584b025873 一.为什么需要自定义锁屏页 锁屏作为一种黑白屏时代就存在的手机功能,至今仍发挥着巨大作用,特别是触屏时代的到来,锁屏的功用被发挥到了极致.多少人曾经在无聊的时候每隔几分钟划开锁屏再关上,孜孜不倦,其酸爽程度不亚于捏气泡膜.确实,一款漂亮的锁屏能为手机增色不少,但锁屏存在的核心目的主要是三个:保护自己手机的隐私,防止误操作,在不关闭

浅谈知识管理

工欲善其事,必先利其器 推荐使用为知笔记(WizNote),它是电脑.手机.平板上都能用的云笔记软件,还可以分类管理和共享资料! 使用我的邀请码注册 前言 在做项目,解决某些需求的时候,总会用到自己不熟悉的模块和技术,这时候就会各种谷歌百度查手册,查询完之后,实现功能需求,过一段时间之后,就又忘记当时是如何实现的了. 这时你会怎么做?是又去网上查找一遍?还是说通过之前的个人知识管理,即时抓取.快速检索该知识? 浅谈知识管理(以自己为例) 熟话说:“好记性不如烂笔头”,但是在这个信息爆棚的时代,充

也谈C#之Json,从Json字符串到类代码

原文:也谈C#之Json,从Json字符串到类代码  阅读目录 json转类对象 逆思考 从json字符串自动生成C#类  json转类对象 自从.net 4.0开始,微软提供了一整套的针对json进行处理的方案.其中,就有如何把json字符串转化成C#类对象,其实这段代码很多人都清楚,大家也都认识,我就不多说,先贴代码. 1.添加引用 System.Web.Extensions 2.测试一下代码 1 static class Program 2 { 3 /// <summary> 4 ///