Surus 简介
Surus 是 NetFlix 开源的 UDFs,是基于 pig 和 hive 的数据分析工具。Surus 中的功能能够解决多种多样的问题,例如评分预测模型、异常检测与模式匹配等。目前开源的 UDF 功能主要包括两个,包括 ScorePMML 和 RobustAnomalyDetection (RAD)。
ScorePMML
预测模型的应用随处可见,然而这些应用都不相同,唯独相同的是模型的创建和部署是相同的。PMML 是一个开源的预测模型标记语言,ScorePMML 中利用 PMML 作为一种标准解决自定义评分方法在 hadoop 环境中的扩散问题。
RobustAnomalyDetection (RAD)
RAD 主要用于异常检测,尤其是大数据集异常检测。RAD 利用 RobustPrincipalComponentAnalysis (RPCA) 算法检测异常。RPCA 通过反复迭代计算 SVD (SingularValueDecomposition),并将每次计算的奇异值和误差作为阈值来标识低等级的代表 (a low rank representation)、 随机噪声和异常值。此算法已打包成一个 pig 的 UDF,只需在 pig 代码中增加一些代码就可以调用此方法。
RAD 在 Netflix 有两个重要的应用场景,并取得了重大的成功:
- 场景一:Netflix 利用 RAD 在银行级别的支付网络故障中检测异常。
- 场景二:网站的注册流程也是一个重要的应用场景。全世界的用户通过上百种浏览器和设备进行注册。当用户注册出现问题时,工程师能够通过识别用户使用不同设备与浏览器的组合及时查明原因帮助用户解决问题。
RobustPCA 简介
PCA
主成分分析(PCA)可以有效的找出数据中最重要的元素和结构,去除噪音和冗余,能将原有的复杂数据进行降维。最简单的主成分分析方法就是 PCA,从线性代数的角度看,PCA 的目标就是使用另一组基去重新描述得到的新的数据空间,通过这组新的基,能揭示与原有的数据间的关系,即这个维度最重要的“主元”。PCA 的目标就是找到这样的“主元”,最大程度的去除冗余和噪音的干扰。
RobustPCA
与经典 PCA 一样,RobustPCA(鲁棒主成分分析)本质上也是寻找数据在低维空间上的最佳投影问题。当观测数据较大时,PCA 无法给出理想的结果,而 RobustPCA 能够从较大的且稀疏噪声污染的观测数据中恢复出本质上低秩的数据。RobustPCA 考虑的是这样一个问题:一般的数据矩阵 D 包含结构信息,也包含噪声。那么可以将这个矩阵分解为两个矩阵相加: D=A+E,A 是低秩的(由于内部有一定的结构信息造成各行或列间是线性相关的),E 是稀疏的(含有噪声,则是稀疏的),则 RobustPCA 可以写成以下的优化问题:
$$\min_{A,E}\quad\text{rank}(A)+\lambda\|E\|_{0}\quad\text{s.t.}\quad A+E=D$$
由于 rank 和 L0 范数在优化上存在非凸和非光滑特性,所以一般将这个 NP 问题转换成求解一个松弛的凸优化问题:
$$\min_{A,E}\|A\|_{*}+\lambda\|E\|_{1,1}\quad\text{s.t.}\quad A+E=D$$
RobustPCA 主要用于解决以下特征定义的问题:
- 高纬度。数据集纬度高,数据间相互交织,人工检测基本不可能。
- 最低假阳性。作为异常检测问题,我们不希望有过多的假阳性报警来干扰监控人员。
- 周期性。每小时/每天/每周/每月这样的周期性数据如果不妥善处理,某些周期性的行为可能误报为异常。实际数据中,每天固定时段的峰值数据相对于大部分采样点都可能被判定为异常,但实际为周期性正常现象。
- 数据并不是均匀分布的。像 Netflix 在两年中实现了高增长,算法需要足够健壮来处理非均匀分布的数据集(增长性数据是一个普遍现象,如长期来看的股市指数等)。
对于低秩数据观测矩阵 D,假如 D 受到随机(稀疏)噪声的影响,则 D 的低秩性就会破坏,使 D 变成满秩的。所以就需要将 D 分解成包含其真实结构的低秩矩阵 A 和稀疏噪声矩阵 E 之和。找到了低秩矩阵,实际上就找到了数据的本质低维空间,那么 RobustPCA 的 Robust 在哪呢?因为 PCA 前提假设的数据的噪声是高斯的,对于大的噪声或者严重的离群点,PCA 会被它影响,导致其无法正常工作。而 RobustPCA 则不存在这个假设(RobustPCA 假设噪声是稀疏的,而不管噪声的强弱)。
Surus 的使用
1、下载源码,进入 Surus 的主目录进行编译,执行命令 mvn clean package。命令执行成功之后会在 Surus 根目录中出现一个 target 文件夹,进入 target 文件夹中会有一个 surus-xxx.jar 的 jar 包。
3、将 surus-xxx.jar 放在 pig/hive 的 lib 目录中,并且将 surus-xxx.jar 导入到运行环境中。例如,在 pig 脚本中将 surus-xxx.jar 注册到运行环境中,代码为:REGISTER surus-xxx.jar
参考链接: