《数据科学:R语言实战》一1.2 异常检测

1.2 异常检测

我们可以使用R编程来检测数据集中的异常。异常检测可用于入侵检测、欺诈检测、系统健康状态等不同领域。在R编程中,这些被称为异常值。R编程允许用多种方法对异常值进行检测:

  • 统计测试;
  • 基于深度的方法;
  • 基于偏差的方法;
  • 基于距离的方法;
  • 基于密度的方法;
  • 高维方法。

1.2.1 显示异常值

R编程存在可以显示异常值的函数:identify (in boxplot)。

boxplot函数生成了一个盒须图(请看下图)。boxplot函数有若干图形选项,比如此示例,我们无需进行任何设置。

identify函数是便于标记散点图中点的方法。在R编程中,箱线图是散点图的一种。

1.示例1
在此示例中,我们需要生成100个随机数,然后将盒中的点绘制成图。

然后,我们用第一个异常值的标识符来对其进行标记:

> y <- rnorm(100)
> boxplot(y)
> identify(rep(1, length(y)), y, labels = seq_along(y))

注意图中接近异常值的0。
2.示例2
boxplot函数同样也会自动计算数据集的异常值。

首先,我们会生成100个随机数(注意:此数据是随机生成的,所以结果可能不同):

> x <- rnorm(100)

可通过使用下列代码查看摘要信息:

> summary(x)
    Min.    1st Qu.    Median      Mean   3rd Qu.    Max.
-2.12000    -0.74790  -0.20060 -0.01711  0.49930  2.43200

现在,我们可以通过使用下列代码显示异常值:

> boxplot.stats(x)$out
[1] 2.420850 2.432033

下列代码会用图表表示数据集,并且突出显示异常值:

> boxplot(x)
..\16-0708 图\0860OS_01_11.png

注意图中接近异常值的0。
我们可以通过使用汽车的内置数据生成含有更常见数据的箱线图,这些数据与异常值存在相同的问题,如下所示:

boxplot(mpg~cyl,data=mtcars, xlab="Cylinders", ylab="MPG")

3.另一个有关异常检测的示例
当有两个维度时,我们同样也可以使用箱线图的异常值检测。注意:我们通过使用x和y中异常值的并集而非交集解决问题。此示例就是要显示这样的点。代码如下所示:

> x <- rnorm(1000)
> y <- rnorm(1000)
> f <- data.frame(x,y)
> a <- boxplot.stats(x)$out
> b <- boxplot.stats(y)$out
> list <- union(a,b)
> plot(f)
> px <- f[f$x %in% a,]
> py <- f[f$y %in% b,]
> p <- rbind(px,py)
> par(new=TRUE)
> plot(p$x, p$y,cex=2,col=2)
C:\Users\LL\Desktop\43590\image13.png

虽然R确实按照我们的要求去做了,但是此图看起来不对。我们完全是在编造数据,在真正的use case中,需要利用专业知识以便确定这些异常值是否正确。

1.2.2 计算异常

考虑到构成异常的多样性,R编程带有可以让您完全控制异常的机制:编写能够用于做决策的函数。

1.用法
我们可使用name函数创建异常,如下所示:

name <- function(parameters,…) {
  # determine what constitutes an anomaly
  return(df)
}

这里,参数是我们需要在函数中使用的数值。假设我们将函数返回为数据框。利用此函数可以完成任何工作。

2.示例1
我们会在此示例中使用iris数据,如下所示:

> data <- read.csv("http://archive.ics.uci.edu/ml/machine-learningdatabases/
iris/iris.data")

如果我们决定当萼片低于4.5或高于7.5时存在异常,就使用下列函数:

> outliers <- function(data, low, high) {
> outs <- subset(data, data$X5.1 < low | data$X5.1 > high)
> return(outs)
>}

然后,我们会得出下列输出数据:

> outliers(data, 4.5, 7.5)
     X5.1    X3.5     X1.4     X0.2         Iris.setosa
8    4.4      2.9      1.4      0.2         Iris-setosa
13   4.3      3.0      1.1      0.1         Iris-setosa
38   4.4      3.0      1.3      0.2         Iris-setosa
42   4.4      3.2      1.3      0.2         Iris-setosa
105  7.6      3.0      6.6      2.1      Iris-virginica
117  7.7      3.8      6.7      2.2      Iris-virginica
118  7.7      2.6      6.9      2.3      Iris-virginica
122  7.7      2.8      6.7      2.0      Iris-virginica
131  7.9      3.8      6.4      2.0      Iris-virginica
135  7.7      3.0      6.1      2.3      Iris-virginica

为了获得预期的结果,可以通过向函数传送不同的参数值灵活地对准则进行轻微调整。

3.示例2
另一个受欢迎的功能包是DMwR。它包括同样可以用于定位异常值的lofactor函数。通过使用以下指令可对DMwR功能包进行安装:

> install.packages("DMwR")
> library(DMwR)

我们需要从数据上移除“种类”列,原因在于其是根据数据进行分类的。可通过使用以下指令完成移除:

> nospecies <- data[,1:4]

现在,我们确定框中的异常值:

> scores <- lofactor(nospecies, k=3)

然后,我们查看异常值的分布:

> plot(density(scores))

一个兴趣点在于:在若干异常值中(即密度约为4)是否存在非常接近的等式。

时间: 2024-09-19 00:19:17

《数据科学:R语言实战》一1.2 异常检测的相关文章

《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一一2.3 数据清洗和变量格式化

2.3 数据清洗和变量格式化 本节我们考虑如何将特征矩阵列表menResMat转换为合适的格式以便于数据分析.目前,这些数据值都是字符型,这对于诸如找到参赛者年龄的中位数这样的数据分析是无益的.但是,我们可以利用as.numeric()函数很容易地将年龄转换为数值型.我们需要将整个矩阵都转换为数值型矩阵吗?事实并非如此,比如将参赛者的名字转换为数值型就毫无意义.为此,我们需要创建一个可以允许拥有不同类型变量的数据框.现在我们有6个变量:参赛者姓名.居住地.年龄以及3种类型的时间.正如刚才所说,我

《数据科学:R语言实战》一第2章 序列的数据挖掘2.1 模式

第2章 序列的数据挖掘 数据科学:R语言实战 数据挖掘技术一般用于检测数据中的序列或模式.本章中,我们将试图使数据遵循一种模式,在此模式中,一个或一系列事件可以通过一致的方式预测另一个数据点. 本章描述了在数据集中查找模式的不同方法: 查找模式 在数据中查找模式 约束条件 我们可以在很多较大的数据集中查找模式.这涵盖了很多区域,比如混合人口的变化.使用手机的频率.高速公路质量衰退.年龄因素造成的事故等.不过我们能明确地感受到,有很多模式和序列正等待我们去发现. 我们可以通过使用R编程中的一些工具

《数据科学:R语言实战》一导读

前 言 数据科学:R语言实战R是为数据操作及统计计算提供语言及环境的软件包,同样也能够用图表表示产生的统计数据. R具有以下特性: 语法简洁,可对数据执行操作: 附带的工具可通过本地和互联网以多种格式加载和存储数据: 语言一致,可对内存中的数据集进行操作: 具有用于数据分析的内置和开源工具: 采用生成实时图形和将图示存储到磁盘的方法. 目 录 第1章 模式的数据挖掘1.1 聚类分析1.2 异常检测1.3 关联规则1.4 问题1.5 总结第2章 序列的数据挖掘2.1 模式2.2 问题2.3 总结第

《数据科学:R语言实战》一1.5 总结

1.5 总结 本章探讨了聚类分析.异常检测及关联规则."聚类分析"部分使用了K-means聚类.K-medoids聚类.分层聚类.期望最大化及密度估计."异常检测"部分通过使用内置R函数发现了异常值,并开发出自己的专用R函数."关联规则"部分使用了apriori功能包,用以确定数据集中的关联. 下一章我们会涉及序列的数据挖掘.

2013年数据分析、数据挖掘、数据科学使用语言排行榜

 最受欢迎的语言仍然是R( KDnuggets 读者中有61%用户在用),python(39%),SQL(37%).SAS仍然稳定在20%之间.增长最快是:Pig/Hive/Hadoop为基础的语言.R.SQL,同时perl, C/C++, 与Unix 在下降.同时我们发现,R与python用户存在一定的重叠. 之前的KDnuggets的调查主要是关注:统计与分析软件,但有时候一个全面与强大的编程语言是需要的.这也是最近一次的KDnuggets调查关注的重点,我们咨询: 在2013年中,什么样的

手把手 | 教你爬下100部电影数据:R语言网页爬取入门指南

前言 网页上的数据和信息正在呈指数级增长.如今我们都使用谷歌作为知识的首要来源--无论是寻找对某地的评论还是了解新的术语.所有这些信息都已经可以从网上轻而易举地获得. 网络中可用数据的增多为数据科学家开辟了可能性的新天地.我非常相信网页爬取是任何一个数据科学家的必备技能.在如今的世界里,我们所需的数据都在互联网上,使用它们唯一受限的是我们对数据的获取能力.有了本文的帮助,您定会克服这个困难. 网上大多数的可用数据并不容易获取.它们以非结构化的形式(HTML格式)表示,并且不能下载.因此,这便需要

《数据科学:R语言实战》一1.3 关联规则

1.3 关联规则 关联规则说明了两个数据集之间的关联.此规则常用于购物篮分析.一组事务中的每个事务(购物袋)可能包含多个不同项目,那么如何能够让产品销售有关联呢?常见关联如下所示. 支持度:这是事务同时包含A和B的百分比. 置信度:这是事物已经包含A的情况下包含B的百分比(规则正确). 提升度:这是置信度与包含B情况下百分比的比率.请注意:若提升度为 1,则A和B是独立的.关联的挖掘在关联规则中,R中广泛使用的工具是apriori. 1.用法可调用apriori规则的程序库,如下所示: apri

《数据科学:R语言实战》一2.3 总结

2.3 总结 本章,我们探讨了确定数据序列的不同模式.通过使用eclat函数查找数据集模式,以便寻找人口中的相似模式.使用TraMineR查找购物篮中的项目频集.使用apriori规则确定购物篮中的项目关联.使用TraMineR确定成年人职业转换期的序列,并通过序列数据可用的大量图形特征将其可视化.最后,用seqdist检查序列之间的相似点和不同点. 下一章我们将探讨文本挖掘或基于文本的数据集,而非数值形式或分类属性.

《数据科学:R语言实战》一2.2 问题

2.2 问题 实际问题 怎样不将白种人计入eclat结果内? 描述序列图表中出现的不同转换期. 在TraMineRmvad数据摘要中,地区响应中有显著差异,您能猜出原因吗? 什么时候做.怎样做以及为什么这样做? 描述seqiplot中少数异常值的情况.有部分不匹配的数据点. 当线向上弯曲时,seqHtplot内呈现的数据会出现什么情况? 如何运用序列查找上述程序? 挑战 确定项目编号在市场购物篮数据中的含义. 本章的说明只是TraMineR功能包内包含的一小部分.您可以对附加函数性进行进一步调查