数据挖掘-公司别名聚合(五)

前面说的关系链是社交网络最重要的核心数据,绝大多数的数据挖掘都是基于关系链数据来的。在社交网络中,我门每一个都是与外界有着千丝万缕关系的节点,根据六度分割理论,要联系上地球上任何一个人,从自身出发,最多只需要6跳。

比如在微博上,一个人是一个公司的蓝v的粉丝,那么他就有可能是这个公司的员工,如果这个人还同时关注了这个公司的几个高层的微博账号,那他是这个公司员工的可能性就更高了。又或者从一个某行业的公司的员工出发,计算以这个公司员工为中心的社交关系网,我们就可以将人按行业划分圈子。又或者从某一个领域的专家出发,我们又可能将人按照技能或者特长划分圈子,这样类似的挖掘手段多不胜数。

我这里对关系数据的使用比较简单,第一步还是跟之前ip、邮箱、地域使用的方法一样,将用户按照所填的公司分为不同的集合,接下来就不太一样了,本想直接计算比如集合A和B之间双向关注的对数,结果发现数据量太少,所以只能扩展一下,先获取到集合A中所有人的双向关注列表,再将所有与集合A中的人有双向关注关系的人组成一个更大的集合A',将集合B也按同样地方式扩展为B',然后再计算A'和B'这两个大集合之间双向关注的对数,这下数据量够了,而且很明显两个集合间双向关注的对数越多,集合A和集合B对应的公司名称属于同一个公司的可能性就越大。将集合A'和B'之间双向关注的对数记做p。

做完以上所有的计算以后,我就对所有的公司名称对建立的一个4维的向量,然后把最开始用的公司名称切词后计算的余弦相似度数据也给用上,记做q,这样就变成一个5维的向量,记做r(k,m,n,p,q)。

这里交代一下,我的公司名称是取自用户手动填写的,但是如果一个公司名称只有一个用户填写的话,上面计算出来的向量肯定大多数的维度都是0,不利于计算,这样的数据需要剪枝,所以我只计算所有填写人数超过5个的公司名称,其余全部丢弃,这样一来我手头一共有约40w公司名称。然后我是每两个公司名之间都要计算出一个向量,也是总共需要计算出40w*40w个向量,而向量的每一个特征值都不是简单地加减乘除出来的,比如p这个值最复杂,需要先取A和B两个集合中所有人的双向关注列表,再计算A'和B'互相之间双向关注的对数,总的来讲计算量相当庞大。

最囧的是,前面说过,那时候我还不会用hadoop,不会写mapreduce,这个模型的计算是用c++程序写出来的,用beanstalkd作为队列服务器,用了5个redis做了一个集群来存储数据,跑出所有的向量一共花了约两个星期,动用了6台服务器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值