跳转到内容

R 数据挖掘算法/分类/异常值

来自 Wikibooks,开放世界中的开放书籍

异常值检测是数据分析中最重要的一项任务。在这种方法中,专家可以探索一组关联规则,以找出这些规则的兴趣度量在数据库的不同子集中的平均值相差多少。数值上划分异常数据和非异常数据的阈值往往是重要决策的基础。大多数单变量异常值检测方法都是基于(鲁棒)位置和分散度的估计或数据的分位数。一个主要缺点是这些规则独立于样本大小。样本大小的依赖性是可取的,以允许根据样本大小拟合阈值。此外,即使对于“干净”数据,也会识别出异常值,或者至少没有区分异常值和分布的极端值。


从背景知识的角度来看,发现有趣的异常规则的方法可以分为两种方法

  1. 在定向方法中,首先为方法提供背景知识,通常以规则的形式,然后方法获得每个都偏离这些规则的异常规则;
  2. 另一方面,在非定向方法中,没有提供背景知识。

这个问题可以总结为寻找一组规则对,每组规则对都包含一个与强规则关联的异常规则。假设一个强规则用if Y then x"表示,其中Y = y1 ^ y2 ^ ... ^ yn 是原子和x 是单个原子的合取。设Z = z1 ^ z2 ^ ... ^ zn 是原子和x' 是单个原子的合取,它具有相同的属性但与原子x 不同的值,那么异常规则用if Y and Z then x"表示。例如,考虑规则“使用安全带对儿童来说有风险”,它表示对众所周知的“使用安全带是安全的”事实的例外。


包安装

[编辑 | 编辑源代码]
  • 步骤 1:如果您已经在系统中安装了 R 包,请跳到步骤 2。要安装 R 包,您可以使用系统的 apt-get 功能,只需输入以下命令
 $ sudo apt-get install r-base-core

如果您的系统没有 apt-get 功能,不要放弃!您可以通过访问异常值包 网站下载该包。

  • 步骤 2:有必要安装 mvoutlier 包。为了安装 mvoutlier 包,您首先需要运行 R。这可以通过以下命令完成
 $ R

然后在 R 环境中输入以下命令

 > install.packages("mvoutlier")

安装完成。

现在有必要加载该包

 > library(mvoutlier)

可视化

[编辑 | 编辑源代码]

为了展示如何可视化 mvoutlier 包的结果,我们将使用一个实际的例子。数据集及其在 mvoutlier 中的使用将在下面介绍。

瑞士生育率和社会经济指标(1888)数据

[编辑 | 编辑源代码]

瑞士 是一个数据库,它包含大约 1888 年瑞士 47 个法语省份的标准化生育率测量值和社会经济指标。

格式

一个包含 47 个观测值的 6 个变量数据框,每个变量都以百分比表示。

生育率 Ig,‘常见的标准化生育率测量值’
农业 % 从事农业的男性
考试 % 参加军队考试获得最高分数的应征者
教育 % 超过小学教育的应征者。
天主教 % “天主教”(与“新教”相对)。
婴儿死亡率 活产婴儿在 1 年内死亡的比例。

除了“生育率”之外的所有变量都给出人口比例。

要查找此数据集的异常值,只需键入以下两个命令

 > data(swiss)
 > uni.plot(swiss)

以上命令将生成以下图形


通过分析由列表示的每个特征之间的相关性来找到异常值。例如,如果单独分析,0 旁边的红点不会是异常值,但是,由于考虑了相关性,这些点是异常值。另外,需要注意的是,一列中的异常值在其他列中也是相同的。

y 轴表示基于 mcd 估计量的稳健马氏距离。零点表示值的统计平均值。


可以通过以下命令获得更详细的输出

 > data(swiss)
 > uni.plot(swiss, symb=TRUE)

在第一张图片中,只有两种颜色,没有使用任何特殊符号。异常值用红色标记。

在第二张图片中,我们将参数 symbol 设置为 TRUE。在这种情况下,根据基于 mcd 估计量的稳健马氏 距离使用不同的符号(十字表示大值,圆圈表示小值),并且根据观测值的欧几里得距离使用不同的颜色(红色表示大值,蓝色表示小值)。


除了突出显示图形中的异常值之外,还会生成一个表格来识别哪些元素对应于突出显示的异常值。在此表中,标记为 TRUE 的元素是异常值。此表示例显示在部分#案例研究 中。

案例研究

[编辑 | 编辑源代码]

假设您想购买一辆古董车,因为您是一位著名的收藏家。您有一张包含每辆车的许多特征的列表。

一辆与众不同的汽车会是一个好主意,但一辆“与众不同”的汽车可能非常棒也可能非常糟糕。那么应该买哪辆车呢?

输入数据

[编辑 | 编辑源代码]

我们将在本案例研究中使用的数据集称为mtcars,它提取自 1974 年的《汽车趋势》美国杂志,包含 32 辆汽车(1973-1974 年车型)的燃油消耗量以及汽车设计和性能的 10 个方面。

一个包含 32 个观测值的 11 个变量数据框。

mpg 英里/(美国)加仑
cyl 气缸数
disp 排量(立方英寸)
hp 总马力
drat 后桥速比
wt 重量(磅/1000)
qsec 1/4 英里时间
vs V/S
am 变速箱(0 = 自动,1 = 手动)
gear 前进档数
carb 化油器数量

作为一名收藏家,您只对三个特征感兴趣:mpgqseqhp。因此,需要对数据集进行过滤。此外,您只对列表中的前 15 辆车感兴趣,因为您已经拥有其他的了 :)。


过滤后的数据集
[编辑 | 编辑源代码]

加载数据集

 > data(mtcars)

过滤数据集

 > cars = mtcars[1:15, c("mpg", "qsec", "hp")]

查看我们过滤的内容

 > cars

找出突出显示的汽车

 > uni.plot(log(cars))

上面的命令中的“log”用于将 y 轴置于对数刻度。

mvoutlier 图形:


mvoutlier 表格

第一张图显示我们有两个异常值,即两辆突出的汽车。在图中,这些汽车用红点表示。列中的异常值在其他列中也是相同的。

值得注意的是,通过分析汽车每个特征之间的相关性来发现异常值。例如,如果单独分析 qsec 列中值 0 旁边的红点,它就不是异常值,但考虑到相关性,该点就是一个异常值。

为了找出突出的汽车,我们分析了第二张图。我们可以清楚地看到标记为 TRUE 的异常值。因此,异常值是 Merc 230 和 Cadillac Fleetwood。现在收藏家的生活更容易了。剩下的只是确定收藏家感兴趣的哪种“突出”。查看#过滤后的数据集,我们可以注意到 Merc 230 非常经济,但速度较慢,功率较低,我们也可以看到 Cadillac Fleetwood 速度非常快,功率很大,但油耗过高。作为一名优秀的收藏家,他很可能会选择 Cadillac Fleetwood,因为它可能是最受欢迎的汽车。


恭喜!您刚刚购买了这辆令人惊叹的汽车!

参考文献

[编辑 | 编辑源代码]
  1. ^ P. Filzmoser。一种多元异常值检测方法。在 S. Aivazian、P. Filzmoser 和 Yu. Kharin 编著的《第七届计算机数据分析和建模国际会议论文集》中,第 1 卷,第 18-22 页,白俄罗斯国立大学,明斯克,2004 年。
  2. ^ GONÇALVES, E. C. ; ALBUQUERQUE, C. V. N. ; PLASTINO, A. . 异常挖掘应用于入侵检测系统。电子信息系统杂志,第 8 卷,第 1-9 页,2006 年。
  3. ^ 异常值包
  4. ^ 异常值手册
  5. ^ 瑞士
  6. ^ 马哈拉诺比斯距离
  7. ^ mtcars 数据集
华夏公益教科书