【Scikit-Learn 中文文档】新异类和异常值检测 - 无监督学习 - 用户指南 | ApacheCN

中文文档: http://sklearn.apachecn.org/cn/stable/modules/outlier_detection.html

英文文档: http://sklearn.apachecn.org/en/stable/modules/outlier_detection.html

官方文档: http://scikit-learn.org/stable/

GitHub: https://github.com/apachecn/scikit-learn-doc-zh(觉得不错麻烦给个 Star,我们一直在努力)

贡献者: https://github.com/apachecn/scikit-learn-doc-zh#贡献者

关于我们: http://www.apachecn.org/organization/209.html

2.11. 新异类和异常值检测

许多应用需要能够判断新观测是否属于与现有观测相同的分布(它是一个非线性的),或者应该被认为是不同的(这是一个异常值)。 通常,这种能力用于清理实际的数据集。 必须做出两个重要的区别:

新奇检测:

训练数据不被异常值污染,我们有兴趣检测新观察中的异常情况。

离群点检测:

训练数据包含异常值,我们需要适应训练数据的中心模式,忽略偏差观测值。

scikit-learn项目提供了一套可用于新奇和离群点检测的机器学习工具。 该策略是通过数据从无监督的方式学习的对象来实现的:

estimator.fit(X_train)

然后可以使用 predict 方法将新观察值作为内在值或异常值排序:

estimator.predict(X_test)

正常被标记为1,而异常值被标记为-1。

2.11.1. 新奇检测

从 

 个特征描述的相同分布考虑 

 个观察值的数据集。 现在考虑,我们再添加一个观察数据集。 新的观察与其他观察是不同的,我们可以怀疑它是正常的吗? (即是否来自相同的分配?)或者相反,是否与另一个相似,我们无法将其与原始观察结果区分开来? 这是新奇检测工具和方法所解决的问题。

一般来说,它将要学习一个粗略且紧密的边界,界定初始观测分布的轮廓,绘制在嵌入的 

 维空间中。 那么,如果进一步的观察在边界划分的子空间内,则它们被认为来自与初始观察相同的群体。 否则,如果他们在边界之外,我们可以说他们是异常的,对我们的评估有一定的信心。

One-Class SVM 已经由Schölkopf等人采用。 为此目的并在 支持向量机 模块的 svm.OneClassSVM 对象中实现。 需要选择kernel和scalar参数来定义边界。 通常选择RBF内核,尽管没有确切的公式或算法来设置其带宽参数。 这是scikit-learn实现中的默认值。 

 参数,也称为一级SVM的边距,对应于在边界之外找到新的但常规的观察的概率。

参考文献:

例子:

2.11.2. 离群点检测

离群点检测类似于新奇检测,其目的是将正常观察的核心与一些被称为“离群点”的污染物进行分离。 然而,在异常值检测的情况下,我们没有一个干净的数据集代表可用于训练任何工具的常规观察值的群体。

2.11.2.1. 椭圆模型适配

执行异常值检测的一种常见方式是假设常规数据来自已知分布(例如,数据是高斯分布的)。 从这个假设来看,我们通常试图定义数据的“形状”,并且可以将离散观察值定义为足够远离拟合形状的观测值。

scikit-learn提供了一个对象 covariance.EllipticEnvelope ,它适合于对数据的鲁棒协方差估计,从而将椭圆适配到中央数据点,忽略中央模式之外的点。

例如,假设异构数据是高斯分布的,它将以鲁棒的方式(即不受异常值的影响)来估计非线性位置和协方差。 从该估计得到的马氏距离距离用于得出偏离度量。 这个策略如下图所示。

例子:

参考文献:

  • Rousseeuw, P.J., Van Driessen, K. “A fast algorithm for the minimum covariance determinant estimator” Technometrics 41(3), 212 (1999)

2.11.2.2. Isolation Forest

在高维数据集中执行异常值检测的一种有效方法是使用随机森林。 ensemble.IsolationForest 通过随机选择特征然后随机选择所选特征的最大值和最小值之间的分割值来隔离观察值。

由于递归分区可以由树结构表示,因此隔离样本所需的分裂次数等同于从根节点到终止节点的路径长度。

在这样的随机树的森林中平均的这个路径长度是正态性和我们的决策功能的量度。

随机分区产生明显较短的异常路径。 因此,当一个随机树林共同为特定样本产生较短的路径长度时,它们很有可能是异常的。

这个策略如下图所示。

例子:

参考文献:

  • Liu, Fei Tony, Ting, Kai Ming and Zhou, Zhi-Hua. “Isolation forest.” Data Mining, 2008. ICDM‘08. Eighth IEEE International Conference on.

2.11.2.3. 局部离群因子(LOF)

对中等高维数据集执行异常值检测的另一种有效方法是使用局部离群因子(LOF)算法。

neighbors.LocalOutlierFactor (LOF)算法计算反映观测值异常程度的分数(称为局部离群因子)。 它测量给定数据点相对于其邻居的局部密度偏差。 这个想法是检测具有比其邻居明显更低密度的样品。

实际上,从k个最近的邻居获得局部密度。 观察的LOF得分等于他的k-最近邻居的平均局部密度与其本身密度的比值:正常情况预期具有与其邻居类似的局部密度,而异常数据 预计本地密度要小得多。

考虑的邻居数(k个别名参数n_neighbors)通常选择1)大于集群必须包含的对象的最小数量,以便其他对象可以是相对于该集群的本地异常值,并且2)小于最大值 靠近可能是本地异常值的对象的数量。 在实践中,这样的信息通常不可用,并且n_neighbors = 20似乎总体上很好地工作。 当异常值的比例高(即大于10%时,如下面的例子),n邻居应该更大(在下面的例子中,n_neighbors = 35)。

LOF算法的优点是考虑到数据集的局部和全局属性:即使在异常样本具有不同基础密度的数据集中,它也能够很好地执行。 问题不在于,样本是如何孤立的,而是与周边邻里有多孤立。

这个策略如下图所示。

例子:

参考文献:

2.11.2.4. One-class SVM 与 Elliptic Envelope 与 Isolation Forest 与 LOF

严格来说,One-class SVM 不是异常检测方法,而是一种新颖性检测方法:其训练集不应该被异常值污染,因为它可能适合它们。 也就是说,高维度的异常值检测或对内容数据的分布没有任何假设是非常具有挑战性的, One-class SVM 在这些情况下给出了有用的结果。

下面的例子说明了当数据越来越少的单峰时, covariance.EllipticEnvelope 如何降低。 svm.OneClassSVM 在具有多种模式和 ensemble.IsolationForest 和 neighbors.LocalOutlierFactor 的数据在每种情况下表现良好。

对于以和well-centered的非线性模式,svm.OneClassSVM 不能受益于inlier群体的旋转对称性。 此外,它适合训练集中存在的异常值。 相反,基于拟合协方差的covariance.EllipticEnvelope 学习一个椭圆,这适合于inlier分布。ensemble.IsolationForest 和 neighbors.LocalOutlierFactor 表现也好。

由于inlier分布变为双峰,所以covariance.EllipticEnvelope 不适合内部值。 但是,我们可以看到ensemble.IsolationForest,svm.OneClassSVM 和 neighbors.LocalOutlierFactor 在检测这两种模式时遇到困难,而且 svm.OneClassSVM往往会过度复杂:因为它没有 内在模型,它解释了一些区域,偶尔有一些异常值聚集在一起,作为内在的。

如果inlier分布非常高斯,则 svm.OneClassSVMensemble.IsolationForest 和 neighbors.LocalOutlierFactor 一样 能够恢复合理的近似, 而 covariance.EllipticEnvelope 完全失败。

例子:

中文文档: http://sklearn.apachecn.org/cn/stable/modules/outlier_detection.html

英文文档: http://sklearn.apachecn.org/en/stable/modules/outlier_detection.html

官方文档: http://scikit-learn.org/stable/

GitHub: https://github.com/apachecn/scikit-learn-doc-zh(觉得不错麻烦给个 Star,我们一直在努力)

贡献者: https://github.com/apachecn/scikit-learn-doc-zh#贡献者

关于我们: http://www.apachecn.org/organization/209.html

有兴趣的们也可以和我们一起来维护,持续更新中 。。。

机器学习交流群: 629470233

我的博客即将同步至腾讯云+社区,邀请大家一同入驻。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能LeadAI

BAT机器学习面试1000题系列(第1~75题)

今17年,近期和团队整理BAT机器学习面试1000题系列,侧重机器学习、深度学习。我们将通过这个系列索引绝大部分机器学习和深度学习的笔试面试题、知识点,它将更是...

5335
来自专栏大数据挖掘DT机器学习

R语言与机器学习(分类算法)支持向量机

说到支持向量机,必须要提到july大神的《支持向量机通俗导论》,个人感觉再怎么写也不可能写得比他更好的了。这也正如青莲居士见到崔颢的黄鹤楼后也...

2804
来自专栏量化投资与机器学习

【Python机器学习】系列之特征提取与处理篇(深度详细附源码)

第1章 机器学习基础 将机器学习定义成一种通过学习经验改善工作效果的程序研究与设计过程。其他章节都以这个定义为基础,后面每一章里介绍的机器学习模型都是按照这个...

6957
来自专栏机器学习之旅

应用:数据预处理-异常值识别

上四分位数Q3,又叫做升序数列的75%位点 下四分位数Q1,又叫做升序数列的25%位点 箱式图检验就是摘除大于Q3+3/2*(Q3-Q1),小于Q1-3/2...

903
来自专栏人工智能

如何在Python中从零开始实现随机森林

决策树可能会受到高度变异的影响,使得结果对所使用的特定测试数据而言变得脆弱。

1.2K8
来自专栏机器之心

资源 | Python 环境下的自动化机器学习超参数调优

由于机器学习算法的性能高度依赖于超参数的选择,对机器学习超参数进行调优是一项繁琐但至关重要的任务。手动调优占用了机器学习算法流程中一些关键步骤(如特征工程和结果...

1164
来自专栏Brian

数据挖掘

---- 概述 最近一直在学习数据挖掘和机器学习,无论是是服务端开发人员还是web开发人员,个人觉得最起码都要都一些最基本的数据挖掘和机器学习知识。废话少说,我...

2775
来自专栏AI研习社

房价会崩盘吗?教你用 Keras 预测房价!(附代码)

书中其中一个应用例子就是用于预测波士顿的房价,这是一个有趣的问题,因为房屋的价值变化非常大。这是一个机器学习的问题,可能最适用于经典方法,如 XGBoost,因...

1292
来自专栏AI研习社

如何对非结构化文本数据进行特征工程操作?这里有妙招!

文本数据通常是由表示单词、句子,或者段落的文本流组成。由于文本数据非结构化(并不是整齐的格式化的数据表格)的特征和充满噪声的本质,很难直接将机器学习方法应用在原...

4306
来自专栏人工智能头条

如何使用 RNN 模型实现文本自动生成 |

1431

扫码关注云+社区