使用Spark MLlib进行基于Jave的欺诈检测
副标题[/!--empirenews.page--]
【资讯】了解如何使用Java和Spark MLlib开发一种算法,该算法能够根据700万条记录的数据集检测欺诈行为。 在这篇文章中,我们将使用Spark MLlib开发Java中的算法。完整的工作代码可以从GitHub下载。可以在不使用深入的Java知识(使用配置文件)的情况下,用几种不同的配置和实验来运行代码。 在之前的文章中,我们使用Octave实现了相同的异常检测算法。我们从七百万个筛选出了500,000条记录(仅限于TRANSFER类型),以便调查和了解可用数据。此外,还绘制了几张图表来显示数据和异常(欺诈)的样子。由于Octave加载了内存中的所有数据,因此它对大数据有限制。出于这个原因,我们将使用Spark在700万个更大的数据集上运行异常检测。 高斯分布 本节简要介绍如何使用高斯函数进行异常检测。高斯密度函数具有钟形曲线形状,如下所示:
大部分数据的常规数据往往处于钟形曲线的中心,而边缘的异常更为罕见。与此同时,我们可以看到边缘上的点与中心点(接近0.4)相比具有更低的函数值(或者概率小于0.1)。 在这个例子之后,我们可以说每一个具有低于0.05的概率密度函数的例子都是异常的。当然,我们可以根据需要来控制阈值。大的值意味着更多的异常被标记,其中大部分可能不是异常。另一方面,小的值意味着我们可能错过异常,因为算法变得更加宽容。 上面的例子是一维的,数据只有一个特征。实际上,我们有更多的功能和维度的数据。为了将数据绘制到图中,我们使用主成分分析(PCA)将数据的维数减少到二维(2D)甚至三维(3D)。以下是两个维度的示例: 注意正常的数据在第一个和第二个圆的中间趋于一起,异常在第三个圆的边缘。图上的圆圈表示高斯钟形曲线如何在数据之间分布(通常,它将在3D中为钟形,但为了简单明了,以2D表示)。 为了在钟形图中的某个位置上举一个例子,我们需要计算两个分量:μ(均值)和σ2(方差)。一旦计算了均值和方差,我们可以应用一个相当简单的公式来得到新的例子的密度概率。如果概率低于某个特定值(σ),我们将其标记为异常;否则,这是正常的。在我以前的文章中查找关于开发的细节。 Spark和MLlib 本节提供Spark和MLlib的简要说明。 Spark Apache Spark是一个集群计算框架。 Spark帮助我们在群集中的不同节点上并行执行作业,然后将这些结果合并成一个结果/响应。它将我们的数据集合转换为分布在集群节点(称为RDD(弹性分布式数据集))的元素集合。例如,在一个Java程序中,我们可以将一个集合转换成一个能够并行操作的RDD,如下所示: 并行集合被分割成分区,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 ·特征提取 ·转型 ·降维 ·选择 公用事业 ·线性代数 ·统计 ·数据处理 数据准备 我们需要为算法执行准备数据。以下是数据的样子: 我们需要把所有东西都转换成数字。 幸运的是,大部分数据都是数字,只有nameOrig和nameDest以C,D或M这样的字符开始。我们简单地用1代替C,用2代替D,用3代替M。同样,我们将字符从chars转换为数字 如下所示: 所有的准备工作都是通过使用Spark转换操作映射的Java代码完成的: 之后,文件应该是这样的: 由于较大的文件大小和GitHub文件大小限制,数据不在代码中提供。你可以从这里下载文件(https://www.kaggle.com/ntnu-testimon/paysim1),将其重命名为allData.csv(将常量FILE_NAME更改为其他名称),并将其复制到文件夹data /中。 执行算法 让我们一步一步看看我们如何执行异常检测算法。 (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |