twitter海量数据机器学习解决方案

标签: 数据挖掘 | 发表时间:2013-01-20 10:44 | 作者:bicloud
出处:http://blog.sina.com.cn/bicloud


 

技术关键点:hadoop, pig, stochastic gradient descent, online learning, ensembles, logistic regression

1 TWITTER’S ANALYTICS STACK

Twitter分析框架建立在hadoop集群之上,通过实时处理和批处理将数据写入到HDFS。

http://code.google.com/p/protobuf/

http://thrift.apache.org/

http://github.com/kevinweil/elephant-bird

twitter分析除了通过java写mapreduce代码实现以外,大部分是通过Pig来实现。

生产任务主要是通过Oink工作流管理系统进行调度。同时,Oink主要处理jobs之间的依赖管理。

2 Pig扩展

在twitter分析框架基础上,通过Pig扩展,使该平台具有机器学习处理能力。Twitter机器学习主要满足下面两个条件:

(1)     面对海量数据具有可伸缩性

(2)     机器学习工具可以集成到生产系统中

解决方案:

特征抽取通过UDF实现

单个学习器的内部循环封装在Pig Storage Function中

预测是根据学习训练的模型,结合UDF实现

目前有两种常用的机器学习包,Vowpal Wabbit is a fast online learner, c++实现,不好集成在twitter以jvm环境为基础的分析平台中。Mahout是java实现的机器学习包,可以将它的一些组件功能集成到Pig扩展中。Twitter开源的Elephant Bird package实现了Pig 绑定mahout中数据表示形式。

核心包

机器学习包分两部分:java核心包和轻量级Pig包装接口

它实现的功能在常用的机器学习包中均有实现,譬如Weka, Mallet,Mahout。该包中实现的分类器主要分为两种,批处理训练器接口train和在线学习器接口update。Java核心包中包含一些常用的分类器,譬如logistic regression,决策树等。

训练模型

Java中的特征向量,可以通过Pig中的map来表示

(label: int, features: map[])

另外一种表现形式是,training instances can be represented in SVMLight format

Our solution is to embed the learner inside a Pig storage function. Typically, the storage function receives output records, serializes them, and writes the resulting representation to disk.



学习器集成在Pig storage函数中,通过控制reducer数量调整模型数量。

Pig实现分类器,

training = load `training.txt' using SVMLightStorage() as (target: int, features: map[]);

store training into `model/' using FeaturesLRClassifierBuilder();

Pig storage function FeaturesLRClassifierBuilder中封装了logistic regression训练器。

Twitter机器学习算法分为两类:批处理和在线处理。

批处理学习器需要把所有数据加载到内存中,因此在训练模型之前,Pig storage 函数需要先将训练实例进行缓存处理。这里存在性能瓶颈,hadoop reduce任务分配有限的内存。在线学习器没有这样的限制,将实时的训练实例输入到学习器中,然后丢弃实例。Parameters for the model must t in memory, but in practice this is rarely a concern.

常用的数据操作,譬如在线学习模型依赖于数据实例输入的顺序,

training = foreach training generate label, features, RANDOM() as random;

training = order training by random parallel 1;

将数据集划分为训练集和测试集

data = foreach data generate target, features,RANDOM() as random;

split data into training if random <= 0.9, test if random > 0.9;

 

模型应用

通过Pig UDF部署模型

define Classify ClassifyWithLR(`model/');

data = load `test.txt' using SVMLightStorage() as (target: double, features: map[]);

data = foreach data generate target, Classify(features) as prediction;

ensemble模型,混合使用多种模型

define Classify ClassifyWithEnsemble(`model/', `classifier.LR', `vote');

3 SCALABLE MACHINE LEARNING

随机梯度下降

SGD是在线学习主要实现方式。这里以stochastic gradient descent (SGD) for logistic regression为例。梯度下降主要应用在batch learning中。

定义线性判别函数



 

Logistic 回归



 

规范化logistic 回归目标函数




 

 

 

Ensemble方法

通过Pig中的parallel关键字控制reduce数目,训练独立的模型。

 

4 情感分析应用

方法:logistic regression classifier learned using online stochastic gradient descent

Pig script for training binary sentiment polarity classifiers

status = load `/tables/statuses/$DATE' using TweetLoader() as (id: long, uid: long, text: chararray);

status = foreach status generate text, RANDOM() as random;

status = filter status by IdentifyLanguage(text) == `en';

-- 积极样本

positive = filter status by ContainsPositiveEmoticon(text) and not ContainsNegativeEmoticon(text) and length(text) > 20;

positive = foreach positive generate 1 as label, RemovePositiveEmoticons(text) as text, random;

positive = order positive by random; -- Randomize ordering of tweets.

positive = limit positive $N; -- Take N positive examples.

-- 消极样本

negative = filter status by ContainsNegativeEmoticon(text) and not ContainsPositiveEmoticon(text) and length(text) > 20;

negative = foreach negative generate -1 as label, RemoveNegativeEmoticons(text) as text, random;

negative = order negative by random; -- Randomize ordering of tweets

negative = limit negative $N; -- Take N negative examples

training = union positive, negative;

-- Randomize order of positive and negative examples

training = foreach training generate $0 as label, $1 as text, RANDOM() as random;

training = order training by random parallel $PARTITIONS;

training = foreach training generate label, text;

store training into `$OUTPUT' using TextLRClassifierBuilder();

其中,TextLRClassifierBuilder中封装了SGD实现的Logistic 回归模型

 

评价测试模型

define TextScoreLR TextScoreLR(`hdfs://path/model');

data = load `testdata' using PigStorage() as (label: int, tweet: chararray);

data = foreach data generate label, (TextScoreLR(tweet) > 0 ? 1 : -1) as prediction;

results = foreach data generate (label == prediction ? 1 : 0) as matching;

cnt = group results by matching;

cnt = foreach cnt generate group, COUNT(results);

-- Outputs number of incorrect and correct classification decisions

dump cnt;

 

 


  青春就应该这样绽放   游戏测试:三国时期谁是你最好的兄弟!!   你不得不信的星座秘密

相关 [twitter 数据 机器学习] 推荐:

twitter海量数据机器学习解决方案

- - 冰火岛
技术关键点:hadoop, pig, stochastic gradient descent, online learning, ensembles, logistic regression. Twitter分析框架建立在hadoop集群之上,通过实时处理和批处理将数据写入到HDFS. twitter分析除了通过java写mapreduce代码实现以外,大部分是通过Pig来实现.

Google 开源机器学习数据集可视化工具 Facets

- - 开源中国社区最新新闻
ML 数据集可以包含数亿个数据点,每个数据点由数百(甚至数千)的特征组成,几乎不可能以直观的方式了解整个数据集. 为帮助理解、分析和调试 ML 数据集,谷歌开源了 Facets,一款可视化工具. Facets 包含两个部分 —— Facets Overview 和 Facets Dive ,允许用户以不同的粒度查看其数据的整体图像.

机器学习中如何处理不平衡数据?

- - 机器之心
假设老板让你创建一个模型——基于可用的各种测量手段来预测产品是否有缺陷. 你使用自己喜欢的分类器在数据上进行训练后,准确率达到了 96.2%. 你的老板很惊讶,决定不再测试直接使用你的模型. 几个星期后,他进入你的办公室,拍桌子告诉你你的模型完全没用,一个有缺陷的产品都没发现. 经过一番调查,你发现尽管你们公司的产品中大约有 3.8%的存在缺陷,但你的模型却总是回答「没有缺陷」,也因此准确率达到 96.2%.

少数数据集支配着机器学习研究

- - 奇客Solidot–传递最新科技情报
UCLA 和 Google Research 的研究人员在预印本网站发表论文《 Reduced, Reused and Recycled: The Life of a Dataset in Machine Learning Research》(PDF), 指出机器学习研究领域被少数开源数据集支配的现状.

大数据/数据挖掘/推荐系统/机器学习相关资源

- - 互联网分析沙龙
Share my personal resources,本文贡献者为Zhe Yu. 各种书~各种ppt~更新中~ http://pan.baidu.com/s/1EaLnZ. 机器学习经典书籍小结 http://www.cnblogs.com/snake-hand/archive/2013/06/10/3131145.html.

Twitter收购数据分析公司BackType

- zou guangxian - 36氪
Twitter刚刚宣布已经收购BackType,一家帮助公司和品牌衡量社交媒体影响力的数据分析公司. BackType在博客上宣布这一消息时称团队将集中精力为Twitter发布商合作伙伴开发工具. 总部位于旧金山的BackType是一家由YC孵化的创业公司,自2008年以来已获得130万美元投资. 作为交易的一部分,BackType将停止BackTweets(帮助内容发布商了解推讯是如何转化为网站流量和销售额)的新用户注册.

Twitter数据挖掘及其可视化

- - 细语呢喃
前阵子有学弟学妹问我毕设做的啥,于是我决定记录一下去年毕设的内容. 主要是基于twitter的内容有:. Twitter数据挖掘平台的设计与实现. 毕设从16年3月开始做,做到5月初,开始写论文,当时写的论文一共有七章,写了一个礼拜,从早到晚- -| 共24834字. ,数据有的从15年11月左右开始抓的.

机器学习及大数据相关面试的职责和面试问题

- - IT瘾-bigdata
· 机器学习、大数据相关岗位的职责. 各个企业对这类岗位的命名可能有所不同,比如推荐算法/数据挖掘/自然语言处理/机器学习算法工程师,或简称算法工程师,还有的称为搜索/推荐算法工程师,甚至有的并入后台工程师的范畴,视岗位具体要求而定. 机器学习、大数据相关岗位的职责. 根据业务的不同,岗位职责大概分为:.

xLearn:专门针对大规模稀疏数据的机器学习库

- - IT瘾-dev
xLearn does not rely on any third-party library, and hence users can just clone the code and compile it by using cmake. Apart from this, xLearn supports many useful features that has been widely used in the machine learning competitions like cross-validation, early-stop, etc..

[原]Facebook如何运用机器学习进行亿级用户数据处理

- - CSDN人工智能
编译 | 刘畅、尚岩奇、林椿眄. 2017年末,Facebook应用机器学习组发布最新论文,对整个Facebook的机器学习软硬件架构进行了介绍. 纵览全文,我们也可以从中对Facebook各产品的机器学习策略一窥究竟. 论文中涉及到机器学习在全球规模(上亿级数据处理)上的全新挑战,并给出了Facebook的应对策略和解决思路,对相关行业和研究极其有意义.