文档章节

什么?多个体多维度分析效率能从3天压缩到30分钟?

openfea
 openfea
发布于 2017/08/10 11:06
字数 1280
阅读 21
收藏 0

在进行机器学习的时候,我们需要对单个体进行多维度分析,比如说在日志审计系统,我们需要对每一个操作账户进行操作次数统计,总操作次数统计,方差,极值,中值,突变度等计算。有时,也要计算非工作时间的访问,方差,极值,中值,突变度等数据。

过去的做法是,读取每一个账户的操作记录,然后分别计算一系列指标,最后通过cluster_foreach循环方式解决......

这种方式的缺点是显而易见的,10000个人需要计算10000次,实际的项目经验是百万人级别,集群任务过多对硬件的要求也比较大,项目执行起来难度就比较大。

在长期实践中,OpenFEA团队不断探索创新,引入numpy模块,创新性的解决了多个体多维度计算问题,在32万个体的总过2000万条记录上,使用该模块,在未使用集群的情况下,在30分钟时间内顺利计算了40个指标,充分展现了fea在数据分析领域的强大计算能力和极佳的便捷性。

在这里,笔者不打算介绍具体的项目,而是把计算过程中用的核心概念,核心方法展示出来,结合一个小数据,让大家在实际操作中具体的感受numpy模块是什么,能进行什么运算,怎么调用运算等,这样便于大家抓住本质。

1、numpy模块的高级运算——调用方法

原始数据如下:

1)和udf0.df_row_lambda 函数结合

a=@udf a by udf0.df_rowl with (lambda x:np.sum(x))

可以看见,np.sum()就是对整行求和

a=@udf a by udf0.df_row_lambda with (x:np.sum(x[:7]))

可以发现,x[0:7]就是对a行取前7列的意思

2)numpy模块的实质

提供了一个多维函数模块,28=np.sum(1,2,3,4,5,6,7)

可以通过lambda函数调用

2、numpy模块的高级运算——设定范围

原始数据如下:

1) 对第1行“取0到2求和”,第2行“取1到3求和”,...

a=@udf a by udf0.df_rowl with (lambda x:np.sum(x[x["start"]:x["end"]+1]))

可以看见,在lambda运算中,“运算元素”可以随意组合

2) 对第1行“取0到2求和”,第2行“取1到2的最大值”,...

l a=@udf a by udf0.df_rowl with (lambda x:np.sum(x[x["start"]:x["end"]+1]) if x["start"]%2==0 else np.max(x[x["start"]:x["end"]]) )

把if语句也套用进来了,处理的灵活性大大增强

3)对大于3的值求和

a=@udf a by udf0.df_rowl with (lambda x:np.dot(x[0:],x[0:]>3))

3、numpy模块的高级运算——错位运算

原始数据如下:

1)第一行的“1到3列”和“0到2列”错位相减,然后求和

(2-1)+(3-2)+(4-3)=3

a=@udf a by udf0.df_rowl with (lambda x:np.sum(np.array(x[x["start"]+1:x["end"]+2])-np.array(x[x["start"]:x["end"]+1])))

可以看到x[7]和x["start"]是同一个值

2)函数详解

np.array()函数实现了,把序列x[0:3]="1,2,3"转换成为矩阵(1,2,3)

np.sum()函数同时支持序列元素求和及矩阵元素求和

4、numpy模块的高级运算——必要说明

1)numpy模块中的方差,标准差的定义和fea基本运算中的agg_group模块中的定义不一致,全样本方差和样本方差不同(除以n还是除以n-1的差别)

2)numpy模块中average函数和其他函数的处理细节不是很一致,使用前需要验证,确认可以满足算法需求

5、numpy模块的高级运算——运算优势

1)把复杂的错位运算,变成一个lambda表达式,可以对百万级的运算个体同时计算某个测量指标,而不要分个体逐一计算,彻底解决机器学习中,个体多,维度多的分析计算需求。

2)可以和lambda函数,深度套用,灵活多变,非常适合科学计算。

3)语言接近矩阵语言,稍微有点矩阵知识即可灵活使用。

6、总结

1)通过上面的演示,相信大家可以通过lambda函数,顺利调用numpy模块,对数据进行切块分段计算,错位计算也都有了一定的认知。

2)需要提醒大家的是,数据分析本身就是很具有灵活性,在实际项目中,结果是否符合自己的期望,是否正确,很多时候不是“工具本身”说了算,而是“项目需求”要怎么做,确切搞明白每一段代码运算结果的“项目含义”。

3)再次提醒大家,numpy模块异常丰富,本文只是一个模型、展示,将相关的概念、用法、技巧“简单点到”而做不到“包教包会”,需要大家根据项目本身,提出概念、模型,然后翻译成numpy语言。

© 著作权归作者所有

openfea

openfea

粉丝 25
博文 91
码字总数 101905
作品 1
杭州
其他
私信 提问
加载中

评论(0)

PostgreSQL 时序数据案例 - 时间流逝, 自动压缩, 同比\环比

标签 PostgreSQL , 时序数据 , rrd , rrdtool , round robin database , 自动压缩 , CTE , dml returning , 环比 , 同比 , KNN 背景 时序数据库一个重要的特性是时间流逝压缩,例如1天前压缩...

德哥
2017/12/27
0
0
HBase二级索引的设计(案例讲解)

摘要 最近做的一个项目涉及到了多条件的组合查 询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼 接在RowKe...

Zero零_度
2016/09/07
83
0
七种常见的数据分析法(五):帕累托法则 - 知乎

什么是帕累托法则? 帕累托法则其实就是我们常说的二八法则,经济学定律中说80%的财富掌握在20%的人手中,而在运营中可以发现,80%的贡献度来自于20%的用户。 这张图中体现了2个法则,也就是...

诸葛io
2019/10/21
0
0
心得体悟帖---200522(什么都不想,是一种非常好的解决问题的方案)

心得体悟帖---200522(什么都不想,是一种非常好的解决问题的方案) 一、总结 一句话总结: 那些人是怎么在各种情况下都能睡的死沉死沉的呢,就是啥都不想,好好睡觉。期待很短的时间是可以休...

范仁义
05/22
0
0
比人高效10倍,3分钟就能评估帕金森!这是腾讯新推出的AI医生

雷刚 发自 凹非寺 量子位 报道 | 公众号 QbitAI 帕金森,最可怕的中老年病症之一,也是最让诊断医生最费力的病症之一。 现在,腾讯AI说可以为医生分忧了。 传统方法30分钟 帕金森,或许你多少...

量子位
2018/08/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

web测试与app测试的区别

web测试与app测试的区别 首先从系统架构来看的话: web项目,一般都是b/s架构,基于浏览器的,而app则是c/s的,必须要有客户端。那么在系统测试测试的时候就会产生区别了。 web测试只要更新了...

osc_qo89by3k
13分钟前
5
0
【mysql 读写分离】10分钟了解读写分离的作用

1、什么是读写分离 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集...

战略板儿砖
14分钟前
9
0
Sphinx和rst在科研笔记和学术博客中的高效用法

什么是RST? reStructuredText 是扩展名为 .rst 的纯文本文件,含义为"重新构建的文本",也被简称为:RST 或 reST; 是 Python 编程语言的 Docutils 项目的一部分,Python Doc-SIG (Documen...

osc_6b3uvobr
14分钟前
13
0
MySQL 的 crash-safe 原理解析

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/5i9wmJs4_Er7RaYfNnETyA 作者:xieweipeng MySQL作为当下最流行的开源关系型数据库,有一个很关键和基本的能力,就...

vivo互联网技术
15分钟前
10
0
Org Mode - 年轻人的第一堂时间管理课程

忙成狗,闲成猪。 上半年我的状态就是如此,为了做出改变我找了很多的任务管理工具,比如奇妙清单、滴答清单(现在我还在用)等等,但是依然没有满足我的需求。作为一名精力旺盛的开发仔,我...

osc_smzoc82r
15分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部