机器学习应用 | 使用 MATLAB 进行异常检测(下)

图片

在使用MATLAB 进行异常检测(上)中,我们探讨了什么是异常值,简单的一维数据异常检测问题,针对高维数据的有监督异常检测方法。

在(下)篇中,我们将和大家一起探讨无监督异常检测。

没有标签怎么办?试试无监督异常检测 

对于没有标签信息的多变量样本数据,在MATLAB 可以使用以下方法检测异常值: 

 · 马氏距离 (Mahalanobis Distance):

如果数据符合多变量正态分布,可使用样本到数据集分布中心的马氏距离检测异常。利用稳健协方差估计robustcov[2] 函数计算马氏距离,进行离群值检测。

 · 局部离群因子 (Local Outlier Factor, LOF):

基于观测点和邻近样本之间的相对密度检测异常点。利用 lof[3] 函数可以创建 LocalOutlierFactor 对象,针对训练数据,直接返回检测结果。 

· 孤立森林 (Isolation forest):

通过一组孤立树模型,将异常值和正常数据点隔离。利用 iforest[4] 函数,创建 IsolationForest 对象,针对训练数据,直接返回检测结果。

 · 单类支持向量机 (One Class SVM):

在无监督条件下,训练支持向量机模型,在变换后的高维空间,将数据点和原点分离。利用 ocsvm[5] 函数创建OneClassSVM 对象,针对训练数据,直接返回检测结果。

针对测试数据进行异常检测时,使用第一种方法的具体检测步骤将在下文中通过示例说明,如果使用另外三种算法,可以直接调用检测模型的对象函数 isanomaly()。 

图片

具体实现方式

1.

利用马氏距离检测异常值

【定义】马氏距离:一种衡量样本和数据集分布间相似度的尺度无关的度量指标,例如y到中值点的距离是d2=(y-µ)Σ-1(y-µ)',其中Σ是多维随机变量的协方差矩阵,μ为样本均值。在MATLAB中可通过pdist2函数计算: 

d = pdist2(feat,mean(feat),"mahalanobis");

马氏距离可以理解为是对欧式距离的一种修正,假设,下图中蓝色点和黄色点离样本均值的欧式距离相近,但是由于样本整体分布沿 f(x)=x 的方向分布(变量之间具有相关性),蓝色点更有可能是数据集中的点,对应的马氏距离更小,而黄色点更有可能是离群值,对应马氏距离也更大。因此,设定一个合理的阈值,可以划分异常样本和正常样本。 

图片

计算马氏距离,首先需要估计 Σ(sig) 和 μ(mu) 。极大似然估计(Maximum Likelihood Estimation, MLE)对数据中的异常值非常敏感,需要采取一种稳健的协方差估计方法,抵抗数据集中存在的异常观测数据。当数据中存在异常值时,协方差行列式偏大。使用最小协方差行列式估计 (Minimum Covariance Determinant, MCD),从 n 个数据样本中,最多选取h个观测值,找到协方差行列式最小的一组观测子集,计算其平均值和协方差,作为估计量。robustcov 函数提供了 FAST-MCD、OGK 和 Olive-Hawkins 三种算法供选择。假设训练数据集中,异常占比为 0.9%:

contaminationFraction = 0.09;[sig,mu,mah,tf] = robustcov(feat, ...    OutlierFraction=contaminationFraction);

如果数据符合正态分布的假设,马氏距离的平方值,将服从具有 Dim 个自由度的 χ2 分布,Dim 为原数据的维度。默认情况下,robustcov 函数假设数据符合多变量正态分布,并根据 χ2 分布的临界值,将输入样本的 2.5% 作为异常值,如需调整异常值占比,可以使用 chi2inv 函数,重新计算阈值:

​​​​​​​

mah_threshold = sqrt(chi2inv(1-contaminationFraction,Dim));tf_robustcov = mah > mah_threshold;

利用pdist2函数,计算测试集的马氏距离后与阈值mah_threshold进行比较:

​​​​​​​

dTest = pdist2(featureTestNoLabels.Variables, ...mean(featureTestNoLabels.Variables),"mahalanobis");isanomalyTest = dTest > mah_threshold;predTest = categorical(isanomalyTest, [1, 0], ["Anomaly", "Normal"]);

可视化检测结果:

​​​​​​​​​​​​​​

tiledlayout(3,1)nexttilegscatter(X(:,1),X(:,2),tf_robustcov,[],'ox',3)xlabel('X1')ylabel('X2')legend({'正常','异常'})title("训练样本分类结果 (tSNE降维)")
nexttileplot(d,mah,'o')line([mah_threshold, mah_threshold], [0, 30], 'color', 'r')line([0, 6], [mah_threshold, mah_threshold], 'color', 'r')hold onplot(d(tf), mah(tf), 'r+')xlabel('Mahalanobis Distance')ylabel('Robust Distance')title('DD Plot')hold off
nexttileconfusionchart(trueAnomaliesTest, predTest, ...    Title="测试结果评估-混淆矩阵 (马氏距离)", Normalization="row-normalized");

图片

小结

· 以上方法在高维数据上应用效果不理想,可以看到,测试集中异常数据假阴率高。这个方法适用于数据符合或接近正态分布的情况,但是通常情况下,实际数据的分布规律难以预估。

2.

局部离群因子

该算法通过计算样本 p 和其周围 k 个近邻点的局部可达密度(local reachability density, lrd),即观测样本 p 到近邻点的局部可达距离平均值的倒数:

图片

其中,为k近邻集合,样本p关于观测点o的局部可达距离定义为:

图片

其中 dk(0)为观测点到其近邻的第k个最小距离, d(p,0) 为样本 p 和观测点 o 之间的距离,可参考下图示意。

图片

再根据p的局部可达密度与近邻点的局部可达密度比值的平均值,量化每个样本的离群程度,具体计算可参考以下公式:

图片

Ird(·)为局部可达密度函数,|Nk(p)|为近邻数量。

因此,对于正常样本,一般 LOF 值小于或接近 1,意味着其局部可达密度和近邻点相近或更高,该样本和邻域内的样本同属一个簇,当 LOF 值大于 1 时,则可能为异常值,利用 ContaminationFraction 参数可调整 LOF 的阈值。

​​​​​​​

[mdlLOF,tfLOF,scoresLOF] = lof(feat, ...    ContaminationFraction=0.09, ...    NumNeighbors=1000, Distance="mahalanobis");[isanomalyLOF,~] = isanomaly(mdlLOF, featureTestNoLabels.Variables);predLOF = categorical(isanomalyLOF, [1, 0], ["Anomaly", "Normal"]);

可视化检测结果:

​​​​​​​

tiledlayout(3,1)nexttilegscatter(X(:,1),X(:,2),tfLOF,[],'ox',3)xlabel('X1')ylabel('X2')legend({'正常','异常'})title("训练样本分类结果 (tSNE降维)")

随机选取部分样本,查看对应 LOF 值/异常得分

​​​​​​​

nexttileidxes = randi(NumSamples,1,60);scatter(X(idxes,1),X(idxes,2),5,'filled','MarkerFaceColor','k')hold onbubblechart(X(idxes,1),X(idxes,2),scoresLOF(idxes)/100, ...'r','MarkerFaceAlpha',0);legend({'数据点','异常得分'})hold offtitle("训练样本异常得分分布")
nexttileconfusionchart(trueAnomaliesTest, predLOF, ...    Title="测试结果评估-混淆矩阵 (LOF)", Normalization="row-normalized");

图片

小结

· 优点:不受数据分布的影响,同时考虑了数据集的局部和全局属性,比较适用于中等高维的数据集,针对示例数据集的预测准确度比较理想。

· 使用限制:对近邻参数较为敏感,由于需要计算数据集中任意两个数据点的距离,算法的时间复杂度较高,在大规模数据集上效率偏低,适合小规模到中等规模的数值型数据。

3.

孤立森林

孤立森林算法中,集成了多个决策树模型,训练时,每个决策树对一个不放回采样的数据子集进行分裂,以试图将每一个观测样本划分到一个对应的叶节点上。假设异常点与其他正常数据差异较大,从根节点到对应叶节点需要经过的路径长度 (path length) 相对较短,对于每个样本,将孤立森林中的多个决策树路径长度的平均值,定义为对应样本的异常得分 (anomaly score)。

[mdlIF,tfIF,scoreTrainIF] = iforest(feat, ContaminationFraction=0.09);[isanomalyIF,~] = isanomaly(mdlIF, featureTestNoLabels.Variables);predIF = categorical(isanomalyIF, [1, 0], ["Anomaly", "Normal"]);

可视化检测结果:​​​​​​​

tiledlayout(3,1)nexttilegscatter(X(:,1),X(:,2),tfIF,[],'ox',3)xlabel('X1')ylabel('X2')legend({'正常','异常'})title("训练样本分类结果 (tSNE降维)")
nexttilehistogram(scoreTrainIF)xline(mdlIF.ScoreThreshold,"k-",join(["Threshold =" mdlIF.ScoreThreshold]))title("训练样本异常得分分布")
nexttileconfusionchart(trueAnomaliesTest, predIF, ...    Title="测试结果评估-混淆矩阵 (孤立森林)", Normalization="row-normalized");

图片

小结

· 优点:适合高维表格数据,不需要计算关于距离和密度的指标,具有线性时间复杂度,每个决策树可独立采样,支持并行化处理来实现加速。

· 使用限制:孤立森林适用于训练集和测试集中,正常样本和异常样本占比接近的情况,且异常样本的特征与正常样本差异很大。

4.

单类支持向量机

单类支持向量机,或无监督支持向量机,构建决策边界,将训练集中的数据点尽可能划分为一个类别,位于决策边界之外的数据则为异常值。

策略是通过核函数将数据映射到新的高维特征空间,在数据与原点间构建超平面(n 维平面)。因为,在低维空间中的非线性特征往往不是线性可分的,在扩展到高维空间后是可分的。在 MATLAB 中,一种实现方法是使用用于构建标准的支持向量机分类模型的 fitcsvm 函数(MATLAB R2022b前),另一种实现方法是使用 ocsvm 函数(MATLAB R2022b 起)。

fitcsvm 函数的求解是基于 SVM 的对偶问题形式,需要求解每对样本的格拉姆矩阵(Gram Matrix),相关示例可在 MATLAB 命令行输入以下指令打开:

>> openExample('stats/DetectOutliersUsingSVMAndOneClassLearningExample')

图片

ocsvm 函数的求解则是基于 SVM 的原型问题形式,并使用高斯核进行一类学习,以找到决策边界,针对大规模数据集,求解效率更高。将 KernelScale 设为 "auto" 以启发式地选取合适核函数参数。

[mdlSVM,tfOCSVM,scoreTrainOCSVM] = ocsvm(feat, ...    ContaminationFraction=0.09, ...    StandardizeData=true,KernelScale="auto");[isanomalyOCSVM,~] = isanomaly(mdlSVM, featureTestNoLabels.Variables);predOCSVM = categorical(isanomalyOCSVM, [1, 0], ["Anomaly", "Normal"]);

可视化检测结果:​​​​​​​

tiledlayout(3,1)nexttilegscatter(X(:,1),X(:,2),tfOCSVM,[],'ox',3)xlabel('X1')ylabel('X2')legend({'正常','异常'})title("训练样本分类结果 (tSNE降维)")
nexttilehistogram(scoreTrainOCSVM, Normalization="probability")xline(mdlSVM.ScoreThreshold,"k-", ...    join(["Threshold =" mdlSVM.ScoreThreshold]))title("训练样本异常得分分布")
nexttileconfusionchart(trueAnomaliesTest, predOCSVM,...    Title="测试结果评估-混淆矩阵 (OCSVM)", Normalization="row-normalized");

图片

小结

· 优点:可以处理高维数据,适合表格/结构化数据。

· 使用限制:分类变量需要先转换为虚拟变量(哑变量,Dummy Variable),ocsvm函数中可定义相关参数CategoricalPredictors ,以自动进行转换。

结果对比

在该数据集的离群值检测问题中,孤立森林、局部离群因子与单类支持向量机的结果比较接近,各自的准确度都比较理想,预测结果的重合度也超过了90%:

mean((predIF==predLOF) & (predLOF==predOCSVM))

ans = 0.9325

利用马氏距离/稳健协方差估计的方法,结果不理想,与其他三个算法的结果差异较大:

mean((predIF==predLOF) & (predLOF==predOCSVM) & (predOCSVM==predTest))

ans = 0.6196

综上,各个方法的适用范围不一,或是有特定的使用条件,在使用时需要多加留意,例如马氏距离适合符合正态分布假设的数据集,孤立森林适用于处理正常样本和异常样本差异较大的情况,各个算法计算复杂度有些许区别,可以根据实际情况选择合适的方法。

关键点回顾

· 在处理异常检测问题时,首先需要充分了解您的数据

· 如果您有足够的标注数据(包括异常),可使用有监督学习方法进行异常检测

· 如果您的数据大部分都是正常数据,或者异常数据难以获取或标记,则可以考虑使用无监督的异常检测方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/228178.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“身份证信息批量核验:高效解决管理难题,轻松提升工作效率“

尊敬的读者们,您是否曾经因为身份证信息的核验而感到烦恼?是否曾经因为手动核验而感到繁琐和耗时?现在,我们向您介绍一款全新的工具——身份证信息批量核验器,它将帮助您一键解决管理难题,让工作事半功倍&a…

netty源码:(9)ChannelId

ChannelId代表了一个Channel的全局标识符。它提供了asShortText和asLongText两个方法来返回对应的字符串

C语言printf的输出格式大全及颜色字体打印

不同类型的数据有不同形式的打印格式,熟知了printf的不同输出格式会让后边的学习事半功倍。 文章目录 %d%i打印十进制整形数据标志(flags)%u打印无符号十进制%o 打印无符号八进制%x %X打印大写或小写十六进制%f打印浮点数%e %E科学计数法打印…

Java几种深拷贝方式比较

Java的深度拷贝分为克隆(实现Java的Clone接口)和序列化(实现Java的Serializable接口)两种,由于序列化有不同的方式,下面分析一下每种的注意事项和性能对比。 一、继承Cloneable接口 可以使用Java提供的Clo…

Java基础50题: 21.实现一个方法printArray, 以数组为参数,循环访问数组中的每个元素,打印每个元素的值.

概述 实现一个方法printArray, 以数组为参数,循环访问数组中的每个元素,打印每个元素的值. 代码 public static void printArray(int[] array) {for (int i 0; i < array.length; i) {System.out.println(array[i] " ");}System.out.println();}public static…

class060 拓扑排序的扩展技巧【算法】

class060 拓扑排序的扩展技巧【算法】 算法讲解060【必备】拓扑排序的扩展技巧 2023-12-7 22:23:02 code1 P4017 最大食物链计数 // 最大食物链计数 // a -> b&#xff0c;代表a在食物链中被b捕食 // 给定一个有向无环图&#xff0c;返回 // 这个图中从最初级动物到最顶…

Atlassian Confluence 模板注入代码执行漏洞风险通告

近期&#xff0c;亚信安全CERT通过监控发现&#xff0c;Atlassian 公司发布了一则安全公告&#xff0c;针对 Confluence 数据中心和 Confluence 服务器存在的远程代码执行漏洞&#xff08;CVE-2023-22522&#xff09;进行了修复。该漏洞涉及 Confluence 页面中的模板注入问题&a…

加载类型库/dll 时出错

软件使用DataSnap数据库ERP管理系统&#xff0c;用户更换操作系统&#xff0c;出现“加载类型库/dll 时出错”信息。 通常思路&#xff0c;从大环境查找&#xff0c;怀疑操作系统中的C运行库出现错误&#xff0c;搜索一翻末果。百度搜索也找不到结果。 通过Dll修复大师、全能修…

ArcMap中构建金字塔详解

1.金字塔 1.1 定义 金字塔可用于改善性能。它们是原始栅格数据集的缩减采样版本&#xff0c;可包含多个缩减采样图层。金字塔的各个连续图层均以 2:1 的比例进行缩减采样。如下图所示。从金字塔的底层开始每四个相邻的像素经过重采样生成一个新的像素&#xff0c;依此重复进行…

【Lidar】Python实现点云CSF布料滤波算法提取地面点

这两天会持续更新一下Python处理点云数据的教程&#xff0c;大家可以点个关注。今天给大家分享一下点云的经典算法&#xff1a;CSF布料模拟算法。 1 CSF算法简介 CSF算法&#xff0c;全称为Cloth Simulation Filtering&#xff0c;是一种基于欧几里得空间中最小生成树思想的聚类…

什么是网站?

这篇文章是我学习网站开发&#xff0c;阶段性总结出来的。可以帮助你 通俗易懂 地更加深刻理解网站的这个玩意。 一&#xff0c;网站和网页的区别&#xff1f; 网站是由一个个网页组成。我们在浏览器上面看到的每一个页面就是网页&#xff0c;这些 相关的 网页组成一个网站。…

【Selenium+Webmagic】基于JAVA语言实现爬取js渲染后的页面,附有代码

事先声明 笔者最近需要查看一些数据&#xff0c;自己挨个找太麻烦了&#xff0c;于是简单的学了一下爬虫。笔者在这里声明&#xff0c;爬的数据只为学术用&#xff0c;没有其他用途&#xff0c;希望来这篇文章学习的同学能抱有同样的目的。 枪本身不坏&#xff0c;坏的是使用枪…

EOCR-CT电流互感器与SR-CT区别简介

电流互感器CT是&#xff08;Current Transformers&#xff09;的缩写&#xff0c;是将一次测的大电流&#xff0c;按比列变为适合通过测量仪表或保护装置的变换设备。 EOCR外部电流互感器3CT和SR-CT是专为保护大负载的组合使用&#xff0c;电流变比100&#xff1a;5&#xff0…

如何部署自己的服务渲染页面为Pdf文档

前言 相信大家都觉得官方发布的文档生成模块https://docs.mendix.com/appstore/modules/document-generation/很有用&#xff0c;它能把Mendix页面像素级导出到Pdf文件中&#xff0c;这对于归档等业务非常有价值。但部署依赖公有云提供的渲染服务&#xff0c;而中国本土用户对…

常用API(一)

API(全称 Application Programming Interface&#xff1a;应用程序编程接口) 就是别人写好的一些程序&#xff0c;给我们直接拿去调用即可解决问题的。 包 什么是包&#xff1f; 包是用来分门别类的管理各种不同程序的&#xff0c;类似于文件夹&#xff0c;建包有利于程序的管…

python数据分析总结(pandas)

目录 前言 df导入数据 df基本增删改查 数据清洗 ​编辑 索引操作 数据统计 行列操作 ​编辑 df->types 数据格式化 ​编辑 日期数据处理 前言 此篇文章为个人python数据分析学习总结&#xff0c;总结内容大都为表格和结构图方式&#xff0c;仅供参考。 df导入数…

在线教育小程序正在成为教育行业的新生力量

教育数字化转型是目前教育领域的一个热门话题&#xff0c;那么到底什么是教育数字化转型&#xff1f;如何做好教育数字化转型&#xff1f; 教育数字化转型是利用信息技术和数字工具改变和优化教育的过程。主要特征包括技术整合、在线学习、个性化学习、大数据分析、云计算、虚拟…

视频封面提取:精准截图,如何从指定时长中提取某一帧图片

在视频制作和分享过程中&#xff0c;一个有吸引力的封面或截图往往能吸引更多的观众点击观看。有时候要在特定的时间段内从视频中提取一帧作为封面或截图。如果每个视频都手动提取的话就会耗费很长时间&#xff0c;那么如何智化能批量提取呢&#xff1f;现在一起来看下云炫AI智…

VUE2+THREE.JS 按照行动轨迹移动人物模型并相机视角跟随人物

按照行动轨迹移动人物模型并相机视角跟随人物 1. 初始化加载模型2. 开始移动模型3. 人物模型启动4. 暂停模型移动5. 重置模型位置6. 切换区域动画7. 摄像机追踪模型8. 移动模型位置9.动画执行 人物按照上一篇博客所设定的关键点位置&#xff0c;匀速移动 1. 初始化加载模型 //…

选择护眼台灯的标准,符合国家最高标准的护眼台灯推荐

据中国国家卫生健康委员会发布的报告&#xff0c;2020年全国青少年近视率为53.6%&#xff0c;其中&#xff0c;小学生近视率为38.1%&#xff0c;初中生近视率为71.6%&#xff0c;高中生近视率为81.0%。这意味着中国青少年中&#xff0c;大多数人都存在不同程度的近视问题&#…