机器学习——LOF和孤立森林算法

104 篇文章 15 订阅
订阅专栏

机器学习——LOF和孤立森林算法


前言

在传统的机器学习中,局部异常因子(Local Outlier Factor,LOF)算法和孤立森林(Isolation Forest)算法都是常用的异常值检测算法。本文将简单介绍一下这两个算法。


在这里插入图片描述

一、局部异常因子算法(LOF)

1.1. 原理

该算法是一种用于异常检测的算法。它是基于密度的离群点检测方法,可以用来识别数据集中的异常数据点。

通过计算每个数据点与其周围邻域数据点的密度之比,来判断当前数据点是否为异常点。如果一个样本数据点的密度比邻域数据点相对较低,则该数据点可能是一个异常点。

算法的步骤如下:

  1. 对每个数据点计算其与其周围邻域数据点的距离。(周围邻域数据点由K最近邻给出)

  2. 对每个数据点计算其邻域密度,即与其邻域数据点的平均距离的倒数(即局部可达密度(LRD))

  3. 对于每个数据点,计算其局部异常因子(LOF)值,即其邻域数据点的邻域密度与该数据点的邻域密度之比的平均值。

  4. 根据LOF值判断每个数据点是否为异常点。(LOF值越大表示该数据点相对于其邻域数据点的密度越低,越有可能是一个异常点)

也就是说,对于一个样本数据点,先通过K最近邻找出其邻域数据点,计算其与邻域数据点的距离,再取距离平均值的倒数(即LRD),当LRD是一个较大的值时,说明平均距离较小,则可得出该数据点的邻域密度较大。
然后再其每个邻域数据点的LRD与该数据点的LRD相除,再计算平均值,得到的结果自然便是LOF值,当LOF值较大时,说明该数据点的局部密度相对于邻域数据点的局部密度较小。

LOF算法的优点是能够发现各种形状的异常点,并且对于不同密度区域内的异常点具有较好的鲁棒性。

LOF算法的结果是一个异常值得分,而不是二进制的异常值标记。可以根据得分的阈值来确定哪些观测值被认为是异常值。

1.2. 代码实现

from sklearn.neighbors import LocalOutlierFactor
import numpy as np
import pandas as pd
np.random.seed(0)
normal_data = np.random.normal(loc=0, scale=1, size=(100, 2))
outlier_data = np.random.normal(loc=10, scale=1, size=(10, 2))
#合并
data = np.concatenate((normal_data, outlier_data), axis=0)
data = pd.DataFrame(data= data,columns= ["x1","x2"])

lof = LocalOutlierFactor(n_neighbors= 20)
y_pred = lof.fit_predict(data)
data["lof"] = y_pred
#LOF统计离群点个数
print(data["lof"].value_counts())
 1    96
-1    14
#print(data.query("lof == -1"))

#可视化
import matplotlib.pyplot as plt
plt.style.use("ggplot")
sc = plt.scatter(data.x1,data.x2,c= data.lof)
handles,labels = sc.legend_elements()
plt.legend(handles,labels)
plt.show()

在这里插入图片描述

当K最近邻值为较小的数时,如n_neighbors= 3,(可见异常点为数据集中两个区域的异常点,即局部异常点)
如图所示:
在这里插入图片描述

二、孤立森林(Isolation Forest)

2.1. 原理

孤立森林算法基于树的构建,通过将样本随机划分到树的不同分支中来检测异常值。
它和随机森林类似,但每一次选择划分属性和划分点时都是随机的,而不是根据信息增益和基尼指数来选择

算法步骤:

  1. 对于给定的样本集合,孤立森林算法首先随机选择一个特征和一个切割值,将样本划分到两个分支中。
  2. 然后,重复上述过程,递归地构建二叉树,直到每个叶子节点只包含一个样本或达到预定的树的最大深度。
  3. 最后,孤立森林算法根据样本在树中的路径长度来评估其异常程度。路径长度越短,表示样本点越异常。

路径长度越短,表示样本点在构建孤立森林时被更早地分离出来,与其他样本点的关联性较低(即距离主要的样本点的分布中心比较远),因此可以被认为是更异常的点。

其结果是二进制的异常值标记,-1表示异常值,1表示正常值。可根据需要调整contamination参数来控制异常值的比例。

2.2. 代码实现

np.random.seed(42)
from sklearn.ensemble import IsolationForest
outlier = IsolationForest(
    n_estimators= 200,
    contamination= 0.16,
    random_state= 42
)
y_pred = outlier.fit_predict(data)
data["y_pred"] = y_pred
print(data["y_pred"].value_counts())
 1    92
-1    18

#孤立森林可视化异常点
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
sns.scatterplot(
    x = data["x1"],
    y = data["x2"],
    hue= data["y_pred"]
)
plt.show()

在这里插入图片描述

三、比较

  1. LOF算法的计算复杂度较高,它需要计算每个数据点与其邻近点的距离,并计算密度比值。
    孤立森林算法的计算复杂度相对较低,因为它只需要构建一棵二叉树,并计算路径长度。

  2. LOF算法对于局部异常点的检测效果较好,可以识别出分布在不同密度区域的异常点。
    孤立森林算法对于全局异常点的检测效果较好,可以快速识别出在整个数据集中与其他点关联性较低的异常点。

四、局部(全局)异常

局部异常和全局异常是异常点在数据集中的不同类型。

4.1. 局部异常

局部异常是指在数据集中相对于其周围邻近点而言,具有较低密度的点

这意味着局部异常点与其邻近点之间的距离较远,该点的密度较低。
局部异常点通常是在数据集中分布在不同密度区域的点,可能表示数据中的特殊情况或异常情况。

4.2. 全局异常

全局异常是指在整个数据集中相对于其他点而言,具有较低关联性的点

这意味着全局异常点与其他点之间的关联性较低,可能是数据集中的离群点或异常点。
全局异常点通常是在整个数据集中相对较少见的点,与其他点的关联性较弱。

4.3. 区别

局部异常点主要关注数据集中不同密度区域中的异常情况,而全局异常点主要关注整个数据集中与其他点关联性较低的异常情况。
这意味着局部异常点可能是数据集中特定区域的异常点,而全局异常点可能是整个数据集中的离群点。


总结

本文介绍了两个异常值检测算法:LOF和iForest算法,然后对它们进行了比较(前者主要关注数据集中不同密度区域的异常;后者则关注整个数据集中与其它点关联性较低的异常),LOF算法对局部异常点的检测较好,iForest算法对全局异常点的检测较好。最后简单介绍了一下局部与全局异常。

无名,天地之始;有名,万物之母。

–2023-9-10 筑基篇

异常值挖掘方法——孤立森林Isolation Forest
fengjiandaxia的博客
03-16 4177
异常值挖掘方法 一、内容概览 内容大致分为两大部分,第一部分是异常值挖掘方法概述,简略介绍异常值挖掘方法的分类及其优缺点。第二部分介绍孤立森林算法(iForest),Isolation Forest 简称 iForest,该算法是周志华在2010年提出的一个异常值检测算法,在工业界很实用,算法效果好,时间效率高。第二部分包括对iForest算法思想、原理、流程的介绍,以及来自sklearn官网上的一个iForest例子实战讲解,并附上代码与注释。 二、异常值挖掘方法概述 2.1统计量检验 先对变量做一个描述
孤立森林算法matlab实现,隔离林在MATLAB和python中的简单应用,isolationforest,上
weixin_32460203的博客
03-23 2992
1 问题描述数据中的异常值的检测异常点,也称为离群点。离群点检测算法主要看到了isolation forest算法和local outlier factor(LOF)算法LOF算法的具体原理在LOF离群因子检测算法及python3实现中讲得很清楚,简单来说就是如果节点距离它周围k个节点的距离很远,他就有可能是离群点。isolation forest算法主要看了iForest (Isolation...
使用案例学习LOF算法
06-22
本文使用具体的案例详细讲解LOF算法的计算过程,需要对该算法有清楚理解的tx值得下载,可以帮助你快速准确的理解异常检测中的LOF算法
LOF算法实现
12-28
lof为基于密度的离群点检测算法,该上传代码,能够直观显示每个数据点的离群因子大小,帮助理解该算法
孤立森林-一个通过XJB乱分进行异常检测的算法
weixin_39136172的博客
03-21 6521
孤立森林(isolation Forest)算法,2008年由刘飞、周志华等提出,算法不借助类似距离、密度等指标去描述样本与其他样本的差异,而是直接去刻画所谓的疏离程度(isolation),因此该算法简单、高效,在工业界应用较多。 Isolation Forest算法的逻辑很直观,算法采用二叉树对数据进行分裂,样本选取、特征选取、分裂点选取都采用随机化的方式(我称之为瞎几把乱分,诶,但是人家效果出奇的好,你说气人不)。如果某个样本是异常值,可能需要很少次数就可以切分出来,看看下面这个不大恰当的例子。
孤立森林(Isolation Forest)算法剖析
热门推荐
小数据研究院
07-25 1万+
之后会持续更新算法剖析系列,力图用最生动的例子演示每一个算法的原理,不稀里糊涂做一个调包侠。欢迎持续关注,指正不足。 孤立森林(Isolation Forest)算法是西瓜书作者周志华老师的团队研究开发的算法,一般用于结构化数据的异常检测。 异常的定义 针对于不同类型的异常,要用不同的算法来进行检测,而孤立森林算法主要针对的是连续型结构化数据中的异常点。 使用孤立森林的前提是,将异常点定义...
机器学习 | 异常检测】孤立森林(isolation Forest)iForest 算法理论讲解及 Python 实战
wzk4869的博客
01-19 7128
机器学习 | 异常检测】孤立森林(isolation Forest)iForest 算法理论讲解及 Python 实战
孤立森林介绍
Andy_shenzl的博客
08-11 9399
1、孤立森林介绍 iForest(IsolationForest)孤立森林是一个基于Ensemble的快速异常检测方法,具有线性时间复杂度和高精准度,是符合大数据处理要求的state-of-the-art算法。 其可以用于网络安全中的攻击检测,金融交易欺诈检测,疾病侦测,和噪声数据过滤等。 iForest适用与连续数据的异常检测,将异常定义为“容易被孤立的离群点 ”——可以理解为分布稀...
python分类算法svm_Python机器学习笔记:异常点检测算法——One Class SVM
weixin_39900045的博客
12-06 1177
完整代码及其数据,请移步小编的GitHub传送门:请点击我如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote前言最近老板有一个需求,做单样本检测,也就是说只有一个类别的数据集与标签,因为在工厂设备中,控制系统的任务是判断是是否有意外情况出现,例如产品质量过低,机器产生奇怪的震动或者机器零件脱落等。相对来说容易得到正常场景下的训练数据,...
isolation forest在MATLAB和python上的简单应用
奇迹的博客
09-19 3272
isolation forest在MATLAB和python上的简单应用1 问题描述2 isolation forest3 MATLAB实现isolation forest4 python实现isolation fores5 遇到的问题 1 问题描述 数据中的异常值的检测 异常点,也称为离群点。离群点检测算法主要看到了isolation forest算法和local outlier factor(LOF算法LOF算法的具体原理在 LOF离群因子检测算法及python3实现 中讲得很清楚,简单来说就是如
LOF算法MATLAB实现
09-25
LOF离群因子算法,是基于密度的用于噪声和异常数据检测的常用算法,它通过为每个数据计算异常因子,来判断该数据是否为噪声或干扰数据。
使用Python编写LOF算法
06-22
这篇文章对LOF算法进行了详细的描述, 并用Python语言做了具体的实现,此外给出了详尽的例子和绘图,想要了解该算法的tx可以下载本文,值得推荐!
Python机器学习笔记——One Class SVM
weixin_30861797的博客
05-11 3505
前言   最近老板有一个需求,做单样本检测,也就是说只有一个类别的数据集与标签,因为在工厂设备中,控制系统的任务是判断是是否有意外情况出现,例如产品质量过低,机器产生奇怪的震动或者机器零件脱落等。相对来说容易得到正常场景下的训练数据,但故障系统状态的收集示例数据可能相当昂贵,或者根本不可能。如果可以模拟一个错误的系统状态,问题就好解决多了,但无法保证所有的错误状态都被模拟到,所以只能寻找单样本检...
isolation forest
葫芦与瓢的博客
06-07 1万+
 摘要:iForest用于挖掘异常数据,如网络安全中的攻击检测和流量异常分析,金融机构则用于挖掘出欺诈行为。算法对内存要求很低,且处理速度很快,其时间复杂度也是线性的。可以很好的处理高维数据和大数据,并且也可以作为在线异常检测。 01 孤立森林 isolation,意为孤立/隔离,是名词,其动词为isolate,forest是森林,合起来就是“孤立森林”了,也有叫“独异森林”,好
孤立森林算法_Isolation Forest算法梳理??
weixin_39614546的博客
11-21 814
异常是一个观测值,其偏离其他观测值太多以至于可以合理地推测该观测来自于其他机制,孤立森林 是一个基于 的快速异常检测方法,具有线性时间复杂度和高精准度。其可以用于网络安全中的攻击检测,金融交易欺诈检测,疾病侦测,和噪声数据过滤等。本文的pdf版本已上传至Github,如果有需要可以自行下载。如果你觉得有帮助的话,欢迎点个赞,比心 !1 的构建孤立森林算法的理论基础有两点: 提到森林,自然...
【大数据】孤立森林算法
最新发布
大雨淅淅的博客
09-01 1102
孤立森林算法是一种用于异常检测的机器学习算法。它基于这样的直觉:异常点是数据中的少数派,它们在特征空间中的分布与正常数据点不同,通常表现为与大多数数据点的距离较远。孤立森林通过构建多棵孤立树(Isolation Trees)来实现异常点的检测。
机器学习】 Local Outlier Factor(LOF算法
ysq96的博客
07-28 649
转载自:https://blog.csdn.net/Zhang_Chen_/article/details/90612028
【R文档】1 isolation.forest/孤立森林算法
lyt415528的博客
03-12 1194
[未完待续……] 目录1.辅助信息2.基本描述3.句法4.案例案例1:检测一个明显的离群值 1.辅助信息 包名称:isotree​ 包的版本:0.5.14 网址:英文R文档 2.基本描述 孤立森林算法最初是为了检测离群值(有时称为异常值)的算法。在基本孤立森林的基础上,还形成了速度更快的SCiForest算法、找到聚类离群值的FCF算法。 3.句法 4.案例 案例1:检测一个明显的离群值 伪代码: 生成2个特征的(随机值)数据 加入一个明显的离散值(行) 拟合模型 计算结果 显示结果 # 生成2个特征的数据
孤立随机森林算法
cz的博客
03-21 628
针对于不同类型的异常,要用不同的算法来进行检测,而孤立森林算法主要针对的是连续型结构化数据中的异常点。使用孤立森林的前提是,将异常点定义为那些 “容易被孤立的离群点” —— 可以理解为分布稀疏,且距离高密度群体较远的点。从统计学来看,在数据空间里,若一个区域内只有分布稀疏的点,表示数据点落在此区域的概率很低,因此可以认为这些区域的点是异常的。异常数据占总样本量的比例很小;异常点的特征值与正常点的差异很大。上图中,中心的白色空心点为正常点,即处于高密度群体中。
孤立森林算法精确率低该修改什么参数
05-09
孤立森林算法的精确率低可能是因为以下原因: 1. 样本数据集中存在异常值或噪声数据,导致算法难以准确地判断离群点。 2. 样本数据集的维度较高,导致算法在寻找离群点时变得更加困难。 针对以上问题,可以尝试以下调整参数: 1. 调整随机森林中的树的数量,增加树的数量可以提高算法的准确性。 2. 调整随机森林中每个树的最大深度,减小深度可以避免过拟合。 3. 对于高维数据集,可以使用降维技术,如主成分分析(PCA)等。 4. 对于存在异常值或噪声数据的数据集,可以考虑使用其他离群点检测算法,如基于密度的离群点检测算法LOF)等。 需要根据具体情况进行调整,不同的数据集和问题可能需要不同的参数设置。
173
原创
1135
点赞
1884
收藏
854
粉丝
关注
私信
写文章

热门文章

  • 机器学习——支持向量机(SVM) 15954
  • 机器学习——决策树与随机森林 13819
  • 实验篇—— 基因家族Motif 分析 9760
  • 实验篇——基因组共线性分析 8463
  • 百日筑基篇——差异基因分析Limma包(R语言初识七) 8160

分类专栏

  • 文献精读 3篇
  • 实验室——生信分析 21篇
  • 项目研究 3篇
  • 生物技术笔记 17篇
  • 其它 6篇
  • python篇 104篇
  • linux学习篇 6篇
  • 算法学习 5篇
  • R语言篇 11篇

最新评论

  • 文献精读【1】——对东亚一种关键森林树木的当地适应和未来气候导致的脆弱性的基因组研究

    星石传说: 我就是用的vs code插件Code Geex,或者通义灵码

  • 文献精读【1】——对东亚一种关键森林树木的当地适应和未来气候导致的脆弱性的基因组研究

    阳洋杨~扬: 做的特别好,学习了。想请教你用的是哪个AI翻译工具?

  • 在Flask中使用MySQL数据库

    °3: 可以发一下目录结构吗

  • 百日筑基篇—— Linux介绍(Linux入门一)

    MIhard160: 太优秀了 好有恒心 去哪读研啊

  • 以flask为后端的博客项目——星云小窝

    星石传说: 而且我在项目启动的博客里也放了GitHub链接表情包

最新文章

  • 文献精读【1】&& 补充 ——对于【1】的结合ppt进行的简要汇报
  • 文献精读【1】——对东亚一种关键森林树木的当地适应和未来气候导致的脆弱性的基因组研究
  • 群体遗传结构的分析并绘图
2024
07月 22篇
04月 4篇
03月 7篇
02月 10篇
01月 8篇
2023年122篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星石传说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家德惠玻璃钢雕塑工程价格洛阳景观玻璃钢彩绘雕塑报价南平玻璃钢花盆花器玻璃钢雕塑的艺术色攀枝花玻璃钢雕塑高性价玻璃钢雕塑丹阳商场秋季美陈上海玻璃钢花盆采购玻璃钢白雪公主雕塑淘宝发布玻璃钢雕塑选哪个类目上海特色玻璃钢雕塑广东通道商场美陈厂家直销玻璃钢仿铜雕塑价格你了解玻璃钢雕塑的制作过程吗淮安商场主题美陈商场店庆美陈春季成都火山影院玻璃钢雕塑湖北公园玻璃钢雕塑联系方式商场秋季dp服装美陈酒桶玻璃钢雕塑厂家北京保定玻璃钢雕塑厂家珠海玻璃钢卡通雕塑销售黑龙江玻璃钢卡通雕塑玻璃钢藏式雕塑金昌公园玻璃钢雕塑宿州玻璃钢雕塑多少钱一平米信阳玻璃钢卡通雕塑哪家好南宁步行街玻璃钢雕塑乐山玻璃钢仿铜雕塑价格云南仿铜玻璃钢雕塑多少钱香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化