C3-1.3.1 无监督学习——异常检测
C3-1.3.1 无监督学习——异常检测
1、举例:异常值检测示例——密度评估法
1.1 举一个例子

这里做的是 查看飞机发动机 异常检测:
- 左侧:X1 ,X2 … 是 可能会影响发动机状态的特征
- 右侧:
- Dataset:训练数据集
- New engine :利用新发动机的数据来检测新建造出的发动机是否异常

-
这里只拿出来两个特征值(X1 , X2)来举例,为了可视化让我们了解的更加方便,实际应用中 特征的数量可能达到上百 / 上千
-
最外层蓝色圈内的:说明的大概率的,是正常的
-
最外层蓝色圈外的:是小概率发生的事件,要进行进一步的检查
-
**P(X):**这里通过训练集建立完成 模型 P(X)后,用训练集数据 X-test 来判断结果 P(X-test):是否是状态异常的发动机
-
**ε的值:**即最外圈蓝色框的概率的值
1.2 构建过程
-
Step1:
**特征的提取,**找出能够判断是否异常状态的特征——这里用的特征是:飞机发动机的热度X1,发动机震动频率X2
-
Step2:
通过训练集的数据拟合出一个 模型——P(X)。
-
Step3:
通过输入的数据 X (X可能是一组向量),得出概率值 y = P (X)。
如果:P(X) < ε (设定好的门槛值,这个值通常很小),就说明发生异常

2、应用的算法:高斯正态分布
※※ 【核心】:高斯正态分布——很好的解释了:
- 上图中三个蓝色圈的由来 ? / 代表什么? /为什么要画这三个圈不是四个?
- P(x) Model 怎么拟合出来的?
- ε的值的也由来?
2.1、正态分布函数 / 高斯正态分布
-
3个蓝圈: 在 异常举例中,我们给出了3个蓝圈,其实每一个圈分别代表下面的三个分布的范围**(u± δ、u± 2δ、u± 3δ)**
-
**P(x):**也就是对应的高斯正态分布函数
-
**ε的值的也由来:**为什么在 P(X)超过了 u - 3δ < P(X) < u + 3δ 的范围就认为他是异常值,因为在 u - 3δ < P(X) < u + 3δ 的范围(达到了99.7%)之外 的概率确实太小了。 ε =u± 3δ

u - δ < P(X) < u + δ

u - 2δ < P(X) < u + 2δ

u - 3δ < P(X) < u + 3δ
-
均值u 的算法:
-
方差δ的算法:
-
这个 “钟形”的概率分布的面积是 1。也就是说:
- 标准差δ越小,意味着大多数变量值离均数的距离越短,因此大多数值都紧密地聚集在均数周围,图形呈现**“瘦高型”**
- 相反,标准差δ越大,数据跨度就比较大,分散程度大,所覆盖的变量值就越多(比如1±0.5涵盖[0.5,1.5]),图形呈现**“矮胖型”** ——如图四

2.2 高斯分布的应用
- Step1 :通过训练集数据,进行散点分布在X轴上(这是训练其中的一个特征):

- Step 2 : 正态分布的使用,进行X -> f(x)的映射:

- Step 3 :利用高斯分布进行 异常值的检测:

3、实现流程:异常检测算法实现流程
3.1、算法实现步骤
- Step1:
- 选择可能影响最终结果——是否异常 的特征的选择
- Step 2:
- **拟合模型,**训练每个特征向量对应的参数 —— u ; δ
- Step 3:
- 通过输入测试集数据x-i,计算最终结果 P(x)

※P(X)是连乘得出的结果,是不同特征的特征值X 对应的P(X-i) 连乘 的结果,是每个特征对结果——异常检测的共同的影响
※P(X-i)中一旦有一个结果是不正常的——导致P(X-i)是特别小的数值——导致最终结果P(X)是特别小的数值——导致P(X)< u± 3δ ——得出结果是 异常点

ra%5Ctypora-user-images%5Cimage-20231101205906650.png&pos_id=img-QDV3Mm35-1704850973901)
【补充】:
- 均值 u的算法:

- 方差δ的算法:


3.2 异常值检测实例
- Step1:
- 选择可能影响最终结果——是否异常 的特征的选择
- 这里是做 飞机发动机异常检测,保留了两个特征:
- X1:发动机热度
- X2:发动机震动频率
- 选择可能影响最终结果——是否异常 的特征的选择
- Step 2:
- **拟合模型,**训练每个特征向量对应的参数 —— u ; δ
- 计算得出 阀值 u± 3δ = ε = 0.02
- 把 X1 ,X2 ,概率P 画在了三维图像上
- **拟合模型,**训练每个特征向量对应的参数 —— u ; δ
- Step 3:
- 通过输入测试集数据x-i,计算最终结果 P(x)
- 从图中可以看出:
- X1-test :是正常值的状态
- X2-test :是异常状态,发生概率 P(X) < ε ,需要进一步对发动机做检测
- 通过输入测试集数据x-i,计算最终结果 P(x)

4、模型微调:运用少量标签数据 改进算法的必要性
4.1、文章核心思想
【本节核心句子】: it’s turns out to be **very userful for turning(调整) the algorithm if you have a small number of anomalous examples so that you can create a cross validation set and a test set **,which i’m going to denote (x-cv(1),y-cv(1)) 、(x-cv(2),y-cv(2)),and have a test set of some number example where both the cross validation and test sets hopefully includes a few anomalous examples
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
4.2、应用的例子
-
给出了 10000个正常的数据 和 20个异常 / 瑕疵数据
-
给出两种方法去进行模型的训练
-
方法一:
- 测试集用:6000个好的
- 交叉验证集:用2000个好的 和 10 个异常数据——进行模型的微调,调整ε的值和特征的选择
- 测试集:用2000个好的,和10个异常数据——来判断模型的泛化能力
-
方法二(当数据及其不平衡的时候使用最好)(这时是有10000个好的,2个坏的):
- 测试集用:6000个好的
- 交叉验证集:用4000个好的 和 2 个异常数据——进行模型的微调,调整ε的值和特征的选择。
缺点:不能测试模型的泛化能力,无法评估
【注释】:
这不是监督学习,因为没有进行数据的标记,这里的 好数据6000 和瑕疵数据 20 都是我们假设(原文是 Assume labeled)的
—— 引出了下文,那你都是认为是假设标记了,那为什么直接标记,所以为什么不使用监督学习呢????

5、什么时候使用监督学习,什么时候使用异常检测
5.1 监督学习 VS 异常值检测
-
异常值检测:
- ※※※应用于检测目标的异常值 可能是以前没有学到的,不像任何 一个训练集给出的异常值例子
- 适合 具有 少量异常值 和 大量正常值 数据量
-
监督学习:
- ※※※测试集中的异常值,和我们以前学习的样本有些相似之处
- 适合 具有 大量异常值 和 大量正常值 的数据量

5.2 举一个例子
-
异常值检测的例子:
比如说电信诈骗:诈骗手法层出不穷,我们模型学习完以前的诈骗方法,但是他三天 / 几个月之后 又出现了新的咋骗手法,总是和出新的,和以前不同——这个时候就要使用**“异常值检测”**
-
监督学习的例子:
比如说 垃圾邮件检测,经历了30多年,垃圾邮件无非是那几类:钓鱼网站,推销产品,诱导消费…
我们可以学习以前的一些例子,然后通过检测测试集的例子,总会发现有一些相似之处——这是就要使用**“监督学习”**法

6、选择使用什么样的特征
- 在监督学习中:就算我们选择了一些额外不相关的特征,我们也不受影响,因为有——特征放缩
- 在异常值检测中:对于未标记的数据,这就显得比监督学习 尤其的重要了
6.1 如何选择
【※※※核心】:
-
选择的特征 或多或少 符合 高斯分布/正态分布
-
如果要不符合高斯分布,就把他改成高斯分布
-
一些异常的数据可能也会有较高的𝑝(𝑥)值,因而被算法认为是正常的——需要进一步分析并找出特征
选择方法一:符合高斯分布的特征情况:
以特征X举例,在画布上画出X特征的分布,这里的X特征就 比较符合 “高斯分布”——这就是一个很好的候选特征

-
不符合高斯分布的特征的情况——变成符合:
-
首先是判断,我们是否真的需要这个特征变量
-
如果真的需要,那我们进行进一步的转变,变成符合高斯分布的特征
-
通过 log(x)函数 ,变成了符合正态分布的情况。

其实还有许多变化的方法:
常用的将数据转换成符合高斯分布的方法包括对数变换(log transformation)、平方根变换(square root transformation)、Box-Cox变换等。这些变换可以使数据更加接近正态分布的形态。
如果数据中存在明显的异常值,那么将其转换成符合高斯分布的形式可能会使得异常值更加明显,从而更容易被检测到。

[^]: (注:在python 中,通常用np.log1p()函数,𝑙𝑜𝑔1𝑝就是 𝑙𝑜𝑔(𝑥 + 1),可以避免 出现负数结果,反向函数就是np.expm1())
实例实施过程:


选择方法二: 从学习不好的结果中进行进一步选择特征
【核心】:
一个常见的问题是一些异常的数据可能也会有较高的𝑝(𝑥)值,因而被算法认为是正常的。这种情况下误差分析能够帮助我们 ——我们可以分析那些被算法错误预测为正常的数据,观察能否找出一些问题。
- 正常我们选择完成 交叉验证集 验证,发现有一些数据(这里对应的X蓝色坐标点)看起来很正常( 有较高的P(x)),但是是异常数据——怎么才能解决这个问题呢???

- 这时候就需要找出其他特征,根据其他特征一起来进行判断会更容易——他虽然在X1(这里指发动机 温度)的特征上表现得正常,但是在我们没有选中的X2 (这里指发动机震动频率)的特征上表现得异常。所以还需要选择特征X2,然后结合X1 X2,把X1 X2他们组合起来进行一起来判断。
这也是交叉验集微调的过程

6.2 举例

相关文章:
C3-1.3.1 无监督学习——异常检测
C3-1.3.1 无监督学习——异常检测 1、举例:异常值检测示例——密度评估法 1.1 举一个例子 这里做的是 查看飞机发动机 异常检测: 左侧:X1 ,X2 … 是 可能会影响发动机状态的特征右侧: Dataset:训练数据集New engine…...
1.4.1机器学习——梯度下降+α学习率大小判定
1.4.1梯度下降 4.1、梯度下降的概念 ※【总结一句话】:系统通过自动的调节参数w和b的值,得到最小的损失函数值J。 如下:是梯度下降的概念图。 我们有一个损失函数 J(w,b),包含两个参数w和b(你可以想象成J(w,b) w*x…...
在IntelliJ IDEA中,.idea文件是什么,可以删除吗
相信有很多小伙伴,在用idea写java代码的时候,创建工程总是会出现.idea文件,该文件也从来没去打开使用过,那么它在我们项目里面,扮演什么角色,到底能不能删除它呢? 1、它是什么?有什么…...
【Spring Cloud】Gateway组件的三种使用方式
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Spring Cloud》。🎯🎯 &am…...
对象的复制
方式一:sv 的new函数 trans tr1,tr2; malbox.get(tr2); tr1 new tr2;//仅用于浅拷贝,拷贝后tr1,tr2为两个独立的对象方式二:uvm 域的自动化常用函数:copy / clone / 使用前提: 1. 函数都可用于uvm_object类型&…...
基于 Python+Neo4j+医药数据,构建了一个知识图谱的自动问答系统
知识图谱是目前自然语言处理的一个热门方向。目前知识图谱在各个领域全面开花,如教育、医疗、司法、金融等。 本项目立足医药领域,以垂直型医药网站为数据来源,以疾病为核心,构建起一个包含7类规模为4.4万的知识实体,…...
Maven之属性管理
1.属性管理 1.1 属性配置与使用 ①:定义属性 <!--定义自定义属性--> <properties><spring.version>5.2.10.RELEASE</spring.version> </properties>②:引用属性 <dependency><groupId>org.springframewor…...
快乐学Python,数据分析之获取数据方法「公开数据或爬虫」
学习Python数据分析,第一步是先获取数据,为什么说数据获取是数据分析的第一步呢,显而易见:数据分析,得先有数据,才能分析。 作为个人来说,如何获取用于分析的数据集呢? 1、获取现成…...
前端常用的设计模式
设计模式:是一种抽象的编程思想,并不局限于某一特定的编程语言,而是在许多语言之间是相通的;它是软件设计中常见的问题的通用、可反复使用、多少人知晓的一种解决方案或者模板。一般对与从事过面向对象编程的人来说会更熟悉一些。…...
游戏引擎支持脚本编程有啥好处
很多游戏引擎都支持脚本编程。Unity、Unreal Engine、CryEngine等大型游戏引擎都支持使用脚本编写游戏逻辑和功能。脚本编程通常使用C#、Lua或Python等编程语言,并且可以与游戏引擎的API进行交互来控制游戏对象、设置变量、执行行为等。使用脚本编程,游戏…...
react中概念性总结(二)
目录 说说你对react的理解?有哪些特性? 说说Real diff算法是怎么运作的,从tree层到component层到element层分别讲解? 调和阶段setState干了什么? 说说redux的工作流程? 为什么react元素有一个$$type属…...
WPF自定义漂亮顶部工具栏 WPF自定义精致最大化关闭工具栏 wpf导航栏自定义 WPF快速开发工具栏
在WPF应用程序开发中,自定义一个漂亮的顶部工具栏具有多重关键作用,它不仅增强了用户体验,还提升了整体应用的专业性和易用性。以下是对这一功能的详细介绍: 首先,自定义顶部工具栏是用户界面设计的重要组成部分&…...
Transformer 的双向编码器表示 (BERT)
一、说明 本文介绍语言句法中,最可能的单词填空在self-attention的表现形式,以及内部原理的介绍。 二、关于本文概述 在我之前的博客中,我们研究了关于生成式预训练 Transformer 的完整概述,关于生成式预训练 Transformer (GPT) 的…...
关于LwRB环形缓冲区开源库的纯C++版本支持原子操作
1、LwRB环形缓冲区开源库: GitHub - MaJerle/lwrb: Lightweight generic ring buffer manager libraryLightweight generic ring buffer manager library. Contribute to MaJerle/lwrb development by creating an account on GitHub.https://github.com/MaJerle/l…...
微信小程序Canvas画布绘制图片、文字、矩形、(椭)圆、直线
获取CanvasRenderingContext2D 对象 .js onReady() {const query = wx.createSelectorQuery()query.select(#myCanvas).fields({ node: true, size: true }).exec((res) => {const canvas = res[0].nodeconst ctx = canvas.getContext(2d)canvas.width = res[0].width * d…...
Unity Editor实用功能:Hierarchy面板的对象上绘制按按钮并响应
目录 需求描述上代码打个赏吧 需求描述 现在有这样一个需求: 在Hierarchy面板的对象上绘制按钮点击按钮,弹出菜单再点击菜单项目响应自定义操作在这里的响应主要是复制对象层级路路径 看具体效果请看动图: 注: 核心是对Edito…...
解决录制的 mp4 视频文件在 windows 无法播放的问题
解决录制的 mp4 视频文件在 windows 无法播放的问题 kazam 默认录制保存下来的 mp4 视频文件在 windows 中是无法直接使用的,这是由于视频编码方式的问题。解决办法: 首先安装 ffmeg 编码工具: sudo apt-get install ffmpeg 然后改变视频的…...
一键与图片对话!LLM实现图片关键信息提取与交互
本期文心开发者说邀请到飞桨开发者技术专家徐嘉祁,主要介绍了如何通过小模型与大模型的结合,解决数据分析中的问题。 项目背景 在智能涌现的大模型时代,越来越多的企业和研究机构开始探索如何利用大模型来提升工作效率,助力业务智…...
洛谷 P8833 [传智杯 #3 决赛] 课程 讲解
前言: 大家好! 我们又见面啦~~~ 对于我20多天没上号,深表歉意!! 希望大家给我的account点一个赞,加一个粉丝,谢谢! 也对CSDN的所有博主们送上衷心的祝福! 如有错误…...
中国IT产经新闻:新能源汽车发展前景与燃油车的利弊之争
随着科技的进步和环保意识的提高,新能源汽车在全球范围内逐渐受到重视。然而,在新能源汽车迅速发展的同时,燃油车仍然占据着主导地位。本文将从新能源与燃油车的利弊、新能源汽车的发展前景两个方面进行分析,以期为读者提供全面的…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...


