数据挖掘之大数据流处理

原文链接:http://blog.csdn.net/viewcode/article/details/9088467










目录(?)[+]

大数据流 即 实时收集的大量的数据。

数据的流量大到无法实时将全部数据放入分析工具中处理。


这里写写要解决的问题,及问题解决的思路,若是真的去实现,则需要考虑更多的问题、因素,需要查询更更详尽的资料。


常见的数据流问题:

1. 数据流的查询有哪些类型?有哪些处理策略?

2. 对大数据流进行抽样,带来哪些问题?

3. 如何有效地过滤某些数据?

4. 对独立(不同)元素的个数如何统计?

5. 矩估计(对问题4的扩展)

6. 对窗口内二进制1的个数如何统计?


1. 数据流的查询有哪些类型?有哪些处理策略?

1)固定查询:对前来的数据一直在执行查询和计算

2)即时查询ad hoc:仅当一个查询操作提交时,才对数据进行计算查询


内存大小的限制,是数据流处理考虑的主要因素。因此,数据流处理算法的两个策略:

1)计算问题的近似解,比精确解高效的多

2)hash技术,对求解近似解非常有帮助


2. 对大数据流进行抽样,带来哪些问题?

数据流巨大时,只需随机抽样一部分数据,进行存储,并供ad hoc分析使用。

抽样统计带来的问题:

统计用户的重复查询问题:

抽样时,涉及概率的乘法定理要谨慎处理,因为抽样后的概率运行可能与全集下的概率运算结果完全不同。


解决方法:

对用户进行抽样,而不是对每个用户的数据进行抽样。


一般性的抽样问题:

将某些字段看成关键字组合,并利用hash的a/b策略,即b个桶,a作为阈值,保留小于a的采样值。


新问题: 新用户出现,每个用户的样本规模不断变大,以至于抽样的数据都超出了分配的空间,如何处理?

那么就设定新的阈值a-1,即降低阈值,并将hash值等于a的数据删除,这样可以提高效率,节省空间。


3. 如何有效地过滤某些数据?

过滤指定规则的数据。主要是指Bloom过滤器。

Bloom过滤器: 组成部分:

n位的数组,k个hash函数,m个待过滤的元素

则bloom过滤器的假阳的概率是:

(1 - e^(-km/n) )^k

推导: 元素不能落入指定的位置的概率是 (n - 1) / n.

那么m个元素,hash了k次,仍未落入指定位置的概率是( 1 - 1/n)^(km),即 当n较大时,指定位置为0的概率近似于e^(-km/n),为1的概率为1- e^(-km/n)。而假阳的概率,是k个hash函数产生的k个指定位置, 都为1的概率: (1 - e^(-km/n) )^k


4. 对独立(不同)元素的个数如何统计?

统计某时段内,出现的不同元素的数目。

一种方案是内存中保存当前所有元素列表,可以用hash或搜索树来保存和检索数据。问题:元素数目可能大到无法全部放入内存。

解决方案:

1)使用多台机器,并行处理

2)FM(Flajolet-Martin)算法,统计某元素hash后尾部0的个数,若其hash值尾部0的个数至少为r的概率是2^(-r),而任何元素hash值尾部都不满足至少有r个0的概率为(1 - 2^(-r))^m。 然后估计出所有元素的个数m:2^R, 最大尾长为R

优化策略: 多个hash函数,分组:组内平均值 + 组件中值滤波(取中位数)


5. 矩估计(对问题4的扩展)

一个元素出现的次数mi, 矩的概念就是 求和 mi ^ k

k=0,即不同元素的数目

k=1,所有元素的数目,mi就是每种元素出现的频率

k=2,就是度量元素分布的非均匀性,也称为奇异数

问题:当数据流过大,内存中无法存下时,如何估计这些数字特征那?

如何估计二阶矩?AMS算法 即Alon-Matias-Szegedy algorithm

只需统计一部分元素出现的频率X.Value,并估计n*(2 * X.Value - 1), 并这部分元素的估计求均值。

推导过程?或者说为什么是 n * (2 * X.Value - 1) ?

AMS算法的结果是二阶矩的无偏估计。  V^2 - (V-1)^2 = 2*V - 1


更高阶的那?

k = 3,选取

V^3 - (V-1)^3


6. 对窗口内二进制1的个数如何统计?

如果对N位的二进制数据,统计1的个数,那么精确统计1的个数就需要只是O(N)的开销。

当N大于内存的容量时,那么快速的求解这个问题,可以采用求近似解的策略。

DGIM算法:

1)维护一个数据结构:将二进制分组,每组中1的个数是2的次幂,从右至左组的都是非递减的,只须记录每组的两端的位置即可。类似于 等比数列

2)这样组的个数有O(log(2, N)),记录组的一端位置,所需空间log(2, N)位。则统计整个窗口所占内存为O( (log(2, N)) ^ 2 )

3)求解:估计1的个数:比较每组两端的位置与k的大小,找到k值所在的组b,累加之前组的大小及组b的一半大小。

相关问题:

1)组的数目的影响? 组的数目,决定了DGIM算法所占的内存

2)统计的错误率是多少?分为两种情况:估计值大于实际值;实际值大于估计值。

3)如何维护这个DGIM数据结构?当新的位来时,首先查看窗口的大小N,当当前位置索引减去N大于最旧组的位置索引,将最旧的桶去掉;若来的位是0,不需然后改变;若是1,那么就需执行合并的策略。

4)具有相同大小的组的个数是r-1,或r时,其与错误率的关系:错误率的上限是1/(r-1),如何r选择足够大,错误率就会减少。


采用等比的分组方式与等分的分组方式的差别?

等比分组,能比较容易地确定错误率的上界。


-《大数据:互联网大规模数据挖掘与分布式处理》学习


目录(?)[+]

大数据流 即 实时收集的大量的数据。

数据的流量大到无法实时将全部数据放入分析工具中处理。


这里写写要解决的问题,及问题解决的思路,若是真的去实现,则需要考虑更多的问题、因素,需要查询更更详尽的资料。


常见的数据流问题:

1. 数据流的查询有哪些类型?有哪些处理策略?

2. 对大数据流进行抽样,带来哪些问题?

3. 如何有效地过滤某些数据?

4. 对独立(不同)元素的个数如何统计?

5. 矩估计(对问题4的扩展)

6. 对窗口内二进制1的个数如何统计?


1. 数据流的查询有哪些类型?有哪些处理策略?

1)固定查询:对前来的数据一直在执行查询和计算

2)即时查询ad hoc:仅当一个查询操作提交时,才对数据进行计算查询


内存大小的限制,是数据流处理考虑的主要因素。因此,数据流处理算法的两个策略:

1)计算问题的近似解,比精确解高效的多

2)hash技术,对求解近似解非常有帮助


2. 对大数据流进行抽样,带来哪些问题?

数据流巨大时,只需随机抽样一部分数据,进行存储,并供ad hoc分析使用。

抽样统计带来的问题:

统计用户的重复查询问题:

抽样时,涉及概率的乘法定理要谨慎处理,因为抽样后的概率运行可能与全集下的概率运算结果完全不同。


解决方法:

对用户进行抽样,而不是对每个用户的数据进行抽样。


一般性的抽样问题:

将某些字段看成关键字组合,并利用hash的a/b策略,即b个桶,a作为阈值,保留小于a的采样值。


新问题: 新用户出现,每个用户的样本规模不断变大,以至于抽样的数据都超出了分配的空间,如何处理?

那么就设定新的阈值a-1,即降低阈值,并将hash值等于a的数据删除,这样可以提高效率,节省空间。


3. 如何有效地过滤某些数据?

过滤指定规则的数据。主要是指Bloom过滤器。

Bloom过滤器: 组成部分:

n位的数组,k个hash函数,m个待过滤的元素

则bloom过滤器的假阳的概率是:

(1 - e^(-km/n) )^k

推导: 元素不能落入指定的位置的概率是 (n - 1) / n.

那么m个元素,hash了k次,仍未落入指定位置的概率是( 1 - 1/n)^(km),即 当n较大时,指定位置为0的概率近似于e^(-km/n),为1的概率为1- e^(-km/n)。而假阳的概率,是k个hash函数产生的k个指定位置, 都为1的概率: (1 - e^(-km/n) )^k


4. 对独立(不同)元素的个数如何统计?

统计某时段内,出现的不同元素的数目。

一种方案是内存中保存当前所有元素列表,可以用hash或搜索树来保存和检索数据。问题:元素数目可能大到无法全部放入内存。

解决方案:

1)使用多台机器,并行处理

2)FM(Flajolet-Martin)算法,统计某元素hash后尾部0的个数,若其hash值尾部0的个数至少为r的概率是2^(-r),而任何元素hash值尾部都不满足至少有r个0的概率为(1 - 2^(-r))^m。 然后估计出所有元素的个数m:2^R, 最大尾长为R

优化策略: 多个hash函数,分组:组内平均值 + 组件中值滤波(取中位数)


5. 矩估计(对问题4的扩展)

一个元素出现的次数mi, 矩的概念就是 求和 mi ^ k

k=0,即不同元素的数目

k=1,所有元素的数目,mi就是每种元素出现的频率

k=2,就是度量元素分布的非均匀性,也称为奇异数

问题:当数据流过大,内存中无法存下时,如何估计这些数字特征那?

如何估计二阶矩?AMS算法 即Alon-Matias-Szegedy algorithm

只需统计一部分元素出现的频率X.Value,并估计n*(2 * X.Value - 1), 并这部分元素的估计求均值。

推导过程?或者说为什么是 n * (2 * X.Value - 1) ?

AMS算法的结果是二阶矩的无偏估计。  V^2 - (V-1)^2 = 2*V - 1


更高阶的那?

k = 3,选取

V^3 - (V-1)^3


6. 对窗口内二进制1的个数如何统计?

如果对N位的二进制数据,统计1的个数,那么精确统计1的个数就需要只是O(N)的开销。

当N大于内存的容量时,那么快速的求解这个问题,可以采用求近似解的策略。

DGIM算法:

1)维护一个数据结构:将二进制分组,每组中1的个数是2的次幂,从右至左组的都是非递减的,只须记录每组的两端的位置即可。类似于 等比数列

2)这样组的个数有O(log(2, N)),记录组的一端位置,所需空间log(2, N)位。则统计整个窗口所占内存为O( (log(2, N)) ^ 2 )

3)求解:估计1的个数:比较每组两端的位置与k的大小,找到k值所在的组b,累加之前组的大小及组b的一半大小。

相关问题:

1)组的数目的影响? 组的数目,决定了DGIM算法所占的内存

2)统计的错误率是多少?分为两种情况:估计值大于实际值;实际值大于估计值。

3)如何维护这个DGIM数据结构?当新的位来时,首先查看窗口的大小N,当当前位置索引减去N大于最旧组的位置索引,将最旧的桶去掉;若来的位是0,不需然后改变;若是1,那么就需执行合并的策略。

4)具有相同大小的组的个数是r-1,或r时,其与错误率的关系:错误率的上限是1/(r-1),如何r选择足够大,错误率就会减少。


采用等比的分组方式与等分的分组方式的差别?

等比分组,能比较容易地确定错误率的上界。


-《大数据:互联网大规模数据挖掘与分布式处理》学习

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值