阶段总结

距离上次总结已经过去1个月了

截至目前,有UIC的17000刀的TA offer(保4年,只要科研好),跟的是Bing Liu,但是可以换导师。GMU 1个2W刀的offer(暂保一年)和UCR的一个2年offer,第一年保summer funding,正式函没到,可能是RA(这是不是意味着summer不能回家。。。)。另有RPI rej一枚,RPI这是个傲娇的学校。

Alberta的CS MS Offer发了好多了,哭。。。自己没收到,略恐慌,果真得硬着头皮套辞了。

这个寒假,效率很低,看的论文不超过五篇,机器学习那本书只看了4章,Stanford 机器学习也只看了5课。概率论和随机过程也是从开学了才开始看的。等offer的恐慌确实难以排解,然而,终究爬着也要往前去。用下面这两段话激励下自己:

虽然满腹怨言 也知道自己的渺小
明明知道这些
却还挣扎着想要达到与自己身份不符的高度
不是虚名,不是外在,而是自己的追求
自己的欲望超越了自己的界限
正所谓荣耀在远方

Most people wanna succeed not so much as they think. They even wanna sleep more than secceed. They even wanna be cool than succeed. Do you wanna succeed just like wanna breathe?

扯回来,这个学期所要面对的就是自己拖了好久的毕设了,邹老师给了一个很好的题目,自己也觉得很有意思,要好好做,不要辜负自己的青春和时间了。希望申请会有个好结果。

阶段小结

目前的结果是一个UIC Offer,一个Buffalo Interview。

这个Interview正常应该不会转为Offer,面试的过程很纠结,ML那边了解的非常皮毛,同时这位做CV和ML的Prof也想收个对他情有独钟一些的,这个我也不符合。面试的时候都基本按实际情况说了,除了buffalo在我申请学校的位置问题,但是那个其实也是更多跟我不申保底校有关系。

一直都下着决心要自学Machine Learning和Python,结果拖啊拖,拖到现在。事到如今也不好再多说些什么。把握好今后的日子。

这一年里发生太多形形色色的事情,我也一直处于心理的低潮期,狂躁症比较严重,人更是懒得可以。现在都不好意思说面试的那两个问题不了解是多么的愚蠢和丢人,倏忽间,自己变成了自己最不愿成为的那种学分绩高,学术不行的人。好的方面可能也就是遇事淡定多了。

从昨天起开始制定计划行事了,同时也多天保证11:00点左右睡觉。争取过上晚10:00早6:00的日子。试了试执行自己的计划,发现一天完成过多项目的任务,效果不好,还是精简一下吧。否则刚进入状态就要换下一个任务了。明天的任务就是看70页ML书和120页Python。

Ok,that's all.

The h Index for Computer Science

Source: http://www.cs.ucla.edu/~palsberg/h-number.html

In this paperJ. E. Hirsch, Dept of Physics, UCSD, proposes "the index h, defined as the number of papers with citation number higher or equal to h, as a useful index to characterize the scientific output of a researcher."

Here is a partial list of computer science researchers who each has an h index of 40 or higher according to Google Scholar. The list has more than 500 entries and includes 1 Nobel Laureate, 27 Turing Award winners, 65 members of the National Academy of Engineering, 7 members of the National Academy of Sciences, and 220 ACM Fellows. Send comments, corrections, and new entries to Jens Palsberg (UCLA). I made the most recent update on Jan 21, 2012.

I do maintain the list: mostly, I add people and update numbers upon request and when I happen to notice a high h index. Most of the numbers on this page are the results of counting efforts by the listed people themselves. I have computed some of the numbers myself by comparing output from Google Scholar with other listings of research papers, such as from personal webpages or DBLP. Whenever I notice that a person listed on this page has an entry on Google Scholar Citations, I create a link to that entry.
Read more »

pFP-tree, Proximity Pattern Mining

论文源: Towards Proximity Pattern Mining in Large Graphs

Towards Proximity Pattern Mining in Large Graphs

 

实际上,proximity pattern是itemset和graph之间的一个折衷。再求frequent itemset的时候,各个transaction之间是没有什么structure上的联系的。而frequent subgraph的定义不够elastic,这样可能会忽略一些可能有用的pattern,同时也使mining过程变得困难,例如子图同构测试就是个瓶颈。proximity pattern是这两者之间的一个新的pattern种类。它是attributed graph 上的一种pattern,大概可以理解这种图是transaction之间有了边的一种图,每个transaction是图中的node,每个node中有很多items,即attributes。

Read more »

FP-Tree结构以及FP-growth mining笔记

论文源:

Mining Frequent Patterns without Candidate Generation: A Frequent-Pattern Tree Approach∗

FP-Tree是一个frequent itemset mining的算法。首先来说一下frequent itemset的相关内容。

Frequent itemset就是说在一个transaction数据库中(每个transaction由若干个item组成),我们要找出现频率大于某个人们所期望的值e的itemset。

 

通常的方法有Apriori这类的,它需要按一定规律去产生candidate itemset,然后挨个检验看是不是frequent的。这种方法显然比较耗时,虽然在这个过程中那个“一定规律”起到了比较强的搜索空间的剪枝作用。同时重复性扫描数据库和进行pattern matching的工作也是十分耗时的。这里要说一下这个“一定规律”,他一般都是基于以下这个observation:

 

Itemset A是itemset B的子集,那么如果A是infrequent的,那么B也是infrequent的,这个很显然,用反证法非常容易就能证明。利用这一点就可以砍掉很多itemset了。

 

然而,重新分析我们所面临的问题,我们不难发现,我们所关心的信息只有frequency,那么有没有什么方法可以对数据库进行一定的预处理,忽略一些无关信息,利用某种数据结构来对整个数据库中的数据重新存储,以达到减少存储空间,同时还能便于mining frequent itemset呢?

 

一些基本的想法可以很轻松的想到:

  1. 我们可以删除/忽视一些items,这个做法的依据就是上面的那个observation,如果一个单一的item的frequency都不足,那么任何包含它的itemset的frequency都不可能满足e了。因此我们可以先扫描一次数据库,来确定哪些item是frequent的。
  2. 很多transaction之间是包含有相同的itemset的,这共有部分能不能合并在一起存起来,然后加上一个count之类的属性来统计它的出现频率呢?

 

基于以上,可以发现,一个前缀树prefix-tree是个好选择,如果我们将每个transaction中的items按照之前扫描数据库时获得的item频降序的顺序用来代表这个transaction,那么就可以用prefix-tree进行存储了。过程如下:

 

  1. 首先构造一个Null的root,它显然是所有可能的string的前缀
  2. 扫描第一个transaction,按照item频排序,获得了一个item string,调用insert(string, T)将这个string插入树T中,接着第二个transaction,如此知道所有transaction都被插入树中。

关于insert(string, T),这是一个递归函数

为了便于表述,我们将string定义为这个形式(p|P),p是string的首个item,P是剩余的items的string,我们将p和T的children做比较,如果

(1)     存在T.child.itemname= p.itemname,给T.child.count加一,那么调用insert(P, T.child)

(2)     否则,我们给T新建一个child,并让此child.itemname = p,child.count=1, 然后调用insert(P, T.child)

直到string为空。

 

这样就将所有数据及频率存储在这个prefix-tree中了。

 

下面将要讲述如何进行mining。

实际上在上面的建树过程中,还有一个小细节没有做,那就是在新生成一个node的时候,都要将以前的和这个node代表相同item的nodes链接起来,也就是,树中的代表相同item的nodes会形成一个链表,这些链表的表头存在一起,并且是按照这个表所链接的item的频率的降序顺序排列的。

 

这么做的原因是为了mine的工作。

 

下面简单叙述mine的过程:

假定threshold是3,从链表表头的表的最后一位的那个item开始,比如这个item是p,此时实际上我们要找的是以p为后缀的frequent pattern。显p自身肯定就是一个frequent pattern,否则它不会被留到现在。然后我们找寻树中从root到各个node.itemname=p的path,对于这个path我们复制下来重新处理一下。因为现在要找的是以p作为suffix的frequent pattern,所以之前的nodes的count要进行修正,对于任意获得的path上的node,他的count都应该和这个path上的代表p的node的count一致。这个很显然,比如一条从root到item为p的node的path上有a,它的count是4,而这条path上代表p的node.count =2,那么显然a只同时和p出现了2次。。。举例来说,有如下3条path{a5,b5,d3,p3} {c3,b2,p1} {d4,b2,p2},修改后的path应为{ a3,b3,d3 } {c1,b1}和{d2,b2},此时我们将这3个path可以视为三个transaction,然后构建一个FP-subtree出来,然后重复上述工作进行mine。在mine这棵FP子树的时候,c的frequency不满足threshold会被删掉,最后frequency最小的是a,frequency是3,显然a是一个合格的pattern,而实际上,我们获得的总体的那个frequenct pattern,是{ap},因为这个是以p为pattern suffix下的subtree。如此递归下去即可。

然后接着从链表表头的表的倒数第二个item开始mine,比如这个item是 a,此时要挖掘的就是以a为pattern suffix的pattern,此时p显然也就不用考虑了,因为任何一条树中的path,其中点的排列顺序都是一致的,是按照这个item的总频率降序排列的,对于a的挖掘,其过程和前面一样。

 

有一种特殊的FP-tree形态是可以简化mine的过程的,如图:

如图(a)所示,这个tree的从root到c:7是一条简单的单链,这样就可以更加轻松地处理了,处理方式是将这个tree分成两棵树,第一棵树如(b)所示,由于是单链,我们只需要枚举abc的排列组合即可,组合出的pattern的frequency显然等于pattern中的item的最小frequency。我们称这部分获得的frequent pattern的集合为A。另一部分如图(c)所示,我们给它建了一个伪root,然后正常进行挖掘,得到的frequent pattern为集合B。此时还有一部分frequent pattern还没有考虑,这部分可以用A X B来获得,也是很显然的,frequency等于X积时较小的frequency部分的frequency。