我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python+Sklearn实现异常检测

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python+Sklearn实现异常检测

离群检测 与 新奇检测

很多应用场景都需要能够确定样本是否属于与现有的分布,或者应该被视为不同的分布。

  • 离群检测(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]])  

到此这篇关于Python+Sklearn实现异常检测的文章就介绍到这了,更多相关Python Sklearn异常检测内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python+Sklearn实现异常检测

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python+Sklearn实现异常检测

这篇文章主要为大家详细介绍了Python如何利用Sklearn实现异常检测,文中的示例代码讲解详细,对我们学习Python有一定的帮助,感兴趣的可以跟随小编一起学习一下
2022-12-22

Python中怎么实现异常检测

Python中怎么实现异常检测,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。公式和过程与我之前解释过的其他机器学习算法相比,这要简单得多。该算法将使用均值和方差来计算每个训
2023-06-16

8种Python异常检测算法总结

异常检测是通过数据挖掘方法发现与数据集分布不一致的异常数据,也被称为离群点、异常值检测等等。本文为大家整理了8个常见的Python异常检测算法,希望对大家有所帮助
2023-02-06

机器学习——异常检测

异常点检测(Outlier detection),⼜称为离群点检测,是找出与预期对象的⾏为差异较⼤的对象的⼀个检测过程。这些被检测出的对象被称为异常点或者离群点。异常点(outlier)是⼀个数据对象,它明显不同于其他的数据对象。异常点检测
2023-08-23

Python实现端口检测

一、背景:在平时工作中有遇到端口检测,查看服务端特定端口是否对外开放,常用nmap,tcping,telnet等,同时也可以利用站长工具等web扫描端口等。但是在使用站长工具发现:每次只能输入一个检测的地址;虽然可以输入多个端口,但是不能指
2023-01-31

如何在MongoDB中实现数据的实时异常检测功能

如何在MongoDB中实现数据的实时异常检测功能近年来,大数据的快速发展带来了数据规模的猛增。在这个海量的数据中,异常数据的检测变得越来越重要。MongoDB是目前流行的非关系型数据库之一,具有高可扩展性和灵活性的特点。本文将介绍如何在Mo
2023-10-22

怎么用Python中从头开始的实现完整的异常检测算法

这篇文章主要介绍“怎么用Python中从头开始的实现完整的异常检测算法”,在日常操作中,相信很多人在怎么用Python中从头开始的实现完整的异常检测算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Py
2023-06-16

PyTorch中怎么进行异常检测

在PyTorch中,可以使用异常检测的方法来检测异常值。以下是一个简单的示例:import torch# 创建一个包含随机数的张量x = torch.randn(5, 5)# 设置阈值threshold = 2.0# 检测异常值ma
PyTorch中怎么进行异常检测
2024-03-05

Python OpenCV实现边缘检测

本文实例为大家分享了Python OpenCV实现边缘检测的具体代码,供大家参考,具体内容如下 1. Sobel 算子检测 Sobel 算子是高斯平滑和微分运算的组合,抗噪能力很强,用途也很多,尤其是效率要求高但对细纹理不是很在意的时候。
2022-06-02

Python+OpenCV实现边缘检测与角点检测详解

这篇文章主要为大家详细介绍了如何通过Python+OpenCV实现边缘检测与角点检测,文中的示例代码讲解详细,对我们学习Python与OpenCV有一定的帮助,需要的可以参考一下
2023-02-03

Python之异常值检测和处理方式是什么

这篇文章主要讲解了“Python之异常值检测和处理方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python之异常值检测和处理方式是什么”吧!1 什么是异常值?在机器学习中,异常检
2023-07-02

网络规划设计师异常检测和误用检测考点

  网络规划设计师异常检测和误用检测考点有哪些?为了方便考生及时有效的备考,编程学习网小编为大家精心整理了软考网络规划设计师异常检测和误用检测考试知识点,供大家参考和学习。如想获取更多计算机软件水平考试的模拟题及备考资料,请关注编程学习网网站的更新。  对各种事件进行分析,从中发现违反安全策略的行为是入侵检测系统的核心功能。通
网络规划设计师异常检测和误用检测考点
2024-04-18

基于LOF算法的异常值检测

目录 LOF算法简介Sklearn官网LOF算法应用实例1Sklearn官网LOF算法应用实例2基于LOF算法鸢尾花数据集异常值检测读取数据构造数据可视化,画出可疑异常点LOF算法 LOF算法简介 LOF异常检测算法是一种基
2023-08-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录