加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

使用Spark MLlib进行基于Jave的欺诈检测

发布时间:2018-05-16 22:51:45 所属栏目:教程 来源:李佳惠
导读:【资讯】了解如何使用Java和Spark MLlib开发一种算法,该算法能够根据700万条记录的数据集检测欺诈行为。 在这篇文章中,我们将使用Spark MLlib开发Java中的算法。完整的工作代码可以从GitHub下载。可以在不使用深入的Java知识(使用配置文件)的情况下,
副标题[/!--empirenews.page--]

  【资讯】了解如何使用Java和Spark MLlib开发一种算法,该算法能够根据700万条记录的数据集检测欺诈行为。

  在这篇文章中,我们将使用Spark MLlib开发Java中的算法。完整的工作代码可以从GitHub下载。可以在不使用深入的Java知识(使用配置文件)的情况下,用几种不同的配置和实验来运行代码。

  在之前的文章中,我们使用Octave实现了相同的异常检测算法。我们从七百万个筛选出了500,000条记录(仅限于TRANSFER类型),以便调查和了解可用数据。此外,还绘制了几张图表来显示数据和异常(欺诈)的样子。由于Octave加载了内存中的所有数据,因此它对大数据有限制。出于这个原因,我们将使用Spark在700万个更大的数据集上运行异常检测。

  高斯分布

  本节简要介绍如何使用高斯函数进行异常检测。高斯密度函数具有钟形曲线形状,如下所示:

  使用Java和Spark MLlib开发一种算法检测欺诈行为,可行吗?

  大部分数据的常规数据往往处于钟形曲线的中心,而边缘的异常更为罕见。与此同时,我们可以看到边缘上的点与中心点(接近0.4)相比具有更低的函数值(或者概率小于0.1)。

  在这个例子之后,我们可以说每一个具有低于0.05的概率密度函数的例子都是异常的。当然,我们可以根据需要来控制阈值。大的值意味着更多的异常被标记,其中大部分可能不是异常。另一方面,小的值意味着我们可能错过异常,因为算法变得更加宽容。

  上面的例子是一维的,数据只有一个特征。实际上,我们有更多的功能和维度的数据。为了将数据绘制到图中,我们使用主成分分析(PCA)将数据的维数减少到二维(2D)甚至三维(3D)。以下是两个维度的示例:  

使用Spark MLlib进行基于Jave的欺诈检测

  注意正常的数据在第一个和第二个圆的中间趋于一起,异常在第三个圆的边缘。图上的圆圈表示高斯钟形曲线如何在数据之间分布(通常,它将在3D中为钟形,但为了简单明了,以2D表示)。

  为了在钟形图中的某个位置上举一个例子,我们需要计算两个分量:μ(均值)和σ2(方差)。一旦计算了均值和方差,我们可以应用一个相当简单的公式来得到新的例子的密度概率。如果概率低于某个特定值(σ),我们将其标记为异常;否则,这是正常的。在我以前的文章中查找关于开发的细节。

  Spark和MLlib

  本节提供Spark和MLlib的简要说明。

  Spark

  Apache Spark是一个集群计算框架。 Spark帮助我们在群集中的不同节点上并行执行作业,然后将这些结果合并成一个结果/响应。它将我们的数据集合转换为分布在集群节点(称为RDD(弹性分布式数据集))的元素集合。例如,在一个Java程序中,我们可以将一个集合转换成一个能够并行操作的RDD,如下所示:  使用Java和Spark MLlib开发一种算法检测欺诈行为,可行吗?

  并行集合被分割成分区,Spark的每个分区执行一个任务,所以我们希望每个CPU有两到四个分区。我们可以通过用sc.parallelize(collection,partitionNumber)定义另一个参数来控制Spark创建的分区数量。除了来自应用程序的集合之外,Spark还能够转换来自Hadoop支持的存储源(包括本地文件系统,HDFS,Cassandra,HBase和Amazon S3)的数据。

  将数据转换为RDD后,我们可以在集群节点上执行两种并行操作。转换操作将RDD集合作为输入,并返回一个新的RDD集合,如映射和操作,它们采用RDD并返回单个结果,如reduce、count等。不管类型如何,操作都是惰性的,类似于Java 8在定义时不运行,而是在请求时运行。因此,可以在请求时多次计算一个操作,为了避免这种情况,保存在内存或缓存中。

  MLlib

  Spark支持Java、Scala、Python和R API。它还支持一套丰富的高级工具,包括用于SQL和结构化数据处理的Spark SQL,用于机器学习的MLlib,用于图形处理的GraphX以及Spark Streaming。

  MLlib是Spark的机器学习(ML)库。它提供了几个现成的ML工具,如:

  ML算法

  ·分类

  ·回归

  ·聚类

  ·协作过滤

  Featurization

  ·特征提取

  ·转型

  ·降维

  ·选择

  公用事业

  ·线性代数

  ·统计

  ·数据处理

  数据准备

  我们需要为算法执行准备数据。以下是数据的样子:  

使用Spark MLlib进行基于Jave的欺诈检测

  我们需要把所有东西都转换成数字。 幸运的是,大部分数据都是数字,只有nameOrig和nameDest以C,D或M这样的字符开始。我们简单地用1代替C,用2代替D,用3代替M。同样,我们将字符从chars转换为数字 如下所示:  使用Java和Spark MLlib开发一种算法检测欺诈行为,可行吗?

  所有的准备工作都是通过使用Spark转换操作映射的Java代码完成的: 

使用Spark MLlib进行基于Jave的欺诈检测

  之后,文件应该是这样的:

使用Spark MLlib进行基于Jave的欺诈检测

  由于较大的文件大小和GitHub文件大小限制,数据不在代码中提供。你可以从这里下载文件(https://www.kaggle.com/ntnu-testimon/paysim1),将其重命名为allData.csv(将常量FILE_NAME更改为其他名称),并将其复制到文件夹data /中。

  执行算法

  让我们一步一步看看我们如何执行异常检测算法。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读