摘要: 1. 谱聚类 给你博客园上若干个博客,让你将它们分成K类,你会怎样做?想必有很多方法,本文要介绍的是其中的一种——谱聚类。 聚类的直观解释是根据样本间相似度,将它们分成不同组。谱聚类的思想是将样本看作顶点,样本间的相似度看作带权的边,从而将聚类问题转为图分割问题:找到一种图分割的方法使得连接不同组的边的权重尽可能低(这意味着组间相似度要尽可能低),组内的边的权重尽可能高(这意味着组内相似度要尽可能高)。将上面的例子代入就是将每一个博客当作图上的一个顶点,然后根据相似度将这些顶点连起来,最后进行分割。分割后还连在一起的顶点就是同一类了。更具体的例子如下图所示:在上图中,一共有6个顶点(博客),顶 阅读全文
posted @ 2012-06-21 11:04 风中之炎 阅读(51570) 评论(4) 推荐(9) 编辑
摘要: 1. SVD简介假如要预测Zero君对一部电影M的评分,而手上只有Zero君对若干部电影的评分和风炎君对若干部电影的评分(包含M的评分)。那么能预测出Zero君对M的评分吗?答案显然是能。最简单的方法就是直接将预测分定为平均分。不过这时的准确度就难说了。本文将介绍一种比这个最简单的方法要准上许多,并且也不算复杂的算法。 SVD(Singular Value Decomposition)的想法是根据已有的评分情况,分析出评分者对各个因子的喜好程度以及电影包含各个因子的程度,最后再反过来根据分析结果预测评分。电影中的因子可以理解成这些东西:电影的搞笑程度,电影的爱情爱得死去活来的程度,电影的恐怖程 阅读全文
posted @ 2012-05-06 20:49 风中之炎 阅读(51037) 评论(36) 推荐(18) 编辑
摘要: 刚进博客园就在《一道面试附加题的另类求解》看到一道有趣的题,正好,偶对这题也有一些想法,因此写来分享下。题目如下:先来看第一个条件,不可用除法。要满足这个条件倒是很简单:令forward[i] = a[0] * a[1] *... * a[i]; backward[i] = a[i] * a[i+1] *...* a[N];那么b[i] = forward[i-1] * backward[i+1];在此基础上,我们再来看一下第2个条件,时间复杂度为0(N),空间复杂度为O(1)。先将forward和backward数组的值算出,然后才算b数组的值虽然可以满足时间的要求,但空间要求却满足不了。因 阅读全文
posted @ 2012-04-08 17:04 风中之炎 阅读(1822) 评论(5) 推荐(2) 编辑
摘要: 1. 动机 关注漫画的人肯定会发现漫画的更新时间差异非常大:有的一个星期更新一集,有的一个月更新一集,有的一季度更新一集。如果关注的是日本漫画,并且不会日文,那么更新后的漫画还要等待汉化组翻译成中文才能看。这一等,少则几小时,多则几个星期。 等得多了,就会产生这样一种想法:如果漫画更新后能通知我就好了。有的漫画网站抓住了这种想法,增加了关注的漫画更新后就发邮件通知的功能。但是,对于不经常查看邮箱的人来说,这种功能并没有多大帮助。于是,就有了进一步的想法:如果关注的漫画更新后,就立刻下载到我的电脑上,并且弹出提示框就好了。根据这个想法形成的工具正是tracker。因而它的核心功能就是追踪漫画—— 阅读全文
posted @ 2012-03-15 22:15 风中之炎 阅读(2272) 评论(5) 推荐(2) 编辑
摘要: 1. larbin简介(百度百科) larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人Sébastien Ailleret独立开发,用c++语言实现。larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源。 Larbin只是一个爬虫,也就是说larbin只抓取网页,至于如何parse的事情则由用户自己完成。另外,如何存储到数据库以及建立索引的事情 larbin也不提供。 latbin最初的设计也是依据设计简单但是高度可配置性的原则,因此我们可以看到,一个简单的larbin的爬虫可以每天获取500万的网页,实在是非常高效。 利用larbin,我们 阅读全文
posted @ 2012-02-04 23:37 风中之炎 阅读(10958) 评论(6) 推荐(8) 编辑
摘要: 欣赏完《编程之美》里面的巧妙解法后,我们不妨来思考下作者是怎样想到这些解法的。因为比起理解怎么做,弄清楚为什么那样想更有趣,不是吗?作者提出一个简单的解法后,总能找出一个优化方法。我认为其中的关键是联想。只要能从中联想到正确的知识,优化方法也就得到了,不是吗? 联想到正确的知识需要经验(知识)和方法。经验很重要,但方法也同样重要。以下是一些有助于联想的方法。抽象 抽象就是从问题中提取有用的,本质的特征,然后将问题用一个简洁但包含同样信息的模型表示出来。复杂的问题经抽象后,可能会变成一个简单的问题,也可能会变成一个曾经遇到的问题,当然也可能仍然是复杂的问题。不管抽象后得到的结果是哪一种,看着抽象 阅读全文
posted @ 2012-01-14 16:10 风中之炎 阅读(2021) 评论(2) 推荐(2) 编辑
摘要: 1. 五笔反查工具 也许你会说,反查什么的,直接一个MAP容器就搞定了,有什么好说的。的确,最简单的就是这样。但即使是这样,还要准备字,五笔码,字根图,以及它们的对应关系。而这些在网上是没有现成的,也就是说要自己准备。我准备的方法是写个小爬虫,到一个五笔反查网站上将这些东西一并弄下来(具体可参考上一篇文章)。准备好最重要的部分后,如果还要弄得像样一点,就要再花一番功夫。所以说,还是有点东西写的。 先放几张图,再来分享做这东西时遇到的难点。2. 字根图 一共有6763张字根图,如果直接发布,显然不美观。因此有必要打包下,再发布。可惜的是,在网上没找到合适的打包工具(如果知道,还请告诉偶一下> 阅读全文
posted @ 2011-12-25 09:32 风中之炎 阅读(3039) 评论(9) 推荐(4) 编辑
摘要: 1. 目的 用五笔时,如果碰到不会拆的字,只好换回拼音。但这样做治标不治本,于是到网上找五笔反查工具。最后发现一个不错的网站——不仅有每个字对应的五笔码,还有其字根图。可惜的是,这是一个网站。换句说,就是每次查的时候都要上网。很自然的,会想到将这个网站上的五笔码以及对应的字根图保存到本地上,再写个查询程序做成本地版的>_<2. 准备工作——网页特点分析 网站(http://www.wb86.com/wbcx)提供了两种查询方式:一种是输入要查询的字;另外一种是一页接着一页地查看。由于懒得找字库,就选择了第二种方式。在此方式下,第一页的URL是http://www.wb86.com/ 阅读全文
posted @ 2011-11-29 11:43 风中之炎 阅读(6671) 评论(1) 推荐(0) 编辑
摘要: 1. 前言这系列的文章主要讲述2006年评出的数据挖掘10大算法(见图1)。文章的重点将偏向于算法的来源以及算法的主要思想,不涉及具体的实现。如果发现文中有错,希望各位指出来,一起讨论。 图1 来自IDMer的文章 在这些算法中,最引人注目的自然是Google的核心技术之一——PageRank。因此本系列就先来探索PageRank的诞生过程。2. 核心思想 常言道,看一个人怎样,看他有什么朋友就知道了。也就是说,一个人有着越多牛X朋友的人,他是牛X的概率就越大。将这个知识迁移到网页上就是“被越多优质的网页所指的网页,它是优质的概率就越大”。PageRank的核心思想就是上述简单却有效的观点。. 阅读全文
posted @ 2011-11-12 16:13 风中之炎 阅读(66441) 评论(12) 推荐(17) 编辑
摘要: 近段时间在做PSO算法的优化,在测试性能时要使用CEC05的数据集。但这个数据集提供的测试函数接口十分蛋疼:以条件编译来区分一大堆同名同参数的函数。就像这样:int a;#define f1//#define f2#ifdef f1a = XX;double function()#endif#ifdef f2a = YY;double function()#endif 在上面的例子中,如果要运行F2函数,就要把#define f1注释掉,并取消#define f2的注释,然后编译运行。但在CEC05中,这样的函数共有25个。也就是说,进行一轮完整的测试就要手动这个过程25次。况且,肯定不止进行 阅读全文
posted @ 2011-09-26 21:09 风中之炎 阅读(1597) 评论(2) 推荐(0) 编辑