R 数据挖掘算法/分类/异常值
异常值检测是数据分析中最重要的一项任务。在这种方法中,专家可以探索一组关联规则,以找出这些规则的兴趣度量在数据库的不同子集中的平均值相差多少。数值上划分异常数据和非异常数据的阈值往往是重要决策的基础。大多数单变量异常值检测方法都是基于(鲁棒)位置和分散度的估计或数据的分位数。一个主要缺点是这些规则独立于样本大小。样本大小的依赖性是可取的,以允许根据样本大小拟合阈值。此外,即使对于“干净”数据,也会识别出异常值,或者至少没有区分异常值和分布的极端值。
从背景知识的角度来看,发现有趣的异常规则的方法可以分为两种方法
- 在定向方法中,首先为方法提供背景知识,通常以规则的形式,然后方法获得每个都偏离这些规则的异常规则;
- 另一方面,在非定向方法中,没有提供背景知识。
这个问题可以总结为寻找一组规则对,每组规则对都包含一个与强规则关联的异常规则。假设一个强规则用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 年瑞士 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 | 化油器数量 |
作为一名收藏家,您只对三个特征感兴趣:mpg、qseq 和 hp。因此,需要对数据集进行过滤。此外,您只对列表中的前 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,因为它可能是最受欢迎的汽车。
恭喜!您刚刚购买了这辆令人惊叹的汽车!