异常检测 | MATLAB实现基于支持向量机和孤立森林的数据异常检测(结合t-SNE降维和DBSCAN聚类)

异常检测 | MATLAB实现基于支持向量机和孤立森林的数据异常检测(结合t-SNE降维和DBSCAN聚类)

目录

    • 异常检测 | MATLAB实现基于支持向量机和孤立森林的数据异常检测(结合t-SNE降维和DBSCAN聚类)
      • 效果一览
      • 基本介绍
      • 模型准备
      • 模型设计
      • 参考资料

效果一览

1
2
3

基本介绍

提取有用的特征,机器学习通常可以在少得多的数据上为您提供与深度学习相当或更好的结果。与在少得多的数据上的深度学习相比,可以获得可比或更好的结果。然后,我们将SVM、孤立森林(R2021b 中的新功能)、稳健协方差和马氏距离、DBSCAN 聚类方法应用于异常检测:
在该数据上, SVM 的性能最好,孤立森林可以接受,而马氏距离效果不佳。

模型准备

虽然深度学习需要大数据集,但机器学习方法需要的数据要少得多。机器健康并产生“正常”数据。 通常,可以使用的“异常”数据要少得多,但大多数异常检测方法都假设:主要拥有正常数据。

load("FeatureSmall.mat");
rng;% show distribution in this small data set
st = groupcounts(featureSmall,"label")
outlierFraction = st.Percent(1)/100;    % remember fraction of anomalies in data% divide subset into train and (held out) test
idxSmall = cvpartition(featureSmall.label,'holdout',0.2);
featSmallTrain = featureSmall(idxSmall.training,:);
featSmallTest = featureSmall(idxSmall.test,:);
trueAnomaliesTest = featSmallTest.label;

4

模型设计

  • 监督方法:训练分类器
    原始数据集是相当平衡的,在“之后”和“之前”维护的相同顺序样本中,代表正常和异常的操作条件。 对于在这两种情况下都有大量标记数据的用例,可以简单地应用标准的监督学习并构建分类器。 下图说明了可用标记数据量与一些可能的异常检测方法之间的关系。
    5
  • 对于这个数据集,我们位于适合监督学习的右上象限。 几种机器学习算法都取得了不错的分类准确率——说明我们之前提取的特征相当不错。 下面我们展示了验证准确性,以及最佳模型的混淆矩阵,即树集成。
    6
    7
  • 对于这个例子的其余部分,为了现实起见,我们将通过从训练集中删除“之前”数据来假装我们主要有正常数据可用。 然后我们可以演示如何应用右下象限中提到的方法:只训练正常数据,然后尝试识别异常。
  • 异常检测的统计和机器学习方法,使用 SVM 检测异常
    支持向量机是强大的分类器,它们的变体训练仅对“正常”数据进行建模,并且可以很好地识别异常。
% identify subset of "normal" (healthy) data in training 
healthyIdx = featSmallTrain.label=="Normal";
trainHealthy = featSmallTrain(healthyIdx,2:13);   % can safely skip labels column since we only have one class
trainHealthyN = size(trainHealthy,1);% train one-class SVM. On this data, training just on the "normal" (healthy) data works better
mdlSVM = fitcsvm(trainHealthy,ones(trainHealthyN,1),'Standardize',true,'OutlierFraction',0);% this variant trains on all data (including anomalies), with the estimated fraction
%mdlSVM = fitcsvm(featSmallTrain(:,2:13),ones(size(featSmallTrain,1),1),'Standardize',true,'OutlierFraction',outlierFraction);% apply to "small" test data (which has both anomalies and healthy data)
[~,scoreSVM] = predict(mdlSVM,featSmallTest(:,2:13));
isanomalySVM = scoreSVM<0;
predSVM = categorical(isanomalySVM, [1, 0], ["Anomaly", "Normal"]);confusionchart(trueAnomaliesTest,predSVM,Title="Anomaly Detection with One-class SVM",Normalization="row-normalized");

8

  • 我们可以看到 SVM 表现良好,所有异常样本都被识别出来,只有 4% 的“健康”样本被误判。
  • 使用孤立森林森林检测异常,孤立森林森林的决策树将每个观察值隔离在一片叶子中。 一个样本经过多少次决策才能到达其叶子节点是衡量将其与其他样本隔离开来的复杂程度。 特定样本的树的平均深度用作它们的异常分数,并由 iforest 返回。
% train on normal (healthy) data only. Need to tune the ContimationFraction!
[mdlIF,~,scoreTrainIF] = iforest(trainHealthy,'ContaminationFraction',0.05);[isanomalyIF,scoreTestIF] = isanomaly(mdlIF,featSmallTest(:,2:13));
predIF = categorical(isanomalyIF, [1, 0], ["Anomaly", "Normal"]);confusionchart(trueAnomaliesTest,predIF,Title="Anomaly Detection with Isolation Forest",Normalization="row-normalized");

9

  • 在这个数据上,孤立森林的表现不如SVM,但它在其他数据集上的表现优于其他方法而变得流行。
  • 为了更好地了解孤立森林的工作原理,可视化其异常分数的分布可能会有所帮助。
%To better understand how the isolation forest works, it can be helpful to visualize the distribution of its anomaly scores.
% visualize the anomaly score distributions for train vs test 
figure;
histogram(scoreTestIF,Normalization="probability");
hold on
histogram(scoreTrainIF,Normalization="probability");
xline(mdlIF.ScoreThreshold,"k-", join(["Threshold =" mdlIF.ScoreThreshold]))
legend("Test data","Training data",Location="southeast")
title("Histograms of Anomaly Scores for Isolation Forest")
hold off

11

  • 训练和测试数据分布的差异在于后者包含一些“异常”数据——而训练没有,我们将阈值设置得恰到好处,以正确识别大部分异常数据。
  • 使用稳健协方差检测异常,作为检测异常的统计方法,可以估计稳健的协方差(和均值),然后将异常识别为位于分布的边缘(异常值)。 稳健的估计器处理包含异常值并偏离多元正态性假设的数据。
featSmallTrainM = table2array(featSmallTrain(:,2:13));    % robustcov expects input as matrix, not table
featSmallTestM = table2array(featSmallTest(:,2:13)); % compute robust covariance on both normal and (typically only a little)
% anomalous data - which is not the case for this data!
[sigma,mu,mahalDistRobust,~] = robustcov(featSmallTrainM, OutlierFraction=outlierFraction);
sigRobustThresh = sqrt(chi2inv(1-outlierFraction,size(featSmallTrainM,2)));% identify anomalies on new (test) data with Mahalanobis distance
scoreTestMahal = pdist2(featSmallTestM,mu,"mahalanobis",sigma);
isanomalyMahal = scoreTestMahal > sigRobustThresh;
predMahal = categorical(isanomalyMahal, [1, 0], ["Anomaly", "Normal"]);confusionchart(trueAnomaliesTest,predMahal,Title="Anomaly Detection with Mahalanobis / Robust Covariance",Normalization="row-normalized");

12

  • 稳健协方差在该数据上效果不佳.
  • 可视化各种异常检测方法,可视化可以帮助解释分类方法为何有效以及何时无效,这也适用于异常检测。 如果您正在处理多个维度,则必须在可视化之前降低维度。 压缩多个维度的一种方便方法是随机邻域嵌入 tsne。 t-SNE 倾向于将数据分组到集群中,因为它最小化了二维空间中的 Kullback-Leibler 散度,但不要过度解释它们:这些分组并不总是存在于原始高维数据中。
% use t-SNE to reduce the 12 features into a two-dimensional space
T = tsne(featSmallTestM);% compare the various anomaly detection methods visually, starting with
% "ground truth" (labels)
figure;
tiledlayout(2,2)
nexttile
gscatter(T(:,1),T(:,2),trueAnomaliesTest,"kr",".o",[],"off");
title("Ground Truth")
legend("Normal","Anomalous");
nexttile(2)
gscatter(T(:,1),T(:,2),predIF,"kr",".o",[],"off")
title("Isolation Forest")
nexttile(3)
gscatter(T(:,1),T(:,2),predSVM,"kr",".o",[],"off")
title("One-class SVM")
nexttile(4)
gscatter(T(:,1),T(:,2),predMahal,"kr",".o",[],"off")
title("Robust Mahalanobis Distance")

13

  • 我们可以看到,上方区域的异常数据簇和左下方的正常数据簇,大多被一类SVM和隔离森林正确识别,而没有被马氏距离分开 (至少在t-SNE转换 12 个特征的二维空间中)。
  • 应用聚类检测异常,还可以应用聚类来识别数据中的组,并将这些组中的哪些组与正常样本和异常样本相关联。 这在视觉上更容易完成,所以让我们使用 t-SNE 总结原始 12 个特征的两个维度,并应用像 dbscan 这样的基于距离的聚类方法。 它需要一些实验来找到距离参数 epsilon 和最小集群大小的正确设置。
trainSmallSNE = tsne(featSmallTrainM);
mdlDB = dbscan(trainSmallSNE,5,20);
figure
gscatter(trainSmallSNE(:,1),trainSmallSNE(:,2),mdlDB);

14

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/124864369
[2] https://blog.csdn.net/kjm13182345320/article/details/127896974?spm=1001.2014.3001.5502

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Mac】brew提示arch -arm64 brew以及uname返回x86_64的问题

背景 使用MacBook 14 M1 Pro两年了&#xff0c;自从使用了第三方Shell工具WindTerm后&#xff0c;使用brew时会提示我使用arch -arm64 brew安装&#xff0c;一开始没太在意&#xff0c;直到今天朋友问我uname -a返回的是什么架构&#xff0c;我才惊讶的发现竟然返回的是x86_64…

vue3-vite前端快速入门教程 vue-element-admin

Vue3快速入门学习 初始化项目 # 创建项目 npm create vitelatest my-vue-app -- --template vue # 安装依赖 npm i # 运行 npm run dev 模板语法 文本插值​ 最基本的数据绑定形式是文本插值&#xff0c;它使用的是“Mustache”语法 (即双大括号)&#xff1a; <span&g…

AI助力智慧农业,基于YOLOv8全系列模型【n/s/m/l/x】开发构建不同参数量级的识别系统

智慧农业随着数字化信息化浪潮的演变有了新的定义&#xff0c;在前面的系列博文中&#xff0c;我们从一些现实世界里面的所见所想所感进行了很多对应的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《自建数据集&#xff0c;基于YOLOv7开发构建农田场景下杂草…

玩转大数据10:深度学习与神经网络在大数据中的应用

目录 1. 引言&#xff1a;深度学习和神经网络在大数据中的重要性和应用场景 2. 深度学习的基本概念和架构 3. Java中的深度学习框架 3.1. Deeplearning4j框架介绍及Java编程模型 3.2. DL4J、Keras和TensorFlow的集成 4. 大数据与深度学习的结合 4.1. 大数据与深度学…

HarmonyOS4.0从零开始的开发教程09页签切换

HarmonyOS&#xff08;七&#xff09;页签切换 List组件和Grid组件的使用 Tabs组件的使用 概述 在我们常用的应用中&#xff0c;经常会有视图内容切换的场景&#xff0c;来展示更加丰富的内容。比如下面这个页面&#xff0c;点击底部的页签的选项&#xff0c;可以实现“首页…

Uniapp - 环境搭建 vscode开发

uni-app 基础 创建 uni-app 项目方式 uni-app 支持两种方式创建项目&#xff1a; 通过 HBuilderX 创建&#xff08;需安装 HBuilderX 编辑器&#xff09; 通过命令行创建&#xff08;需安装 NodeJS 环境&#xff09; HBuilderX 创建 uni-app 项目 创建步骤 1.下载安装 H…

[论文阅读]BEVFusion

BEVFusion BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework BEVFusion&#xff1a;简单而强大的激光雷达相机融合框架 论文网址&#xff1a;BEVFusion 论文代码&#xff1a;BEVFusion 简读论文 论文背景&#xff1a;激光雷达和摄像头是自动驾驶系统中常用的两…

四、分代垃圾回收机制及垃圾回收算法

学习垃圾回收的意义 Java 与 C等语言最大的技术区别&#xff1a;自动化的垃圾回收机制&#xff08;GC&#xff09; 为什么要了解 GC 和内存分配策略 1、面试需要 2、GC 对应用的性能是有影响的&#xff1b; 3、写代码有好处 栈&#xff1a;栈中的生命周期是跟随线程&…

Docker架构及常用的命令

一、初识Docker 1、 docker是一个快速交付应用、运行应用的技术&#xff0c;具备下列优势&#xff1a; 可以将程序及其依赖、运行环境一起打包为一个镜像&#xff0c;可以迁移到任意Linux操作系统运行时利用沙箱机制形成隔离容器&#xff0c;各个应用互不干扰启动、移除都可以…

区分node,npm,nvm

目录 一&#xff0c;nodejs二&#xff0c;npm三&#xff0c;nvm 区分node&#xff0c;npm&#xff0c;nvm 几年前学习前端的时候学习的就是htmlcssjs 三件套。 现在只学习这些已经不能满足需要了。 一&#xff0c;nodejs nodejs是编程语言javascript运行时环境。&#xff08;比…

『亚马逊云科技产品测评』活动征文|基于亚马逊云EC2搭建PG开源数据库

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 亚马逊EC2云服务器&#xff08;Elastic Compute Cloud&#xff09;是亚马…

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

异常检测任务&#xff0c;指的是检测偏离期望行为的事件或模式&#xff0c;可以是简单地检测数值型数据中&#xff0c;是否存在远超出正常取值范围的离群值&#xff0c;也可以是借助相对复杂的机器学习算法识别数据中隐藏的异常模式。 在不同行业中&#xff0c;异常检测的典型…