妙不可言,Sklearn 做异常检测这么简单
文章目录
- 离群检测 与 新奇检测
- Sklearn 中支持的方法
- 孤立森林 IsolationForest
- Local Outlier Factor
- OneClassSVM
- Elliptic Envelope
离群检测 与 新奇检测
很多应用场景都需要能够确定样本是否属于与现有的分布,或者应该被视为不同的分布。
离群检测(Outlier detection):训练数据包含离群值,这些离群值被定义为与其他观察值相差甚远的观察值。
新奇检测 (Novelty detection):训练数据没有离群点,需要观察新的样本是否包含离群点。
离群检测和新颖性检测都用于异常检测,其中人们对检测异常或不寻常的观察感兴趣。离群检测也称为无监督异常检测,新奇检测称为半监督异常检测。
在离群检测中离群值不能形成密集的集群,因为可以假设离群值位于低密度区域。相反在新颖性检测中,新颖性处于训练数据的低密度区域。
Sklearn 中支持的方法
如下图为scikit-learn 中异常值检测算法的比较,IsolationForest
和LocalOutlierFactor
在此处考虑的数据集上表现相当不错。而OneClassSVM
对离群值很敏感,因此在离群值检测方面表现不佳。
但OneClassSVM
仍可用于异常值检测,但需要微调其超参数nu
以处理异常值并防止过度拟合。SGDOneClassSVM
提供了复杂度更低的实现。而EllipticEnvelope
假设数据是高斯分布的并学习一个椭圆。
ensemble.IsolationForest
neighbors.LocalOutlierFactor
svm.OneClassSVM
linear_model.SGDOneClassSVM
covariance.EllipticEnvelope
孤立森林 IsolationForest
孤立森林(Isolation Forest)是一种异常值检测算法。它通过建立多棵决策树,并在每棵树中随机选取一个特征将数据集划分为两个子集来实现异常值检测。与其他决策树算法不同的是,孤立森林算法并不是用来预测目标变量的值的,而是用来预测数据点是否是异常值。
为了计算出每个数据点是否是异常值,孤立森林算法对每个数据点计算出一个分数,称为异常分数。数据点的异常分数越低,说明它越可能是一个异常值。通常情况下,我们可以设定一个阈值,如果数据点的异常分数低于这个阈值,就认为这是一个异常值。
关键参数:
n_estimators:学习器个数
max_samples:采样最大样本个数
max_features:采样最大特征个数
from sklearn.ensemble import IsolationForest
X = [[-1.1], [0.3], [0.5], [100]]
clf = IsolationForest(random_state=0).fit(X) # 预测特定样本是否为异常值
# 对于每个观察值,返回 (+1 或 -1) 分别代表正常样本和异常值
clf.predict([[0.1], [0], [90]])
Local Outlier Factor
Local Outlier Factor (LOF) 是一种用于检测数据集中异常或异常数据点的算法。LOF 背后的基本思想是测量给定数据点与其相邻数据点的局部偏差。如果一个点与其相邻点有显着差异,则将其视为异常值。一个点被视为离群值的程度通过称为局部离群值因子的度量来量化。
首先确定该点邻居的密度,密度计算方法是将给定距离内的邻居数除以具有该距离的球体的体积。较高邻居密度的点被认为比具有较低邻居密度的点更不离群。然后将一个点的 LOF 计算为该点与其相邻点的密度之比。具有高 LOF 值的点被认为是异常值。
关键参数:
n_neighbors:最近邻样本个数
metric:距离计算方法
import numpy as np
from sklearn.neighbors import LocalOutlierFactor
X = [[-1.1], [0.2], [101.1], [0.3]]
clf = LocalOutlierFactor(n_neighbors=2) # 异常/离群值返回 -1,离群值返回 +1
clf.fit_predict(X)
OneClassSVM
OneClassSVM是一种用于检测异常点的算法,是一种无监督学习算法。决策边界将数据点分为两类:内点和外点。非离群点是与训练集中的大多数点相似的点,而离群点是与训练集中的大多数点显着不同的点。
为了学习决策边界,OneClassSVM最大化边界和内点之间的距离,最终找到合适的超平面。这个超平面可以最大化内点和决策边界之间的边距。一旦学习了决策边界,就可以使用它来将新点分类为内点或异常点。
关键参数:
kernel:SVM内核类型
nu:训练误差分数的上限
from sklearn.svm import OneClassSVM
X = [[0], [0.44], [0.45], [0.46], [1]]
clf = OneClassSVM(gamma='auto').fit(X) # 异常/离群值返回 -1,离群值返回 +1
clf.predict(X)
在实际使用中OneClassSVM
速度较慢,因此可以考虑使用随机梯度下降求解线性的SVM来代替,也就是SGDOneClassSVM
。
Elliptic Envelope
椭圆包络(Elliptic Envelope)是一种检测数据集中异常或异常数据点的方法。它是一种无监督学习方法,通过将椭圆拟合到训练集中的数据点来工作,但假设大多数点遵循高斯分布。
为了拟合椭圆,椭圆包络估计数据点的均值和协方差,并使用这些估计值来确定椭圆的形状和方向。一旦学习了椭圆,它就可以用来将新点分类为内点或异常点。
import numpy as np
from sklearn.covariance import EllipticEnvelope
true_cov = np.array([[.8, .3], [.3, .4]])
X = np.random.RandomState(0).multivariate_normal(mean=[0, 0], cov=true_cov, size=500)
cov = EllipticEnvelope(random_state=0).fit(X)
# predict returns 1 for an inlier and -1 for an outlier
cov.predict([[0, 0], [3, 3]])
妙不可言,Sklearn 做异常检测这么简单相关推荐
- 以实时风控场景为例,阿里云实时计算如何来做异常检测?
内容来源:本文内容由阿里云实时计算,流计算团队提供.IT 大咖说(微信id:itdakashuo)作为独家合作方,经授权发布. 阅读字数:3102 | 8分钟阅读 前言 DT时代,数据是最重要的生产资 ...
- AIOps中异常检测的简单应用
女主宣言 异常检测是AIOps领域中最为常见也是十分重要的一个问题,它将直接影响到报警产生以及后续所有自愈动作的开展.异常检测作为运维领域的通用场景,已经存在很多的方法模型可以使用.但是各个方法之间的 ...
- 使用计算机视觉来做异常检测
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:Mia Morton 编译:ronghuaiyang(AI公园) 导读 创建异常检测模型,实现生 ...
- 使用计算机视觉来做异常检测!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Mia Morton,来源:AI公园 导读 创建异常检测模型,实现 ...
- 关于如何使用机器学习来做异常检测的7个问题
导读 异常检测的一些入门问题. 问问题是学习的好方法之一.但有时你不知道从哪里开始,或者该问什么 -- 尤其是在你还比较熟悉的异常检测之类的话题上.在这种情况下,最好倾听别人的问题,让他们的思路来指导 ...
- 【机器学习基础】关于如何使用机器学习来做异常检测的7个问题
作者:David Sweenor 编译:ronghuaiyang 导读 异常检测的一些入门问题. 问问题是学习的最好方法之一.但有时你不知道从哪里开始,或者该问什么 -- 尤其是在你还比较熟悉的 ...
- 用计算机视觉来做异常检测
点击上方"CVer",选择加"星标"置顶 重磅干货,第一时间送达 本文转载自:AI公园 作者:Mia Morton | 编译:ronghuaiyang 导读 ...
- MATLAB算法实战应用案例精讲-【数据分析】基于sklearn的异常检测(附matlab、R语言和python代码实现)
目录 前言 几个高频面试题目 离群检测 与 新奇检测的区别 算法原理
- 不仅仅生成图片,用GAN做无监督的异常检测
原文:https://zhuanlan.zhihu.com/p/32505627 GAN被LeCun赞为继CNN之后最为重要的一个工作,其原因在于让各位惊呼"这才有点人工智能的样子" ...
最新文章
- Linux学习(四)---用户管理
- OpenGL编程指南11:组合运动示例2—创建机器人手臂模型
- linux发送http请求xml报文,使用curl命令行发送/发布xml文件
- qpython3使用手册图_qpython图形
- ES6必知必会 (七)—— Generator 函数
- springboot pom 依赖
- Tableau可视化学习笔记:day13-14
- 了解RxJava以及如何在Android应用中使用它
- 人工智能与自动驾驶汽车_自动驾驶汽车中的道德AI
- opencv项目6----AI绘画(隔空绘画)
- 怎样清理计算机c盘东西,电脑c盘满了怎么清理
- 百度翻译API接口的使用
- 千峰商城-springboot项目搭建-06-数据库创建
- c语言求等差数列的和oj,华为oj之等差数列前n项和
- vuex-persist实现vux持久化
- 如何使用 Backblaze 和 Cloudflare 搭建免费 CDN - 让白-piao进行到底
- 什么是RTOS系统定义分析
- 关于oracle数据库总结(三)
- ​left join 和 left semi join区别 ​
- mysql以blob存储图片文件的存储和读取问题解决