异常检测(二)——IsolationForest
1、简介
孤立森林(Isolation Forest)是另外一种高效的异常检测算法,它和随机森林类似,但每次选择划分属性和划分点(值)时都是随机的,而不是根据信息增益或者基尼指数来选择。在建树过程中,如果一些样本很快就到达了叶子节点(即叶子到根的距离d很短),那么就被认为很有可能是异常点。因为那些路径d比较短的样本,都是因为距离主要的样本点分布中心比较远的。也就是说,可以通过计算样本在所有树中的平均路径长度来寻找异常点。
sklearn提供了ensemble.IsolationForest模块可用于Isolation Forest算法。
2、主要参数和函数介绍
class sklearn.ensemble.
IsolationForest
( n_estimators=100 , max_samples=’auto’ , contamination=0.1 , max_features=1.0 , bootstrap=False , n_jobs=1 , random_state=None , verbose=0 )
参数:
n_estimators : int, optional (default=100)
森林中树的颗数
max_samples : int or float, optional (default=”auto”)
对每棵树,样本个数或比例
contamination : float in (0., 0.5), optional (default=0.1)
这是最关键的参数,用户设置样本中异常点的比例
max_features : int or float, optional (default=1.0)
对每棵树,特征个数或比例
函数:
fit(X)
Fit estimator.(无监督)
predict(X)
返回值:+1 表示正常样本, -1表示异常样本。
decision_function(X)
返回样本的异常评分。 值越小表示越有可能是异常样本。
3、IsolationForest实例
#!/usr/bin/python
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
from scipy import stats
rng = np.random.RandomState(42)
# 构造训练样本
n_samples = 200 #样本总数
outliers_fraction = 0.25 #异常样本比例
n_inliers = int((1. - outliers_fraction) * n_samples)
n_outliers = int(outliers_fraction * n_samples)
X = 0.3 * rng.randn(n_inliers // 2, 2)
X_train = np.r_[X + 2, X - 2] #正常样本
X_train = np.r_[X_train, np.random.uniform(low=-6, high=6, size=(n_outliers, 2))] #正常样本加上异常样本
# fit the model
clf = IsolationForest(max_samples=n_samples, random_state=rng, contamination=outliers_fraction)
clf.fit(X_train)
# y_pred_train = clf.predict(X_train)
scores_pred = clf.decision_function(X_train)
threshold = stats.scoreatpercentile(scores_pred, 100 * outliers_fraction) #根据训练样本中异常样本比例,得到阈值,用于绘图
# plot the line, the samples, and the nearest vectors to the plane
xx, yy = np.meshgrid(np.linspace(-7, 7, 50), np.linspace(-7, 7, 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.title("IsolationForest")
# plt.contourf(xx, yy, Z, cmap=plt.cm.Blues_r)
plt.contourf(xx, yy, Z, levels=np.linspace(Z.min(), threshold, 7), cmap=plt.cm.Blues_r) #绘制异常点区域,值从最小的到阈值的那部分
a = plt.contour(xx, yy, Z, levels=[threshold], linewidths=2, colors='red') #绘制异常点区域和正常点区域的边界
plt.contourf(xx, yy, Z, levels=[threshold, Z.max()], colors='palevioletred') #绘制正常点区域,值从阈值到最大的那部分
b = plt.scatter(X_train[:-n_outliers, 0], X_train[:-n_outliers, 1], c='white',
s=20, edgecolor='k')
c = plt.scatter(X_train[-n_outliers:, 0], X_train[-n_outliers:, 1], c='black',
s=20, edgecolor='k')
plt.axis('tight')
plt.xlim((-7, 7))
plt.ylim((-7, 7))
plt.legend([a.collections[0], b, c],
['learned decision function', 'true inliers', 'true outliers'],
loc="upper left")
plt.show()
结果:
参考文献:
http://scikit-learn.org/stable/modules/outlier_detection.html#outlier-detection
http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest
异常检测(二)——IsolationForest相关推荐
- 异常检测-孤立森林(IsolationForest)
一.原理 孤立森林是以递归方式划分数据集的各个树结构的集合.对于该过程的每一次迭代,都会选择一个随机特征,然后根据在所选特征的最小值和最大值之间随机选择一个值对数据划分.重复此过程,直到对整个数据集进 ...
- 孤立森林(IsolationForest)算法对数据进行异常检测
1.摘要 本文主要讲解:使用孤立森林(IsolationForest)算法对数据进行异常检测 主要思路: 对数据进行处理,处理成算法能识别的二维数据 使用孤立森林(IsolationForest)算法 ...
- 异常检测算( OneClassSVM、EllipticEnvelope、IsolationForest、LocalOutlierFactor)法比较,基于四个仿真数据集
异常检测算( OneClassSVM.EllipticEnvelope.IsolationForest.LocalOutlierFactor)法比较,基于四个仿真数据集 This example sh ...
- 节点图一般的比例_基于图的异常检测(二):LOCKINFER
论文:Inferring lockstep behavior from connectivity pattern in large graphs 作者:Meng Jiang,Peng Cui 来源:P ...
- 在浏览器中进行深度学习:TensorFlow.js (十二)异常检测算法
2019独角兽企业重金招聘Python工程师标准>>> 异常检测是机器学习领域常见的应用场景,例如金融领域里的信用卡欺诈,企业安全领域里的非法入侵,IT运维里预测设备的维护时间点等. ...
- 入门机器学习(二十)--编程作业-异常检测和推荐系统(Python实现)
编程作业–异常检测和推荐系统 在本练习中,我们将使用高斯模型实现异常检测算法,并将其应用于检测网络上的故障服务器. 我们还将看到如何使用协作过滤构建推荐系统,并将其应用于电影推荐数据集. Anomal ...
- (二)预处理时间序列数据用于AI预测和异常检测
目录 介绍 检查.重新格式化和清理比特币数据集 拆分比特币数据集 扩展比特币数据集 生成序列并创建数据集 下一步 下载 AnomalyDetection.zip - 17.9 MB 介绍 本系列文章将 ...
- 如何二值图转化为灰度图_AAAI 2020 | 时序转化为图用于可解释可推理异常检测
本文首发于微信公众号:时序人,关注获取更佳阅读体验 作者 | 文杰 时间序列表示学习旨在学习一个将原始时间序列自动转换为向量表示的函数,是时间序列领域研究的基本问题.近年来,将时序进行分段并学习特征表 ...
- 异常检测|深度学习(李宏毅)(二十一)
一.概述 什么是异常检测 异常检测(Anomaly Detection)的目的是要让机器"知道它不知道".具体的,对于给定的训练数据{x1,x2,⋯,xN}\left \{x^{1 ...
最新文章
- PHP扩展开发系列01 - 我要成为一名老司机
- 【SpringBoot】SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener
- (转)DevExpress 汉化(简单、实用、快速)
- air android 通信,Android超声波通信例子
- 数学家、中科院院士张景中:数学实力影响国家实力是近代以来的共识
- php7 memcached dll,php7.1和7.2的memcache.dll文件
- Linux Oracle服务启动停止脚本与开机自启动
- oracle linux下数据迁移到不同服务器
- Atitit 声音和音乐检索 多媒体信息检索 信息检索 目录 1.1. 14.4.5 音频基础知识 	1 1.2. 多媒体信息检索的方法主要有哪些?其原理是什么?	1 1.3. 基于文本的检索和基于
- 智慧通用大屏看板+智慧旅游/政府服务大屏看板+常用图表组件折线图+圆柱图+散点图+热力图+漏斗图+雷达图+航线图+中国动态地图+智慧电商实时动态数据大屏看板+智慧web端高保真大数据动态可视化大屏看板
- 子之错父之过什么意思_子不教,父之过。教不严,师之惰。是什么意思?
- 1563页Go语言中文文档,涵盖Go语言所有核心知识点
- 3.16 小红书运营10大坑,千万别掉进去了!【玩赚小红书】
- UVA 1001 Say Cheese(最短路)
- 逻辑与() 逻辑或(||)
- 如何进行日内趋势量化交易系统的设计?这篇文章可以给你启发!
- 【论文简述及翻译】FlowNet: Learning Optical Flow with Convolutional Networks(ICCV 2015)
- 专访路彦雄:理解语言其实还是很难的
- python模型预测结果 取整_sklearn 文本分类器做预测时,如何拿到预测结果。。。...
- 天刀凤凰集服务器位置,天涯明月刀手游QQ一区凤凰集开服时间表_天涯明月刀手游新区开服预告_第一手游网手游开服表...
热门文章
- JAVA毕业设计HTML5果蔬经营平台计算机源码+lw文档+系统+调试部署+数据库
- 同事多线程使用不当导致OOM,被我怼了一顿
- 手机游戏投屏软件有哪些 适合安卓用户
- QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
- 装完系统安装完驱动后重启进入系统蓝屏0X000000A5
- 一套自适应学习系统应该包括哪些环节?
- 打破惯用范式,以数学与统计构建新一代人工智能方法论
- 软件企业认定需要准备的资料
- libgdx thinking之资源生死有命
- 奶奶用保温杯装牛奶,导致孩子腹泻生病,医生:很多家长都爱犯