CWYAlpha

Just another WordPress.com site

Archive for 十月 2011

Thought this was cool: Firefox下的浏览器兼容性检测工具——Compatibility Detector

leave a comment »

这里给大家推荐一个Firefox下的浏览器兼容性检测工具——Compatibility Detector。这个工具对于新手来说是非常不错的一个东东,下面我就简单说下它的优点。

作为一个前端开发者来说,最痛苦的事情之一就是要兼容现在各种五花八门的浏览器,而在实际的调试中这个调试过程又是让人劳心劳力。而Compatibility Detector能把目前很多已知的兼容性问题很easy的展现在我们面前。Compatibility Detector下有两种:基本检测和高级检测。

基本检测会检测一些基本的DTD标准、标签、属性等,如下图中提示没有设置DTD、一些不兼容使用的标签和不建议使用的属性。(特别是align属性,很多新手喜欢使用align属性来布局,这个容易引起浏览器中的兼容性问题。)


如果使用高级测试功能,这个插件会把页面重新刷新一遍来获取页面中更多的兼容性问题。这当中分为“错误级别”和“警告级别”两种,警告级别中出现的问题一般不影响页面的兼容性。


同时在页面上可以所见即所得的标示出问题元素的位置和兼容性问题的原因。这个对于新人同学来说是不是很不错啊。

我自己在使用这个插件的时候最多看到的提示就是容器大小限制haslayout两种。前一种需要注意这个元素中是否放一下不确定的内容,如果内容太多的情况下可能影响到你的布局。后一种就是大家常常遇到的父容器无法撑开的问题,如果有在父级容器上设置边框、背景之类样式时就要特别小心了。

最后附上这个插件的下载地址:mozilla.com.cn

from 车东[Blog^2]: http://ued.ctrip.com/blog/?p=2535

Written by cwyalpha

十月 31, 2011 at 11:39 上午

发表在 Uncategorized

Thought this was cool: 《集体智慧编程》笔记之五:优化算法

leave a comment »

  本文探讨的是使用随机优化(stochastic
optimization)的技术来解决协作类问题。优化技术特别擅长处理:受多种变量的影响,存在许多可能解的问题,以及结果因这些变量的组合而产生很大变化的问题,尤其是这些题解无法一一尝试。优化算法是通过尝试许多不同题解并给出这些题解打分以确定其质量的方式来找到一个问题的最优解的。优化算法最简单也是最低效的求解方法,莫过于去尝试随机猜测的上千个题解,并从中找出最佳解来。而更有效率的方法则是以一种对题解可能有改进的方式来对其进行智能化地修正。

 

优化算法过程
  首先是描述题解,我们有必要明确潜在的题解将如何表达。一种非常通用的表达方式,就是数字序列。其次是确定成本函数,成本函数是用优化算法解决问题的关键,它通常是最难确定的。任何优化算法的目标,就是要寻找一组能够是成本函数的返回结果达到最小化的输入。成本函数需要返回一个值用以表示方案的好坏。对于好坏的程度并没有特定的衡量尺度,唯一的要求就是函数返回的值越大,表示该方案越差。对多个影响变量确定重要性,然后将它们组合在一起形成一个值。之后就可以尝试各种优化算法了。典型的例子,如航班安排问题。

随机搜索
  随机搜索不是一种非常好的优化算法,但它却使我们很容易领会所有算法的真正意图,并且它是我们评估其他算法优劣的基线(baseline)。随机产生N次(如1000)次猜测,取成本最低的猜测作为结果。得到的结果显然不是最差的。

爬山法
  随机尝试各种题解非常低效,它没有充分利用已经发现的优解。随机优化是到处跳跃的(jumps
around),所以它不会自动去寻找与已经被发现的优解相接近的题解。爬山法是一种改进,它以一个随机解开始,然后在其临近的题解中寻找更好的题解(具有更低成本),类似于从斜坡上向下走。对每一次相邻的时间安排都进行成本计算,具有最低成本的作为新的题解。重复这个过程直到没有相邻安排能够改善成本为止。

  爬山法最大的一个缺陷就在于陷入局部范围的最小值,它比邻近解表现都好,但却不是全局最优的。解决这个缺陷的一种方法就是随机重复爬山法(random-restart
hill
climbing),即让爬山法以多个随机生成的初始解为起点运行若干次,借此希望其中有一个解能够逼近全局最优。

模拟退火算法
  退火算法以一个问题的随机解开始,它用一个变量来表示温度,这一温度开始时非常高,而后逐渐变低。每一次迭代期间,算法会随机选中题解中的某个数字,然后朝某个方向变化。算法最为关键的部分在于,如果新的成本值更低,则新的题解就会成为当前题解,这和爬山法类似。不过,如果成本值更高的话,则新的题解仍将可能成为当前题解。这是避免局部最优的一种尝试。某些情况下,在我们能够得到一个更优的解之前转向一个更差的解是很有必要的。模拟退火算法管用原因在于它不仅总是会接受一个更优的解,而且还因为它在退火过程的开始阶段会接受表现较差的解。随着退火过程的不断进行,算法越来越不可能接受较差的解,直到最后,它将只会接受更优解。温度和冷却率是两个可选的参数。对于任何一个给定问题,不妨使用不同的参数做一做试验。

遗传算法
  遗传算法先随机生成一组解,称为种群(population),在优化过程中的每一步,算法会计算整个种群的成本函数,从而得到一个有关题解的有序列表。在对题解进行排序之后,一个新的种群(下一代)被创建出来。首先,将当前种群中位于最顶端的题解加入其所在的新种群中,这一步叫精英选拔法(elitism)。新种群中余下部分是由修改最优解后形成的全新解所组成。修改题解的方法有两种。方法一是变异:对一个既有解进行微小的、简单的、随机的改变。例如题解中选择一个数字,对其进行递增或递减即可。方法二是交叉(crossover)或者配对(breeding),选取最优解中的两个解,然后将它们按某种方式进行结合。例如从一个接种随机取出一个数字作为新题解的某个元素,剩余元素则来自另一个题解。

  新的种群是通过对最优解进行随机的变异和配对处理构造出来的,它的大小通常与旧的种群相同。而后,这个过程一直重复进行–新的种群经过排序,又一个种群被构造出来。达到指定的迭代次数或者连续经过数代后题解都没有得到改善,整个过程就结束了。

 

优化算法的局限
  一种优化方法是否管用很大程度上取决于问题本身。模拟退火算法、遗传算法,以及大多数其他优化方法都有赖于这样一个事实:对于大多数问题而言,最优解应该接近于其他的优解。但这个假设不一定成立。如下图:
  成本最低点实际上处在一个非常陡峭的区域。接近它的任何解都有可能被排除在外,因为这些解的成本都很高。所以我们永远都找不到通往全局最小值的途径。大多数算法会陷入图中左边某个局部最小化的区域里。

 

涉及偏好的优化
  如何将有限的资源分配给多个表达了偏好的人,并尽可能使他们都满意。如学生宿舍安排问题。从个体中提取信息,并将其组合起来产生出优化的结果。理论上,我们也可以构造一个数字序列,让每个数字对应于一名学生,表示将其安置在了某一间宿舍。但无法在题解中体现约束条件:每件宿舍仅限两名学生居住。一个全零序列代表将所有人安排在了同一宿舍,这就是一个无效解。解决这种问题,一种办法是将无效解的成本函数返回一个很高的述职,但这使得优化算法很难找到次优的解,因为算法无法确定返回结果是否接近于其他优解,设或是有效的解。一般而言,我们最好不要让处理器浪费在无效解的搜索上。更好的办法,则是寻找一种能让每个解都有效的题解表示法。让每个述职必须在合理的域值范围内。

  这类问题的成本函数构造是有一个法则:尽可能让最优解的成本为零。

网络可视化
  如社交网络中要将人际关系网络可视化输出,其中布局问题就可以是一个优化问题。既要让图片舒展开,又要减少交叉点。前者可以利用质点弹簧算法(mass-and-spring
algorithm):各结点彼此向对方施以推力并试图分离,而结点间的连接则试图将关联点彼此拉近。如此一来,网络便会呈现这样布局:未关联的结点被推离,而关联的结点则被彼此拉近,却又不会靠的很拢。减少交叉点的优化方法,其中成本函数可以计算彼此交叉的连线数。

其它应用实例
  竞赛中组队,希望组员的技能得以均匀分布;项目组分派任务,考虑人们的技能搭配情况;根据用户提供的关键字寻找一组最佳网站,最佳网站组并不需要具备大量彼此公有的关键字,而是要尽可能多地体现由用户提供的关键字。

 

  转载请注明出处:互联网旁观者~黄言之 http://blog.sina.com.cn/netreview/

from 互联网旁观者: http://blog.sina.com.cn/s/blog_72995dcc0100yuca.html

Written by cwyalpha

十月 31, 2011 at 11:38 上午

发表在 Uncategorized

Thought this was cool: 《集体智慧编程》笔记之四:搜索与排名

leave a comment »

  这一章节的内容笔者比较熟悉,所以只是简单整理一下内容,想深入的读者只好去查看原书啦。

  发现用python构建一个简单搜索引擎还是很容易的。爬虫程序:urllib2;网页结构化解析:Beautiful Soup
API;建立索引:SQLite/pysqlite。
  搜索排名的方法,本书介绍的方法如下:

  其中点击模型的神经网络模型比较复杂,没有细看,在需要的时间可以再详细阅读。

 

  转载请注明出处:互联网旁观者~黄言之 http://blog.sina.com.cn/netreview/

from 互联网旁观者: http://blog.sina.com.cn/s/blog_72995dcc0100yrxi.html

Written by cwyalpha

十月 31, 2011 at 11:38 上午

发表在 Uncategorized

Thought this was cool: 《集体智慧编程》笔记之三:聚类发现群组

leave a comment »

  聚类是无监督学习(unsupervised
learning)的一个例子。其他无监督学习还包括非负矩阵因式分解(non-negative matrix
factorization)和自组织映射。为聚类算法准备数据的常见做法是定义一组公共的数据型属性,我们可以利用这些属性对数据项进行比较。关于聚类有一点很重要:当数据项的数量比变量多的时候,出现无意义聚类的可能性就会增加。

 

分级聚类
  分级聚类通过连续不断地将最为相似的群组两两合并,来构造出一个群组的层级结构。其中每个群组都是从单一元素开始的。如下图所示,元素的相似程度通过它们的相对位置来体现–两个元素距离越近,它们就越相似。树状图是分级聚类的一种可视化形式。

  分级聚类算法以一组对应于原始数据项的聚类开始,函数的主循环部分会尝试每一组可能的配对并计算它们的相关度,以此来找出最佳配对。最佳配对的两个聚类会被合并成一个新的聚类。新生成的聚类中所包含的数据,等于将两个旧聚类的数据求均值之后得到的结果。这个过程一直重复下去,直到只剩下一个聚类为止。由于整个计算过程可能会非常耗时,所以不妨将每个配对的相关度计算结果保存起来,因为这样的计算会反复发生,直到配对中的某一项被合并到另一个聚类中为止。

 

K-均值聚类
  分级聚类算法计算量非常惊人,因为必须计算每两个配对项之间的关系,并且在合并项之后,这些关系还得重新再计算。K-均值(K-Means)预先告诉算法希望生成的聚类数量,然后根据数据的结构状况来确定聚类的大小。

  算法首先会随机确定K个中心位置(位于空间中代表聚类中心的点),然后将各个数据项分配给最临近的中心点。待分配完成之后,聚类中心就会移到分配给该聚类的所有节点的平均位置处,然后整个分配过程重新开始。这个过程会一直重复下去,直到分配过程不再产生变化为止。下图是涉及5个数据项和2个聚类的过程。

  算法选用随机的中心点作为开始,所以返回结果的顺序几乎总是不同的。根据中心点初始位置的不同,最终聚类中所包含的内容也可能会有所不同。

 

实例:博客用户进行分类
  根据单词出现的频度对博客进行聚类,可以帮助我们分析出是否存在这样一类博客用户,这些人经常撰写相似的主题,或者在写作风格上十分类似。对各个博客文章中的单词进行计数。建立的单词列表,可以只选择介于某个百分比范围的单词(如10%~50%),避免高频词或者生僻词(稀疏),同时也可以减少需要考查的单词总量。

  紧密度,我们选择皮尔逊相关度。由于一些博客包含更多的文章条目,或者文章条目的长度比其他博客的更长,这样会导致这些博客在总体上比其他博客包含更多的词汇,而皮尔逊相关度可以纠正这一个问题,因为它判断的其实是两组数据与某条直线的拟合程度。计算时,可以用(1-pearson)来代替,使得值越小,越紧密。

实例:针对偏好的聚类
  Zebo网站上用户会将自己已经拥有的和希望拥有的物品列举出来。这里的数据集只有1和0两种取值,分别代表有或者无。定义距离度量标准时,我们对同时希望拥有两件物品的人在物品方面互有重叠的情况进行度量,因此,我们采用Tanimoto系数(Tanimoto
coefficient)的度量方法,它代表的是交集(只包含那些在两个集合中都出现的项)与并集(包含所有出现于任一集合中的项)的比率。

 

列聚类
  同时在行和列上对数据进行聚类常常是很有必要的。当我们进行市场研究的时候,对消费群体进行分组很有意义,还有可能确定哪些上架商品可以进行捆绑销售。博客分类中,列代表的是单词,知道哪些单词时常会结合在一起使用,可能是非常有意义的。

 

以二维形式展现数据
  大多数情况下,所要聚类的内容都不止包含两个数值,所以可视化展现时不能简单地以二维形式绘制出来。但是,为了弄明白不同物品之间的关系,将它们绘制在一页纸上,并且用距离的远近来表达相似程度,又是一种非常有效的做法。

  多维缩放(multidimensional
scaling)
技术可以为数据集找到一种二维表达形式。算法根据每对数据项之间的差距情况,尝试绘制出一幅图来,图中各数据项之间的距离远近,对应于它们彼此间的差异程度。为了这一点,算法首先需要计算出所有项之间的目标距离。在博客分类中,我们采用了皮尔逊相关度技术来对各项数据项进行比较。见下图示例:

  下一步,我们将所有数据项随机放置在二维图上。所有数据项两两间的当前距离值都是根据实际距离(即差平方之和)计算求得的。

  针对每两两构成的一对数据项,将目标距离与当前距离进行比较,并求出一个误差值。根据误差的情况,按照比例将每个数据项的所在位置移近或移远少许量。每一个节点的移动,都是所有其他节点施加在该节点上的推或拉的综合效应。下图显示了对A施力的情况。节点每移动一次,其当前距离和目标距离的差距就会减少一些。这一过程不断的重复多次,直到我们无法再通过移动节点来减少总体误差为止。

  下图显示了多维缩放算法的执行结果,虽然没有树状图那么直观,但仍是可以清晰的找出一些主题分组。效果还是不错的。

  多维缩放是一种非常有效的方法,利用它我们可以将获取到的数据集以一种易于解释的方式形式化展现出来。在缩放过程中,一些信息可能会丢失掉,明白这一点非常重要,但是缩放后的结果应该会更加有助于我们理解算法的原理。

 

  转载请注明出处:互联网旁观者~黄言之 http://blog.sina.com.cn/netreview/

from 互联网旁观者: http://blog.sina.com.cn/s/blog_72995dcc0100yrwh.html

Written by cwyalpha

十月 31, 2011 at 11:38 上午

发表在 Uncategorized

Thought this was cool: 《集体智慧编程》笔记之二:提供推荐

leave a comment »

  推荐系统,用以分析用户兴趣,寻找具有相同品味的人,并根据他人的喜好自动给出推荐(预测用户的喜好程度)。如,在线购物中的商品推荐,热门网站的推荐,以及帮助人们寻找音乐和影片的应用。可以使用许多不同的方法来搜集兴趣偏好,如购买物品、评价信息。推荐系统的方法,主要有三种,基于关联规则,基于内容(匹配),基于协同过滤。本文主要介绍的是协同过滤方法,而这种方法也是目前非常流行的方法。

 

协同过滤
  协同过滤(Collaborative
Filter)算法,通常的做法是对一大群人进行搜索,并从中找出与我们品味相近的一小群人;算法会对这些人所偏爱的其他内容进行考查,并将它们组合起来构造出一个经过排名的推荐列表。(基于用户的协同过滤方法,另一种方法基于物品的协同过滤,在后文)。

 

基于用户的协同过滤
  第一步事情,搜集偏好,寻找一种表达不同人及其偏好的方法。我们需要一种方法将偏好对应到数字。例如,购物网站,我们可以用1表示购买过某件商品,0表示未曾购买;投票网站,我们可以用-1,0,1分别表示”不喜欢””没有投票””喜欢”。

  第二步,寻找相近的用户。搜集完偏好数据后,如何确定人们的品味方面的相似程度?可以计算两人之间的相似度评价值,这里介绍两套体系:欧几里德距离和皮尔逊相似度。
(1)欧几里德距离评价
  它以经过人们一致评价的物品为坐标轴,将参与评价的人绘制到图上,并考察他们彼此间的距离远近。如图所示,在这个二维空间里(实际是对应Snakes和Dupree两部影片的评分后的人所在位置),两人在”偏好空间”中的距离越近,兴趣偏好就越相似。对于更多数量的评分项也是适用的。

  计算图中Toby和LaSalle之间的距离:sqrt(pow(4.5-4.2)+pow(1-2.2))。距离值越短,偏好越相似。我们还需要一个函数,将偏好越相近的情况给出越大的值,可以求倒数(先将函数值加1,避免被0除),即:1/(1+
sqrt(pow(4.5-4.2)+pow(1-2.2)))。新函数总是返回0到1之间的值,返回1则表示两人具有一样的偏好。
(2)皮尔逊相关度评价
  皮尔逊相关系数,是判断两组数据与某一直线你和程度的一种度量。公式更为复杂,但它在数据不是很规范(normalized)的时候(比如,影片者对影片的评价总是相对于平均水平偏离很大时),会倾向于给出更好的结果。公式如下,不直观,请看后面的图解。

  下图是比较两位影评者的评分结果的散点图(两坐标代表两个评论者)。直线式最佳拟合线(best-fit
line),尽可能靠近图上的所有坐标点。如果两位评论者对所有影片的评分情况都相同,那么这条直线将成为对角线,并且会与图上所有的坐标点都相交,从而得到一个结果为1的理想相关度评价。图中评分不尽相同,计算完相关系数大约在0.4左右。

  皮尔逊方法,可以修正”夸大分值(grade
inflation)”的情况。如下图,Jack总是倾向于给出比Lisa更高的分值,但最终的直线仍是比较拟合的(0.75),就是因为他们两者有着相对近似的偏好。评价人的标准会有严格与否的区分,虽然一个人的评价可能始终比另一个人的更为严格,但他们仍是比较相关的,即品味相似的。而欧几里德距离是不能做到的。这种行为是否是我们想要的结果,取决于具体的应用场景。

  皮尔逊算法,首先会找出两位评论者都曾评价过的物品,然后计算两者的评分总和与平方和,并求得评分的乘积之和。最后,计算出相关系数。
(3)如何选择相似性度量方法
  还有许多方法(如Jaccard系数或者曼哈顿距离算法,可以上wikipedia上了解更多度量算法)可以衡量两组数据的相似程度。哪一种最优,完全取决于具体的应用。哪种方法实际效果更好,都是值得一试的。

  第三步,为评论者打分。有了比较函数,根据指定人员对每个人进行打分,并找到最接近的匹配结果,得到品味最近的人员,则可以推荐阅读其撰写的评论。

  第四步,推荐物品。找到一位趣味相投的影评者并阅读他的评论固然不错,但我们真正想要的是一份影片的推荐。当然,我们可以查找与自己品味最为相近的人,并从他所喜欢的影片中找出一部自己还未看过的影片,不过这样做太随意(permissive)了。有时候,评论者还未对某些影片做过评论,而这些影片也许就是我们所喜欢的,还有一种可能是,我们会找到一个热衷某部影片的古怪评论者,而根据topMatches所返回的结果,所有其他的评论者都不看好这部影片。

  为了解决上述问题,可以通过一个经过加权的评价值来为影片打分,将相似度作为权值,乘以他们为每部影片所给的评价值(这样,其他所有人的评价过的影片都可以用来作为推荐源,同时考虑了评分,对推荐的质量也有了一定的保证)。下表给出了执行过程。

  表中列出了每位评论者的相关度,以及对三部影片的评分。总计给出了所有加权评价值的总和。考虑每个人的评论影片数不同,所以不能简单利用总计值计算排名。表中,我们除以了Sim.sum(代表了所有对这部电影有过评论的评论者的相似度之和)。最后的结果可以用于产出推荐的影片结果。

  此处,我们不仅得到推荐的影片列表,还可以推测出自己对每部影片的评价情况。根绝这份结果,我们可以决定自己究竟要不要观看其中的某部影片。假如无法满足某一用户给出的标准,我们也可以决定不给予建议。你会发现,选择不同的相似性度量方法,对结果的影响是微乎其微的。

  现在,我们已经建立起了一个完整的推荐系统,它适用于任何类型的商品或网络链接。我们只需建立一个涉及人员、物品和评价值的字典,然后就可以借此来为任何人提供建议了。

扩展需求:匹配商品
  我们能够为指定人员推荐商品了,但我们还想了解哪些商品彼此是相近的,该如何做呢?这种情况,我们可以通过查看哪些人喜欢某一特定物品,以及这些人喜欢哪些其他物品来决定相似度。事实上,这和我们决定人与人之间相似度的方法是一样的,只需要将人员与物品对换即可。不仅如此,还可以为影片推荐评论者。

  将人和物对调并不总是会得到有价值的结果,但是大多数情况下,这将有助于我们做出有意义的对比。为了向不同的个体推荐商品,在线零售商可能会收集人们的购买历史。将商品与人进行对调,可以令零售商找到购买某些商品的潜在客户。这对于他们为了清仓处理某些商品而在市场营销投入方面制定的规划很有帮助。另一个潜在用途,如推荐链接的网站上,可以确保新出现的链接,能够被那些最有可能对它产生兴趣的网站用户找到。

 

实例:链接推荐系统

  构建一个基于del.icio.us的链接推荐系统,评价值只有两种,0是用户没有张贴这个链接,1是用户张贴了这个链接。剩下的做法就和上面的非常类似了。可以为用户推荐链接,也可以寻找我们所关注的某一链接相类似的一组链接。我们还可以做更多的事情,网站支持根据标签进行搜索,我们还可以找出那些彼此相似的标签(关联的数据仍是使用用户张贴的行为数据,先有用户偏好,再聚类)。甚至,我们还可以搜索出那些使用不同账号张贴同一连接的,企图以此来炒作网页的人。

 

基于物品的协同过滤
  迄今为止的推荐引擎,要求我们使用来自每一位用户的全部评分来构造数据集。这种方法对于数量以千计的用户或物品规模而言或许是没有问题的,但对于像Amazon这类大型网站而言,将一个用户和所有其他用户进行比较,然后再对每位用户评过分的商品进行比较,其速度是无法忍受的。同样,一个商品销售量为数百万的网站,用户在偏好方面彼此间很少会有重叠,这可能会令用户的相似性判断变得十分困难。

  上文的技术可以称为”基于用户的协同过滤(user-based collaborative
filtering)”,还有另一种可供选择的方法,被称为”基于物品的协作性过滤(item-based collaborative
filtering)”。在拥有大量数据集的情况下,基于物品的协同过滤能够得出更好的结论,而且它允许我们将大量计算任务预先执行,从而使须要给予推荐的用户能够更快地得到他们所要的结果。总体思路就是为每件物品预先计算好最为相近的其他物品。然后,当我们想为某位用户提供推荐时,就可以查看他曾经评过分的物品,并从中选出排位靠前者,再构造出一个加权列表,其中包含了与这些选中物品最为相近的其他物品。此处最为显著的区别在于,尽管第一步要求我们检查所有的数据,但是物品间的比较不会像用户间的比较那么频繁变化。

  单独或线下计算完物品间的相似度评价值,我们就可以在不遍历整个数据集的情况下,利用反映物品相似度的字典来给出推荐。取得用户评价过的所有物品,找到其相近的物品,并根据相似度对其进行加权,可以通过已评价过的物品分值推测出未评价过的物品分值,从而按照分值高低进行推荐。下图给出了利用基于物品的方法寻找推荐的过程(表的横竖都是影片)。

  每一行累出了一步我们(Toby)曾经观看过的影片,以及对该片的个人评价。对于每一部没看过的片,都有相应一列指出它与已观看的影片的相近程度(可预算计算好的)。总计一行给出每部影片相似度评价值的总计值及其R.x列的总计值,后者除以前者,既可以预测我们对每部影片的评分情况。

 

两种方法的如何选择?
  基于用户进行过滤还是基于物品进行过滤?在针对大数据集生成推荐列表时,基于物品进行过滤的方式明显要比基于用户的过滤更快,不过它需要维护物品相似度表的额外开销。同时,根据数据集”稀疏”程度上的不同也存在精准度上的差异。稀疏数据集而言,基于物品的过滤方法通常要优于基于用户的过滤方法,而对于密集数据集而言,两者的效果则几乎是一样的。

  尽管如此,基于用户的过滤方法更加易于实现,而且无需额外步骤,因此它通常更适用于规模较小的变化非常频繁的内存数据集。最后,在一些应用中,告诉用户还有哪些人与自己有着相近偏好是有一定价值的。

 

  转载请注明出处:互联网旁观者~黄言之 http://blog.sina.com.cn/netreview/

from 互联网旁观者: http://blog.sina.com.cn/s/blog_72995dcc0100yrqy.html

Written by cwyalpha

十月 31, 2011 at 11:38 上午

发表在 Uncategorized

Thought this was cool: 《集体智慧编程》笔记之一:导言

leave a comment »

关于集体智慧
  Netlix的影片推荐系统,Google的Pagerank算法,都是使用了先进的算法,将来自不同人群的数据加以组合,进而得出新的结论,并创造出新的商机。这种信息采集能力,以及对其加以解释的计算能力已经激发起了很多巨大的协作性商机,并且加深了对用户和顾客更好的理解。

  集体智慧(Collective
Intelligence),从技术角度,通常指:为了创造新的想法,而将一群人的行为、偏好或思想组合在一起。收集、组合和分析数据,不一定要借助于Web,如传统的调查问卷或普查,但Internet使得从数千甚至数百万的网民中搜集信息的能力变得更加方便,网络上的各种行为数据都是被监控被记录的。例如,Wikipedia是一个完全由用户维护的在线百科全书,软件本身并没有对用户贡献的内容进行特殊的智能处理,指跟踪内容的变更情况。Google的PageRank算法,搜集了数以千计的人队某个页面的评价信息(引用数),对搜索结果进行排序。Wikipedia重点在于提供内容的用户,不在于算法。Pagerank则是一种很好的算法,对搜集到的用户数据进行计算分析,并创造出可以增强用户体验的新信息。

关于机器学习
  机器学习,允许计算机不断地进行学习。大多数情况下,将一组数据传递给算法,并由算法推断出与这些数据的属性相关的信息–借助这些信息,算法就能够预测出未来有可能会出现的其他数据。这种预测是完全有可能的,因为几乎所有的非随机数据中,都会包含这样活着那样的模式(Patterns),这些模式的存在使得机器得以据此进行归纳。机器会利用它所认定的出现于数据中的重要特征对数据进行训练,并借此得到一个模型。

  不同机器学习算法各有所长,适应不同类型的问题。如决策树,非常直观,通过观察可以完全理解机器执行的推导过程。而神经网络,则像一个黑盒,虽然它也给出最终的结果,但通常要复现蕴含在这些结果背后的推导过程则是非常困难的。再如,简单的相关性分析和回归也是机器学习的基本形式。

  机器学习的局限在于,算法受限于大量模式之上的归纳能力,而一个模式如果不同于算法先前所曾见到过的任何其他模式,那么它很有可能会被”误解”。而人类拥有大量的文化知识及经验可以借鉴,而且还具备一种非凡能力:对信息决策时,人们能够从中识别出相似的信息。机器学习只能凭借已经见过的数据进行归纳,而且归纳的方法受到很大的限制。另外,所有机器学习算法都有过度归纳的可能性,基于少数示例的强归纳很少是完全精确的。究其本质,许多机器学习算法在新信息到来之时都是能够持续进行学习的。
真实生活中的例子
  推荐系统:Amazon和Netflix的利用人们购买或租赁信息确定人或物品的相似程度,再根据买卖历史给出推荐;Pandora和Last.fm,利用我们对不同乐队和歌曲的评价来建立定制的广播电台。

  市场预测:最为有名的例子Hollywood Stock Exchange(http://hsx.com),涉及影片和影星的模拟股票交易。可以按照影片当时价格买卖股票,其对应的价值相当于电影实际首次票房收入的百万分之一。价格是通过交易行为来设定的,所以价值不由任何一个个体所决定,而是由群体的行为来确定,股票的当时价格可以看作是整个群体对电影票房收入数字的预测。通常,系统给出的预测往往优于某位专家的预测。

  交友配对:eHarmony,利用参与者的信息确定交友的最佳配对。
  学习型算法,对其他领域也是非常有帮助的。例如,生物工艺学、金融欺诈侦测、机器视觉、产品市场化、供应链优化、股票市场分析、国家安全。一旦你掌握了一点机器学习的算法,就会发现它们的应用随处可见。

 

  转载请注明出处:互联网旁观者~黄言之 http://blog.sina.com.cn/netreview/

from 互联网旁观者: http://blog.sina.com.cn/s/blog_72995dcc0100yr2b.html

Written by cwyalpha

十月 31, 2011 at 11:38 上午

发表在 Uncategorized

Thought this was cool: 推荐8个开源软件网站

leave a comment »

   
为了说明开源软件的重要性,让我拿出3款著名的开源软件放在你面前,他们是——Mozilla Firefox、Wikipedia 和
Linux。

   
有人能够否认这三个(在许多之中)不仅仅改变了我们计算机的运作,而且也成为了行业改变者吗?

   
在我们的思想当中有着严重的印记,那里被来自微软和苹果的产品所控制。

   
这三个是开源软件运动的旗帜,许多其他的产品紧随其侧(Apache 服务器、Symbian 系统、OpenOffice、Arduino
等等)。回到 Wikipedia,我们了解到开源的思想存在已久,远在网络给这个单词在词典中安排一个位置之前。

   
在这里我们要讨论一下开源软件。开源软件是源代码可以免费获取的程序或应用软件,这些代码可以使用或者修改为其他一致的程序。你过你很想了解一下细节,请查看一下开源信条的维护者们开源倡议书中是怎么说的。

   
开源软件和免费软件不同。不过在用户层级,对于外行人这个区别不是很重要。开源产品允许你重写代码,如果你愿意的话;免费软件不允许这样做,并且带有开发者一定的版权。

   
大多数时候,开源软件是免费软件的起源。那么让我们看看开源社区有哪些事情发生。在我们看待这8个网站的时候,我们首先相信 Linus
Torvalds 的观点——“未来一切都将开源……”

SourceForge

   
你会在我们之前的文章中提到它,是作为一个较好的程序员专业示例代码站点。是它值得加入书签的高品质使得它位于任何开源项目列表的榜首。它是世界上最大的开源软件开发站点,强悍的数字——两百万注册用户和23万软件项目是最好的证明。

   
对于开发者来说,这里就是他们的麦加圣地,有着覆盖主机资源、软件支持(跟踪工具、论坛、邮件列表等)、发布工具等的大量工具,最后还有一个可以依赖的大社区寻求帮助。

   
作为下载者,你可以按照软件分类目录进行浏览,或者使用最受欢迎或者最活跃的标签。

Codeplex

    Codeplex
是微软的开源项目主机站点。这里大多专注于.NET相关开发的项目,同时这里也管理着一些不附带开源协议的项目。Codeplex
允许在一个项目中共享开发。

   
项目支持由一个专有的 Codeplex 源代码控制软件提供,另有 wiki 和讨论版。到2010年1月,网站管理着大约 13,000
项目。

Google Code

    Google
Code 是 Google 众多产品 API 的收藏库,诸如 Google Maps、Google
Earth、AdSense、Adwords、Google Apps 和 YouTube 等。目前这个站点管理着大约 250,000
开源项目。

   
你可以下载源代码和安装包。Google Code 有着独特的特点,就像是大学生的辅导教师程序(Google 暑期编程大赛) ,并且在
Google Code 大学学生们能够学习到科技的新发展。

Freshmeat

   
用他们自己的话说,Freshmeat 拥有网络上最大的 UNIX 和跨平台软件、主题和相关‘抢眼产品’以及手持设备软件索引目录。Mac
用户可以找到大约 3,600+ 他们的系统相关项目。用户可以浏览带有良好标签的项目,来追踪 Linux 和 UNIX
系统的新进展。关于新软件发展的文章保证用户了解内情。Freshmeat 由Geeknet 所有,他们的产品线上还有
Sourceforge.net。

Open Source Living

    OS Living
收集覆盖所有主流操作系统的开源软件。这个网站有三个板块——档案、社区和信息源。档案部分是由开源开发者提供的开源软件的可检索目录;社区板块是开源爱好者们交流思想的论坛;信息源板块相当于一个博客,给读者带来新闻、观点和开源世界的更新信息。

Ohloh

    Geeknet
貌似向开元这块蛋糕伸出了不少手指,这也是他们系列产品中另一个社区模式的站点,最主要的不同是 Ohloh
没有管理任何开源项目,而更像是一个他们开发的开源社区和软件的公共目录。

    Ohloh
也有一些工具可以标出开源世界的趋势,你可以对项目进行比较以估量项目拥有的活跃量。例如,你可以看到哪种语言在开源开发中是最受欢迎的。本网站也像一个社会化网站,你可以跟随感兴趣项目的开发者。

Tigris.org

   
该站的标语写着——开源软件工程工具。它上面有一些专注的分类目录,大部分都是围绕着软件开发而设。这些软件对一般用户也许没有多少用处,不过计算机类的学生可以在相关分类找到许多合适的工具和可复用的代码。

The Free Software Directory

   
自由软件目录(The Free Software Directory )是自由软件协会(FSF)和 UNESCO
下属的项目。它是一个运行在自由操作系统(GNU 和 Linux)上的自由软件的分类目录索引。FSD
倡导使用自由软件,并通过努力寻求对抗限制政策,比如数字版权管理(DRM)。

   
俗话说,天下没有免费的午餐。大量可以获得的免费和开源软件让人欣慰的看到事实并不总是这样。想象一个没有开源的世界,将是多么狭隘的存在啊。

 

备注:原文地址:8 Websites to Check Out The Buzz on Open Source
Software

from 互联网旁观者: http://blog.sina.com.cn/s/blog_72995dcc0100xuhq.html

Written by cwyalpha

十月 31, 2011 at 11:38 上午

发表在 Uncategorized