Categories
事儿关经济 读书有感

看起来越来越有意思(bù kào pǔ)的研究

本来想说说一月份这一期AER的,结果看到American Economic Journal: Applied Economics就忍不住先笑了。看完这一期AEJ的摘要再去看了一宿神探夏洛克第三季,瞬间感觉欢乐的好满足...

AER一般还是有一些理论文章的,所以有的时候感觉还是,有点艰涩的无聊着,毕竟现在的理论研究都是marginal contribution,不是那个圈子里一直浸淫着的其实不是那么关心他们又搞出来什么小突破。AE专刊则全是各种各样稀奇古怪的应用研究,尤其以田野实验居多...所以看起来欢乐比较多。

大家可以围观一下这些发现(这期是health专刊么?)

  • Dynamic Implications of Subjective Expectations: Evidence from Adult Smokers: 主观上,人们觉得年龄啦,种族啦,父母寿命啦这些对个人健康的影响更大,而不是抽烟与否。有趣的是,事实上抽烟的人比理性预期模型预测的更为关心他们自己的健康...(好吧我没细看这是个什么样的理性预期模型,总之就是,其实抽烟的人自己也知道不好啦)。
  • Influenza Vaccination Campaigns: Is an Ounce of Prevention Worth a Pound of Cure?:在安大略省的研究发现,如果我们扩大疫苗的接种范围,整个人群会有额外的收益,尤其是老年人,虽然边际收益在递减。哎,这不是,验证了一个人所共知的事实么...政府有钱的话还是集体接种吧(主要是公认的安全的传染病疫苗,不会导致意外疾病的那些)。
  • Small Steps for Workers, a Giant Leap for Productivity:在一个小型的钢铁厂中观察发现,虽然在过去的12年中生产条件没有任何改良、资本投入没有增加,但是产量却实现了翻倍。研究者认为这样的生产力飞跃主要是来源于劳动者劳动效率的进步,比如减少停工时间、加快生产速度和周期这些。呃,这就是传说中的,积小流成江海?
  • The Great Equalizer: Health Care Access and Infant Mortality in Thailand:这个是泰国2001年搞得一个30泰铢的医疗保险补贴项目,项目显然是成功的,穷人的健康状况得到了极大改善、婴儿死亡率下降(衡量公共健康水平的主要指标)。好吧,又一个不出意料之外的结果,实验设计也是相对简单的test-control。
  • Child Gender and Parental Investments in India: Are Boys and Girls Treated Differently?: 通过一种新的实验设计方法,在保证男女婴儿出生率一样的情况下,研究者发现男孩还是受到了家庭的优待,且相比于其他的发展中国家而言,印度的男孩身高体重都比女孩更高。人们以前的一个怀疑是,女孩在大的家庭中比例更高,从而平均来看男女孩受到的家庭关爱可能差不多。针对这个疑虑,作者们所谓的新的方法呢,就是他们只关注家庭中年幼的孩子,假设年幼的孩子出生的时候男女概率还是一样的。这也就是说,不存在针对女婴的堕胎和弃婴行为。显然,依旧不适用于天朝...好失望。
  • Parental Education and Offspring Outcomes: Evidence from the Swedish Compulsory School Reform: 瑞典的义务教育改革显示,母亲的受教育程度对(男)孩子的健康和技能水平有正的影响,而父亲则没有。作者指出,这种现象的原因之一可能是,当年改革影响到的父亲们没有因教育的增加而获得劳动市场相应的回报增加。所以北欧的男性还是那么可怜么,完全取决于女性的进步程度啊。

看完的感觉就是,这么多年这些研究的水平没感觉有明显的进步啊。无论是研究方法还是想法,都缓慢的在那里盘旋着。

话说这期AER倒是有篇paper蛮有意思的,Immigration and the Diffusion of Technology: The Huguenot Diaspora in Prussia,讲的是胡格诺派教徒的移民带来的纺织业进步。结论其实平淡无奇,主要是他们用的数据和IV。数据是1700年移民名单和1802年当地企业的产入产出数据。IV方面,

We instrument the share of Huguenots in a town’s population in Equation 2 with the population losses. Exogeneity comes from the fact that the largest part of population losses did not emerge due to the act of war itself but through the occurrence of the Black Death in the 1620s and 1630s.

也就是说,十七世纪二三十年代的黑死病,给了这些人一个用外生冲击来构造工具变量的机会。哈哈,大家是多么费尽力气的寻找外生冲击啊...

Categories
事儿关经济

说说我所认识的“最小二乘君”(配图版)

由于近些年常常跟搞数据分析的人混迹在一起,所以很多时候说话方式有点偏向机器学习了...顺便心里暗暗的忧伤一下当年的心路历程(不知道我的基本轨迹的可以先去看看CV..)。这里聊作一二记录,讲讲我所认识的“最小二乘法”(下称最小二乘君)。那个,语言稍显浮夸,大家随便看看哈,别较真。

<锲子>

是写小说的时候大家都兴先来个“锲子”么。7年前,我还是一个年幼无知的大学新生儿。当时我们系开了两门传说中各挂50%的数学课:微积分和线性代数。同学们大都学的死去活来,我也学的死去活来,一度开始怀疑自己的智商...其实现在想想,我也不知道当年为什么学的那么痛苦,现在随手用个微积分貌似都很水到渠成的样子。嗯,可能是老师授课方式不够好吧。那年直到期末考试,我也不知道我学了一年的微积分有什么用处,除了背下来少数的几个证明推导和学会了一堆算微积分的“技巧”之外。

从前有棵树,叫高树,树上挂了很多人……挂了很多人的高树...

线性代数也是一样的。当年翻看某本计算机类入门书(可能是算法与数据结构),前言一开始就是一行金字,大意是“矩阵论是当代计算机基础×××”。然后翻翻后面的果然看不懂,于是默默的去图书馆把这本书还了,然后借了一本黄皮的泛着金光《矩阵论》回来。同样悲催的,啥也没看懂,然后默默的放弃了我在这个领域深修的打算,乖乖的回去上必修课了。(所以我当年学习高级计算机知识的一腔热情就被这么无情的浇灭了哇!果断考完当时的计算机等级考试——C语言和数据库就扔掉编程了...)

线性代数一直学到最后,我还是以为这东西就是来替代“高斯消元法”解联立方程式的...什么特征根啊,奇异值分解啊,格拉姆-施密特正交化啊,直到最后我也没明白是干嘛用的,除了会算几个数之外...没想到,那日一别,重逢已是花落花开好几轮之后...当真是良辰美景虚设!只是万万没有想到,他乡遇旧友,而这厮竟和日后的最小二乘君紧密相连,难分难舍。

138112_091242423086_2良辰美景虚设

Categories
日常应用 网络新发现

网络图sigma.js框架初探

前两天鼓捣新网站的时候挖掘的利器,很酷的JS框架。2013-12-09 14_02_29-sigma.js _ a lightweight JavaScript graph drawing library之所以我对他这么欢喜,主要是这货是支持Gephi的...然后还实现了interactive graph...真的是夫复何求呀!Gephi有个插件Sigmajs Exporter,安一下即可。

这里主要记录一下用这个框架初期遇到的一些困难...感觉本身的tutorial写的不是特别好...浪费了我一些时间google什么的。

Hello World

Sigma.js首页有个特别简单的hello world例子,但实际测试并没有那么容易搞定。

Here is the minimal code to create an instance:

var sigRoot = document.getElementById('sig');
var sigInst = sigma.init(sigRoot);
sigInst.addNode('hello',{
  label: 'Hello',
  color: '#ff0000'
}).addNode('world',{
  label: 'World !',
  color: '#00ff00'
}).addEdge('hello_world','hello','world').draw();

主要的问题是完全不知道这东西应该怎么搞到一个静态的HTML网页中。Google了一下,终于找到一个本地可以成功run的例子

Categories
网络新发现

学科交叉

所以各个学科之间就是这么相互交叉的么?...

2013-11-26 11_01_24-RosvallBergstromPNAS2008Full.pdf - Adobe Reader 2013-11-26 11_01_05-RosvallBergstromPNAS2008Full.pdf - Adobe Reader

source:2008 Maps of information flow reveal community structure in complex networks Martin Rosvall and Carl T. Bergstrom

Categories
读书有感

社会网络中的社群识别(Community Discovery)概述

最近一直在看Community Discovery这一块儿的论文,深深的感觉现在就是一个矿工,不断的想方设法挖出来更有价值的信息。而且不是一个点一个点的突破,而是需要寻找出一种脉络,串联起所有的信息来。头痛。

最近的情况是,有一个well-connected的网络,然后我想把它稀疏化、打散成一个个独立的community的感觉。这样就可以分别识别每个community的特征什么的。所以厚着脸皮找施老师讨了几篇papers。而主要的问题是,数据太大了...11M nodes, 20 M edges,还是directed weighted network...我直接放弃了把这些数据从SQL Based data source中挪出来的想法,还是先努力的减少一些edges吧。

先罗列几个相关的术语:community discovery, graph partitioning, network clustering, network sparsification, modularity。了解一个领域最好的方法大概就是去读literature review了,所以乖乖的要了一篇:

Srinivasan Parthasarathy, Yiye Ruan and Venu Satuluri. "Community Discovery in Social Networks: Applications, Methods and Emerging Trends", in Social Network Data Analytics 2011. (NS, DM)

最契合我的想法的就是cut类方法——remove some edges to disconnect the network, then (drop isolated nodes with degree = 1 (could be added back later as auxiliaries to each community)。

那么就先从这一类方法开始说。比较经典的算法呢,是希望砍掉一条边以后,community内部的凝聚力不变,外部连接变差。基本上常用的就是Ncut(normalized)和Conductance、KL object、Modularity这些指标。比如KL算法,就是从二分图开始,不断迭代的去寻找如果交换某两个点所属community就可以减少edge cut的边。可惜的是,这些最优化问题都是NP-hard....随着数据的增大算起来会异常吃力。KL算法本身迭代也是相当考验计算能力的(贪心搜寻)。

然后就是凝聚(或者切分)类算法。凝聚就是先各自为家,然后附近的相互结合在一起,直到理想数量的社群结成;切分则是先从一个整体开始,然后每一步都切成两份这样。这些都算是层次聚类,最后可以给出一个长得像二分树的系统树图。这一类算法有Girvan和Newman切分法:每一步先计算每条边的betweeness score,然后把得分最高的边砍掉,然后再重复这个步骤。嗯,问题依旧是这样的迭代很耗时间。

频谱类算法(spectral algorithms)。听这个名字一股经典风就袭面而来。基本上这类方法就是仰仗特征向量(eigenvector),比如adjacency matrix的特征向量,然后top k特征向量就定义出来一个k维的特征空间,然后就可以用传统的比如k-means这样的方法来聚类了。说白了就是降维、降维。可惜这种方法依然算起来很消耗资源,光算那个特征向量就是O(kM(m))的复杂度...基本在大矩阵下就投降了。一个概率的方法就是Graclus算法,基本的直觉就是基于加权的normal cut measures再做加权核k-means便可以给出基于特征向量聚类一样的结果,而计算消耗相对少一些。

多层次图分割(Multi-level graph partitioning)。这个就是相比而言快速有效的方法了。基本的想法就是,先压缩原始图像到一个小的图像、分割这个图,然后再映射回原来的图。毕竟小图分割起来就要快的多嘛。这类的方法除了上面说到的Graclus,还有Metis(以KL object作为measurement),以及MLR-MCL。

马尔可夫聚类(Markov Clustering,MCL)。基本的想法就是,两点之间的信息传递是随机流(stochastic flow)。MCL对随机矩阵会做两个操作,扩张(expand)和膨胀(inflate)。前者就是简单的矩阵平方,后者则是用一个膨胀参数(非线性)来撑大彼此之间的差距,最后再重新normalize。这两个步骤交替进行。这样的话,原本community中紧密相连=的两个点则会更紧密的相连,而不同cluster之间的连接则被弱化。这样最后每个community之内的点都会流向某个attractor(吸引点),从而我们可以识别各个cluster。感觉这里有点收敛到一些不动点的意思。MCL的弱点也是计算消耗。矩阵乘法在开始边的权重没有弱化的时候是非常消耗时间的,此外MCL倾向于产生不平衡的群落,尤其是可能产生一堆很小的群落或者一个很大的群落。

MCL的改良主要是在引入惩罚项(regularized MCL)和加入多层次(multi-level regularized MCL),以减少不平衡的clusters和解决MCL难以scalable的问题。后者也简称为MLR-MCL,就是刚才多层次分割里面有提到的那个。

局部聚类(local graph clustering)。局部方法基本上就是从一个给定的顶点(seed)出发,寻找符合条件的群落,而并不关心整个graph的情形(除非所有的群落需要覆盖全图)。计算上就是利用随机游走(random walk),从一个群落的内部开始,一点点的向外扩张(有没有很像page rank的感觉?)。最早的Spielman and Teng就是这样的基于顶点随机游走的算法。后面Andersen and Lang改进了这类方法,可以从一堆seed sets出发而不是单单一个顶点。此外,Andersen还试图在随机游走之上加入re-start(即个性化的pagerank)。

再需要提及的就是在动态网络(dynamic network)之上的community discovery——不同于静态网络,动态网络是本身一直在变化的,正如我们一直在用的facebook、twitter这般。还有异质网络(heterogeneous network)和有向网络(directed network)。呃,这部分我就没细看了,貌似蛮复杂的样子...就是其中有一个Community-User-Topic(CUT)model看起来蛮有意思的,准备明天去找这篇paper读一下:

D. Zhou, E. Manavoglu, J. Li, C.L. Giles, and H. Zha. Probabilistic models for discovering e-communities. In WWW ’06: Proceedings of the 15th international conference onWorldWideWeb, page 182. ACM, 2006.

嗯,到总结了~前面一直在说的就是计算、计算、计算。

  • 可扩展的算法(scalable algorithms):这里主要是牵扯到分布式计算。multi-level类的算法是有分布式的潜力的,然后GPU和多核计算貌似也能对流算法(streaming algorithms)帮上忙。
  • 群落和其进化的可视化:可视化主要是可以帮我们更直观的理解动态网络的变化、提供分析的直觉、以及帮助验证分析结果。
  • 结合业务知识:这个也不仅仅是对这些群落识别算法啦,任何一个机器学习的算法都离不开基本的业务知识吧。
  • 排序和加总:基本上还是缺乏对于得到的群落之间的排序(打分)、加总的研究。

好了,到此为止~继续看其他paper去了。