基于《Web Intelligence and Big Data》的自我梳理 一、二

来源:互联网 发布:mindmanager mac破解版 编辑:程序博客网 时间:2024/06/12 18:37

课程里总共分为6个模块:LOOK, LISTEN, LOAD, LEARN, CONECT, PREDICT。不过我这边只总结前5个。


一、LOOK(搜索)

首先,大家对搜索都不陌生。搜索引擎为每个文档建立反转索引。但由于文档数太多,光靠关键字匹配起不到信息过滤的作用。可以另外引入“重要性”的概念,即pagerank所要解决的问题:它使用随机游走模型,从一个点开始,计算所有网页被访问的概率。可以证明这个概率矩阵是可以收敛的。然而对于相互之间没有链接的数据,pagerank就无法应用了。在这种情况下,我们如何找到相关的item呢?

1、找出同属于一个主题的。文本挖掘里有LDA(latent dirichlet allocation)。它假设一篇文章都是由不同的topic混合而成的,而且对于一个corpus里的每一篇article,都进行一次从dirichlet distribution的采样。

2、更或者是间接联系。比如推荐问题。推荐问题中,一般给出用户的行为,最典型的如评分,然后让你推断出用户对于其他物体的喜好。对于“用户行为”这类抽象的特征,我们通常需要间接地构造用户的特征向量。


其次,对于传统基于sql查询的数据库来说,它无法满足搜索的需要:一条简单的搜索,就可能会涉及到很多表的join。NoSQL就是因此发展起来的。其中最早的有Google的BigTable(更具体的,会在“三”中提到)。


最后,除了文本,我们如何对一整个对象进行搜索?比如,图片,音乐这样的多媒体数据。讲者提到了Locality Sensitive Hashing对于指纹识别的应用:它将一个object表示成由多个哈希值组成的向量。虽然不同,但容易联想到Deep Learning里的autocoder:它以非监督的方式从图片中提取稀疏的特征。然而, 他们本质上都是将高维物体降维。


二、LISTEN(筛选)

这部分我把它理解为特征选择(feature selection)。讲者从mutual information的角度入手,这也是很直观的:我们可以剔除信息含量很小的特征。特征选择很重要,因为无关的特征会引入noise。然而直接为每一个feature计算mutual information的代价太大。其他典型的选择方法有:forward selection 和 backward selection, 即一个个地向特征集中加入特征,或一个个地从中删除,然后找出给出最好performance的特征子集。同样的,这种做法代价也很大。目前,我使用过用random forest进行特征选择,效果和效率都不错。有意思的是,随机森林本身就是根据entropy熵(表示不确定性,mutual information的反面)进行分裂的。最后,lasso(跟ridge regression很像,也就是加上regulation的line regression)也能完全得去掉某个特征值,即使一些feature对应的参数值完全降为0。

除了完全去掉某些feature的激进做法,我们可以使用为feature加权的方式达到类似的效果。文本搜索中,最常用的是tf-idf(term frequency-inverse document frequency):对于常见的word,它的idf值相对要小。其实机器学习中的regulation也可以看成一种加权。为了防止一个算法过拟合,加入regulation项后,最终得到的参数中有些会很小。相应的,他们对最终结果的影响力也相对要小。


最后,只用出现的单词来表示一个文档是不够的。虽然基于词与词之间是独立的假设,naive bayes classifier已经做得足够好了。但是使用n-gram能进一步提高classifier的性能。 顺带一提,在做kaggle上的一个比赛时,发现使用stemming 和 lemmaztion,分类器的性能反而会下降。我的理解是:当数据足够多时,保持问题的高VC维度,创建足够复杂的模型是个简单又不错的方法。




0 0
原创粉丝点击