1基于微博用户的协同过滤推荐系统--以python为例袁玉芳12214043(江苏师范大学数学与统计学院江苏徐州221116)摘要微博即微型博客,是一种通过关注机制分享即时信息的社交网络平台.在经过十几年的发展,到2013年时新浪微博的注册量就已经达到了5.36亿.微博以其独特的运行方式吸引了世界各地的网民,在中国微博也获得了大量网友的青睐.本文是根据部分随机微博用户所关注的标签,通过计算各用户间的相关系数,将基于用户的协同过滤技术应用到微博信息推荐中,对目标用户推荐其潜在关注东西.关键词微博;推荐系统;协同过滤;python0引言从2006年twitter的建立,到2007国内第一个具有微博色彩的饭否网,微博开始了轰轰烈烈的发展.越来越多的人开始使用微博.关注功能的使用带来的是一场微博人气的大战,名人开始使用微博聚揽人气,草根也怀有成为名人的梦想,网红群体的出现刺激大量籍籍无名的群众,从默默无闻到一夜成名往往就在不经意之间.微博用户可以通过客户端发布在140字(包括标点符号)的文字信息,并实现即时分享.随着时间的发展,140字的限制也已取消.可以传播的信息量也就越大.微博的关注功能使得用户可以获得他人的微博信息,因此如何从这庞大的信息中获取用户希望看到的信息具有重要意义.近几年,研究微博推荐系统的论文有很多,比如华南理工大学林文旋的硕士论文,基于用户兴趣的微博个性化信息推荐研究[1],还有哈尔滨工业大学汤斌的硕士论文,基于微博的知识词条推荐算法研究[2],华中科技大学硕士论文,微博协同过滤推荐系统的设计与实现[3]等等.推荐系统使软件的实用性大大提高,它使得用户自动获取有用的信息,极大地减少了搜索时间.在Google之前的众多浏览器之所以输给Google,正是由于Google研发了推荐系统,极大满足了用户需求.之后搜索引擎的开发大都注重了推荐系统的研发.更为突出的是,现在流行的app基本也都含有推荐这个功能,如淘宝,京东,亚马逊等等.而python软件以其简单的语法,强大的功能征服了很多人,它不仅含有很多功能的模块以供使用,更可以融合其他语言,使其他语言在平台上运行.但是因为相关书籍大都是英文,中文译本较少,所以python在国内可找到的资料并不是很多,应用也并不是很广泛,但不能否认的是它的确是一款实用且强大的计算机编程软件.2互联网发展至今已达到了令人惊讶的地步,它给用户带来了大量的信息,满足了用户在信息时代对信息的需求,但网络的迅速发展所带来的海量信息,使无法直接从中获得自己真正有用的那部分,所以信息的使用效率反而降低了,这就是所谓的信息超载(informationoverload)问题.而推荐算法正是在这样的情况下火起来的,因为互联网的信息爆发有了大量的数据,这使得推荐系统有了用武之地.与传统搜索引擎相比,推荐系统通过研究用户兴趣偏好,进行计算,发现用户的潜在兴趣,从而使用户获得期望信息.就比如假如我们直接搜索,我们可以通过搜索引擎获得精准的信息,可当我们不知道自己想要找什么的时候,推荐系统的优势就显现出来了.随着web2.0技术的日益成熟,为了给用户提供更好的体验进而达到一些商业目的,越来越多的系统提供个性化推荐服务,比如Netflix,Google.推荐算法也得到了越来越多的学者的关注和研究.推荐系统使用户不需要主动查找自己感兴趣的信息,也不用填写意向表格,系统将直接根据用户的历史行为信息为用户进行新信息的推荐.推荐系统的目的是为每个用户推荐“个性化”的项目.(推荐系统旨在给不同的用户推荐符合其个性化要求的项目)1995年3月(20世纪末),卡耐基.梅隆大学的RobertArmstrong等人在美国人工智能协会上提出了个性化导航系统WebWatcher;斯坦福大学的MarkoBalabanovic等人在同一会议上推出了个性化推荐系统LIRA.经过不间断的发展,(在美国人工智能协会上来自卡耐基梅隆大学的罗伯特.阿姆斯特朗和斯坦福大学的马克。巴拉巴诺维奇俩人分别推出了个性化导航系统WebWatch与个性化推荐系统LIRA,随着信息化、大数据时代的全面到来)推荐系统现在正在我们生活中发挥重要作用。它将用户的信息与推荐对象的信息相匹配,然后利用推荐算法进行计算,找到相似的物品推荐给用户。Python是一种面向对象,解释型计算机程序设计语言,由GuidovanRossum于1989年底发明.其语法简介明了,具有丰富和强大的类库,它能够将其他语言制作的各种模块如C,C++轻松的链接在一起.Python代表着简单主义,因为其简单的语法,它很容易上手.作为一款计算机程序设计语言,python几乎可以被应用于任何地方.从软件质量上看,python的代码设计致力于可读性,这使得python具备了优秀的可重用性和可维护性.即使代码非本人所写,python代码的一致性也保证了其代码容易理解.Python的开发效率相对于其他语言来说更高,它的代码大小往往只有C++或Java的1/5-1/3,因此无论是录入还是调试,维护都仅需要少量代码.且python程序可立即运行,无需编译.3Python内置了众多预编译并可移植的功能模块,这些模块即标准库.标准库支持一系列应用级的编程任务,涵盖了从字符模式到网络脚本编程的匹配等方面,此外还通过自行开发的库或者众多第三方应用支持软件进行扩展.Python相较于其他语言来说属于高级语言,在编写方面以简答著称,但这并不意味着python编写复杂程序上面会非常吃力.反而Python可以做很多事情,很多著名的网站包括YouTube就是Python写的;也可以做网络游戏的后台,很多在线游戏的后台都是Python开发的,比如EVEOnline这款大型多人网络游戏.NASA,LosAlamos也使用python实现科学计算任务,等等.在本篇文章中选择以python来进行设计正是因为python的简单容易上手,且功能强大,它可以用其简单的语言实现复杂的功能.本文所研究的就是以微博用户关注的信息为内容,使用python软件,利用协同过滤的方法想用户推荐其未关注的内容.1协同过滤推荐系统协同过滤推荐(CollaborativeFilteringRecommendation)技术是推荐系统中应用最早和最为成功的技术之一.协作型过滤算法通常选择对一大群人搜集其偏好,从中找到与目标用户品味相近的一小群人.算法会对这一小群人的关注信息进行考察,并组合在一起构造出一个推荐列表,这个推荐列表的信息是经过排名的,我们可以通过排名看出用户可能感兴趣的信息的可能性大小.协同过滤是基于这样的假设:如果一个用户想要找到他真正感兴趣的内容,可以有这样的方法:首先找到与此用户有相似偏好的用户,然后将这些用户感兴趣的内容推荐给此用户.这个基本思想非常易于理解,比如我们在日常生活中,想要了解一件商品,或者电影,歌曲等,我们一般会选择向朋友进行询问,然而在这些朋友中有些人的品味比较高,有的人不太好,我们就会选择与我们品味相似的朋友,让他们进行推荐.协同过滤推荐系统正是把这一思想运用到电子商务中来,以给使用者带来更好的使用体验.基于协同过滤的推荐系统是用户的角度来进行推荐的,自动获取推荐结果,即用户获得的推荐是系统是从用户的搜索,浏览历史中得来的,不需要用户使用搜索引擎一直搜素直到找到适合自己兴趣的信息,也不用填写调查表格之类的东西.协同过滤方法一般分为两类:基于内存的(也叫基于近邻的)方法和基于模型的方法.其中基于近邻的协同过滤又可以分为基于项目的协同过滤(item-basedcollaborativefiltering,IBCF)和基于用户的协同过滤(user-basedcollaborativefiltering,UBCF).1.1收集用户偏好4协同过滤推荐系统需要使用用户的历史行为数据与偏好数据,推荐算法基于此工作的,那么偏好信息的采集就成为了推荐系统设计的第一步.对于用户来说,很多方式都可以向系统提供自己的偏好信息,例如收藏信息,搜索信息,购买信息,还有一些问卷调查方式等等,且不同的数据获得的结果也不尽相同.收集完用户偏好信息之后,我们需要对数据进行一定的预处理.在对数据进行处理的过程中,最核心的部分就是:减噪和归一化.(1)减噪:用户的偏好信息是用户在使用应用过程中产生的,这些数据不可避免存在大量的无用信息还有用户的误操作.通过经典的数据挖掘算法我们可以过滤掉初始数据中的噪音,在进行分析时就会更加准确.(用户在使用应用过程会产生大量有价值的偏好信息,但随之而来的是这些数据中也有许多无用的信息和误操作导致的干扰信息。我们要想得到更为准确的分析结果,就要利用经典数据挖掘算法来过滤掉无效数据,这种做法被形象的称为“降噪”。)(2)归一化:在初始的用户偏好信息中,我们发现不同行为的数据取值相差会很大.比如,用户的浏览过的数据肯定比购买数据大的多.这对于计算来说会造成很大的误差,那么为了将各种数据统一在一个取值范围中,从而加权求和得到的总体结果更加准确,就需要对数据进行归一化处理.最简单一种归一化处理方式,就是将每类数据分别除以此类中的最大值,使处理过的数据取值在[0,1]范围中.对数据进行完基本处理后,根据不同分析方法,可以进行分组或加权.然后我们就可以得到一个用户偏好的矩阵,行是用户列表,列是物品列表,值是用户对物品的偏好评分.1.2找到相似的用户或物品在搜集完人们的偏好数据后,需要确定人们在兴趣方面的相似程度.我们将每个人的数据分别与其他人进行比较,计算他们的相似度评价值.目前有多种方法来计算,这里选两种进行介绍.欧几里德距离:2(,)()ijdxyxy(1)其中ix是x用户对其用户列表中第i个物品的评分,jy是y用户对其用户列表中第j个物品的评分.皮尔逊相关度:5,,,22,,cov(,)iabiiaiabibuUababRRaiabibtUtUrrrrRRrrrr(2)该相关系数是基于用户的协同过滤推荐系统的皮尔逊相关系数,它是判断两组数据和某一直线的拟合程度.它表示用户a与b的皮尔逊相关系数,U表示用户a与b都评分过的项目集合,,air与,bir表示a用户与B用户分别对i物品的评分,而ar与br表示a用户与b用户对所有物品的评分.它在数据并不是很规范的情况下,会倾向给出更好的结果.选择与目标用户最相似的K个用户,组成目标用户的一个集合,利用邻居用户评分的值来预测当前用户对物品的评分.1.3获得推荐基于协同过滤的推荐算法有两类,分别为基于用户和基于物品的推荐算法.1.3.1基于用户的协同过滤基于用户的协同过滤算法是在用户的历史偏好的数据上计算用户的相似度,它的基本假设是,喜欢类似物品的用户可能有相同或者相似的偏好.图1.3.1基于用户的协同过滤推荐系统原理图上图示意出基于用户的协同过滤推荐机制的基本原理,假设用户A喜欢(倾向于购买商品)物品A和C,用户B喜欢物品B,用户C喜欢物品A,C和D.从这些用户的历史喜好信息中,我们可以发现用户A和用户C的口味和偏好是比较类似的,同时用户C还喜欢物品D,那么我们可以推断用户A可能也喜欢物品D,因此可以将物品D推荐给用户A.61.3.2基于项目的协同过滤基于项目的协同过滤推荐也有建立在一个假设的基础上,即一个人会喜欢和他曾经喜欢过的项目相类似的项目.它推荐的基本原理如下图所示,与基于用户的协同过滤原理比较类似,数据源都是所有用户对项目的评级,但是目的是计算项目和项目之间的相似程度,将与历史喜好的项目相似的项目推荐给目标用户.图1.3.2基于项目的协同过滤推荐系统原理图如上图所示,用户A同时喜欢项目A和C,用户B同时喜欢项目A、B和C,从这些数据中可以推断出项目A和C是相似的.由于用户C曾经喜欢项目A,那么就把与项目A相似的项目C推荐给用户C.基于项目的协同过滤是通过项目的相似性来为用户推荐的,因此会偏向于推荐用户的主要兴趣领域的项目,而非主要兴趣领域的推荐结果不充分,因此推荐的多样性不足,也缺乏热点信息.这种推荐方式适用于项目数较少、用户数较