推荐系统中的主要推荐方法

在推荐系统简介中,我们给出了推荐系统的一般框架。很明显,推荐方法是整个推荐系统中最核心、最关键的部分,很大程度上决定了推荐系统性能的优劣。目前,主要的推荐方法包括:基于内容推荐、协同过滤推荐、基于关联规则推荐、基于效用推荐、基于知识推荐和组合推荐。

一、基于内容推荐

基于内容的推荐(Content-based Recommendation)是信息过滤技术的延续与发展,它是建立在项目的内容信息上作出推荐的,而不需要依据用户对项目的评价意见,更多地需要用机 器学习的方法从关于内容的特征描述的事例中得到用户的兴趣资料。在基于内容的推荐系统中,项目或对象是通过相关的特征的属性来定义,系统基于用户评价对象 的特征,学习用户的兴趣,考察用户资料与待预测项目的相匹配程度。用户的资料模型取决于所用学习方法,常用的有决策树、神经网络和基于向量的表示方法等。 基于内容的用户资料是需要有用户的历史数据,用户资料模型可能随着用户的偏好改变而发生变化。

基于内容推荐方法的优点是:
1)不需要其它用户的数据,没有冷开始问题和稀疏问题。
2)能为具有特殊兴趣爱好的用户进行推荐。
3)能推荐新的或不是很流行的项目,没有新项目问题。
4)通过列出推荐项目的内容特征,可以解释为什么推荐那些项目。
5)已有比较好的技术,如关于分类学习方面的技术已相当成熟。

缺点是要求内容能容易抽取成有意义的特征,要求特征内容有良好的结构性,并且用户的口味必须能够用内容特征形式来表达,不能显式地得到其它用户的判断情况。

二、协同过滤推荐

协同过滤推荐(Collaborative Filtering Recommendation)技术是推荐系统中应用最早和最为成功的技术之一。它一般采用最近邻技术,利用用户的历史喜好信息计算用户之间的距离,然后 利用目标用户的最近邻居用户对商品评价的加权评价值来预测目标用户对特定商品的喜好程度,系统从而根据这一喜好程度来对目标用户进行推荐。协同过滤最大优 点是对推荐对象没有特殊的要求,能处理非结构化的复杂对象,如音乐、电影。

协同过滤是基于这样的假设:为一用户找到他真正感兴趣的内容的好方法是首先找到与此用户有相似兴趣的其他用户,然后将他们感兴趣的内容推荐给此用 户。其基本思想非常易于理解,在日常生活中,我们往往会利用好朋友的推荐来进行一些选择。协同过滤正是把这一思想运用到电子商务推荐系统中来,基于其他用 户对某一内容的评价来向目标用户进行推荐。

基于协同过滤的推荐系统可以说是从用户的角度来进行相应推荐的,而且是自动的,即用户获得的推荐是系统从购买模式或浏览行为等隐式获得的,不需要用户努力地找到适合自己兴趣的推荐信息,如填写一些调查表格等。

和基于内容的过滤方法相比,协同过滤具有如下的优点:
1) 能够过滤难以进行机器自动内容分析的信息,如艺术品,音乐等。
2) 共享其他人的经验,避免了内容分析的不完全和不精确,并且能够基于一些复杂的,难以表述的概念(如信息质量、个人品味)进行过滤。
3) 有推荐新信息的能力。可以发现内容上完全不相似的信息,用户对推荐信息的内容事先是预料不到的。这也是协同过滤和基于内容的过滤一个较大的差别,基于内容的过滤推荐很多都是用户本来就熟悉的内容,而协同过滤可以发现用户潜在的但自己尚未发现的兴趣偏好。
4) 能够有效的使用其他相似用户的反馈信息,较少用户的反馈量,加快个性化学习的速度。

虽然协同过滤作为一种典型的推荐技术有其相当的应用,但协同过滤仍有许多的问题需要解决。最典型的问题有稀疏问题(Sparsity)和可扩展问题(Scalability)。

三、基于关联规则推荐

基于关联规则的推荐(Association Rule-based Recommendation)是以关联规则为基础,把已购商品作为规则头,规则体为推荐对象。关联规则挖掘可以发现不同商品在销售过程中的相关性,在零 售业中已经得到了成功的应用。管理规则就是在一个交易数据库中统计购买了商品集X的交易中有多大比例的交易同时购买了商品集Y,其直观的意义就是用户在购 买某些商品的时候有多大倾向去购买另外一些商品。比如购买牛奶的同时很多人会同时购买面包。 ...

继续阅读

360代备案申请流水账及注意事项

3月12日通过360代备案专员提交备案申请,
4月11日收到管局发来的备案成功提醒短信,一共用时30天。
期间申请失败一次,3月26日管局短信通知审核NG,联系360代备案专员查明失败原因为“住址未精确到门牌号”。
 
说几点注意事项:
1. 360备案专员提示申请审核期间最好停止解析(可能会造成搜索引擎K站,审核人员一般在申请提交后的第14进行审核),不过据说不停止解析也有可能会通过审核,有兴趣的看官可以尝试一下。 
2. 个人资料住址应当精确到门牌号不精确到门牌号也有一定概率通过审核,但是看RP
 
3. 备案成功后绑定域名发送邮件到saemail@sina.cn进行申请
4. 绑定国内线路后需要关闭360网站卫士,解析时cname到xxx.sinaapp.com,否则可能造成访问404
备案详细流程请参阅此贴:(链接已失效)

使用amCharts绘制统计图表(柱状图、折线图、3D图)

amCharts

amCharts是一款优秀的数据可视化js图形库,包括Javascript Charts, Javascript Stock Chart和Interactive Javascript Maps三类产品,本文简单介绍一下Javascript Charts的用法。

amCharts的安装:

从amCharts官方网站下载所需的图形组件,将压缩包解压至备选目录。把amcharts文件夹从下载到的zip文件中拷贝至工作目录下。然后使用你熟悉的编辑器创建一个简单的html文件,例如命名为columnchart.html。

接下来,我们打开文件开始编码。

添加容器:

页面所需的唯一HTML元素就是图表的容器。我们像这样来添加一个DIV:

<body>
    <div id="chartdiv"></div>
</body>

JavaScript图表将使用这个对象作为绘图容器。请注意我们将其命名为"chartdiv",这个名字后面会用到。

引用JavaScript库文件

在页面的head部分我们需要添加amCharts JavaScript库文件的引用。由于V3 amCharts库被拆分成了几个文件,为了节省几个kb空间—你需要添加amchart.js主文件,并根据你的需求来决定添加一个或者多个图表文件。柱形图属于序列图的一种,因此我们包含这两个js文件:

<script src="amcharts/amcharts.js" type="text/javascript"></script>
<script src="amcharts/serial.js" type="text/javascript"></script>

注意:添加顺序很重要,amcharts.js应该放在最前面。

我们需要一些示例数据来生成图表,在此我们添加一个简单的JavaScript数组对象:

<script type="text/javascript">

	var chartData = ...

继续阅读

关于SAE的碎碎念—写在2014的前面

        “无所不知等于一无所知”,“什么都略懂一点儿,生活更多彩一些”,各有各的道理,但我更喜欢后面一句。

        初识新浪云是在大约1年之前,那时的云计算对我来说还只是一个非常高端的词汇,套用一句关于大数据的经典评论“云计算就像青春期的性:所有人都在谈论它,没有人真的知道怎么做,每个人都觉得其他人也在做,所以大家都声称自己也在做”。机缘巧合,非常感谢那时还在新浪实习的W君的无私帮助,让我通过SAE真正开始了解云计算到底在做些什么事情。

        所谓“师傅领进门,修行在个人”,从W君那里了解了一些基础知识后,自己便开始在SAE做一些小东西,Trial and Error,一边尝试一边学习,不久就基本掌握了SAE的用法。那时的我只会一些Java,然而囊中羞涩,不舍得花钱买芸豆的我惊喜的发现Python平台的花费要比Java平台小许多,于是毫不犹豫地开始学习Python,感谢SAE让我加入了Python程序员的行列。

        2014,我们要做的还有很多。“我是要成为站长的男人”!许多SAE用户都怀有一颗成为成功站长的雄心。然而现实很残酷,并非每个人都能达到理想的彼岸,不过没关系,过程好结果并不重要,奋斗的经历本身就是一笔无价的财富。通过在SAE上的探索,可以让你了解到许多从未涉足的领域,学习到很多宝贵的知识和经验,更重要的是,习得独立解决问题的思维与能力。对于独立开发者,SAE可以帮助你成为一名“全栈工程师”,横向了解从前端到后台的各个层面,开阔视野。

        SAE不止是一个云计算平台,更是一个成就梦想的舞台。2014期待SAE可以做的更好,期待更多优秀的项目能够借助SAE收获成功,也期待越来越多的草根开发者可以在SAE的舞台上绽放出自己的光彩。

最适合初学者入门的5种编程语言

如果你想学习编程,你决定选择的第一门编程语言与你想要学什么、想要用这个技能做些什么以及最终要达到什么目的有很大关系。尽管如此,某些编程语言比其他语言要好学,拥有一个致力于教学的社区,或者当你学会它的时候提供更多有用的技能。下面是根据大家的提名总结出的5种最佳编程语言候选名单。

应该清楚的是,我们并不是在试图绝对化地解决你应当首先学习哪门编程语言这个问题。每个人都有不同的观点,并且,基于你特定的学习动机,也许这些都不适合你。由于篇幅所限,我们不可能把征集到的所有编程语言在此一一详细介绍。也就是说,这里列出的5种语言是提名中最流行的,排名不分先后。

Java

Oracle公司的Java是互联网历史最悠久、最坚挺和最具影响力的编程语言之一。你可以在线上线下、各种平台、操作系统和设备应用的核心部分发现Java的身影。它是一门极具特色的基于类、面向对象的编程语言,被设计为能够在尽可能多的平台上移植和运行。出于这个原因,它也是世界上最流行的编程语言之一,如果你对编程感兴趣,Java非常具有学习价值。Java的短板是由于其可移植性和适用性,它变得非常难以把握,并且难以有效和高效地编程。

Java并不是一门完美的语言——许多学校和课堂以C或者C++开始教学,因为Java从这些早期语言中继承了许多语法。坚持首选Java作为第一门编程语言的学习者必须注意Java迫使你以程序员的方式思维——逻辑和分析式思考,并且真正把握计算机是如何处理信息的才行。这是一些基本的概念,在你转向其它语言或技术时可以为你提供帮助。

Ruby

Ruby是一种动态、开源、面向对象的编程语言,由计算机科学家松本行弘(MatsumotoYukihiro)于上个世纪90年代研发,这使得它成为广泛使用的最年轻的语言之一。它的语法容易阅读、仅仅由人类编写,不需要学习一大堆基本的命令和特殊的“单词表”就可起步。尽管这个语言本身是面向对象的,它也支持过程化、函数式和命令式编程,这也是造就了其非凡灵活性的因素之一。

Ruby有一个比较易学的好名声,通过官网上的20分钟快速入门指引,你可以很快了解和熟悉 ...

继续阅读