机器学习笔记-18

news2024/11/25 16:28:07

异常检测问题

异常检测虽然主要用于无监督学习问题上,但是和监督学习问题很相似。

异常检测(Anomaly Detection):给定正确样本集{ x ( 1 ) , x ( 2 ) . . . x ( n ) x^{(1)},x^{(2)}...x^{(n)} x(1),x(2)...x(n)},记新样本即要检测的样本为 x t e s t x_{test} xtest。对x进行建模即画出x的概率分布图像p(x),将 x t e s t x_{test} xtest代入 p ( x t e s t ) p(x_{test}) p(xtest),给定阈值 ε \varepsilon ε,如果 p ( x t e s t ) < ε p(x_{test})<\varepsilon p(xtest)<ε则代表着 x t e s t x_{test} xtest在原本样本集中出现的概率很小,标记为异常。如果 p ( x t e s t ) ≥ ε p(x_{test})\ge\varepsilon p(xtest)ε,标记为正常。

在APP中,异常检测通常用于做欺诈检测:通过对正常用户的建模寻找可能存在的非法用户、异常用户进行处理。

在工业上异常检测通常用于检测产品的质量,对符合标准的产品进行建模,对新生产好的产品进行检测查看是否需要进一步测试。

1. 高斯分布

高斯分布也就是正态分布。
参数估计:参数估计就是给定一个数据集估算出 μ 和 σ 2 \mu 和\sigma^2 μσ2的值。

μ = 1 m ∑ i = 1 m x ( i ) \mu =\frac{1}{m}\sum_{i=1}^{m}x^{(i)} μ=m1i=1mx(i)
σ 2 = 1 m ∑ i = 1 m ( x ( i ) − μ ) 2 \sigma ^2=\frac{1}{m}\sum_{i=1}^{m}(x^{(i)}-\mu )^2 σ2=m1i=1m(x(i)μ)2

通俗来讲 μ \mu μ就是均值, σ 2 \sigma^2 σ2就是方差

2. 用高斯分布推导异常检测算法

在这里插入图片描述
首先选择一些对出现异常问题时反应较大的特征,给出训练集{ x ( 1 ) , x ( 2 ) . . . x ( n ) x^{(1)},x^{(2)}...x^{(n)} x(1),x(2)...x(n)}求出对应的{ μ ( 1 ) , μ ( 2 ) . . . μ ( n ) \mu_{(1)},\mu_{(2)}...\mu_{(n)} μ(1),μ(2)...μ(n)}和{ σ ( 1 ) 2 , σ ( 2 ) 2 . . . σ ( n ) 2 \sigma^2_{(1)},\sigma^2_{(2)}...\sigma^2_{(n)} σ(1)2,σ(2)2...σ(n)2}。将新样本代入求出的正态分布函数中求概率, 如果小于阈值 ε \varepsilon ε就标注为异常。

这里的 x j x_j xj是指 x x x这个新样本在各个方向上的投影值,或者说是 x x x这个特征向量中的各个特征的值。

3. 评估异常检测算法

前面有说过对于算法来讲,我们进行评估的时候往往需要判断很多事情才能得出算法的优劣,所以使用数字指标会方便很多。对于异常检测算法我们同样使用数字指标去评估算法的好坏,具体如下:

将正常样本赋值y=1,异常样本赋值y=0。一共选取10000+40个样本,其中10000个样本是正常的,40个样本是异常的。将10000个样本按照6:2:2的比例分为训练集、验证集和测试集,40个样本按照1:1的比例放导验证集和测试集中。至此训练集中包含6000个正常样本,验证集中包含2000个正常样本和20个异常样本,测试集中包含2000个正常样本和20个异常样本。

虽然给正常样本异常样本赋值y但是这本质上还是无监督问题不是监督问题。

用训练集中的6000个正常样本进行异常检测算法求出 μ 、 σ 2 \mu、\sigma^2 μσ2后,得到p(x)。求出验证集和测试集中的样本的p(x)判断y值并与真正结果相比较,计算查准率和召回率得出F值,判断异常检测算法的好坏。
在这里插入图片描述
也可以使用之前的模型选择方法定义阈值 ε \varepsilon ε,求出p(x)后使用不同的 ε \varepsilon ε在验证集上进行检验,选取F值最高的 ε \varepsilon ε在测试集上进行检验。

4. 异常检测算法和监督学习算法的取舍

相信会有一些人觉得上面的异常检测算法很像监督学习的方法,也会疑惑为什么不直接用监督学习的算法进行异常检测,现在对二者进行取舍:
在这里插入图片描述
当出现👆偏斜类问题时,选择异常检测算法。
在这里插入图片描述
当出现异常有很多类型而且未来可能出现没出现过的异常时,选择异常检测算法。
二者实际应用对比:
在这里插入图片描述
5. 如何选择异常检测算法的特征

通常使用误差分析确定一场算法的特征,和之前监督学习算法的误差分析很像。

先完整的训练出一个算法,在一组验证集上运行算法,找出预测出错的样本提取共同特征改善算法。
特征矫正(非官方叫法):当我们选取完特征后,在选取样本时最好查看他的图像是否能够满足正太分布。
输入一个特征 x x x的一组值,画出图像(octave中hist函数),如果图像和正态分布很像就不用调整,如果不像就调整一下使其像正态分布。

调整手段:取对数等数学变形。

如:初始图象如下图的集合
在这里插入图片描述
经过①处理后变成了下图
在这里插入图片描述
经过②处理后变成了下图

在这里插入图片描述

在这里插入图片描述
6. 多元高斯分布
多元高斯分布和高斯分布的不同是多元高斯分布并不分别对每个特征进行高斯建模,而是一次性将所有特征值建模成一个高斯函数。
在这里插入图片描述
Σ \Sigma Σ就是PCA中的协方差矩阵。

det(A) %求矩阵A的行列式的octave代码

在这里插入图片描述
👆是多元高斯分布的表达式,接下来会用多元高斯分布构建异常检测算法。
在这里插入图片描述
👆参数估计。
在这里插入图片描述
👆将新的样本代入p(x)进行检验,如果小于阈值就标注异常。

实际上,最开始的模型在这里插入图片描述
就是当 Σ \Sigma Σ矩阵主对角线是方差、非主对角线元素都是0时的多元高斯分布模型。

那么如何在两个模型之间选择呢?
在这里插入图片描述

原始模型被使用的更多一些,但多元高斯模型在捕捉不同特征之间关系方面更加灵活。如果想要使用原始模型去对特征之间的关系进行综合比较需要创建一个新特征如两个原本特征的比值等等,但是多元高斯模型可以自动捕捉这些关系;原始模型的计算成本较低,能够使用大规模运算,多元高斯模型的运算代价就比较大,当数据量较大时可能成本会很高;对于训练集较小的情况下原始模型也可以很好的运行,但是多元高斯模型需要样本数量>特征数量才可以,不然 Σ \Sigma Σ不可逆不能运行。

吴恩达老师的选择方法:
当样本数量 ≥ \ge 特征数量的十倍时,选用多元高斯模型;其余选用原始模型。

Σ \Sigma Σ不可逆时,一方面是样本数量小于特征数量,再就是特征线性相关(即存在冗余特征)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

堆排序以及TOP-K问题

片头 嗨&#xff01;小伙伴们&#xff0c;大家好&#xff01;今天我们来深入理解堆这种数据结构&#xff0c;分析一下堆排序以及TOP-K问题&#xff0c;准备好了吗&#xff1f;我要开始咯&#xff01; 一、堆排序 这里我们先假设要排成升序&#xff0c;也就是从左到右&#xf…

JSP简介——[JSP]1

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

基于php+mysql+html图书管理系统(含实训报告)

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、Php、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

【C++】命名冲突了怎么办?命名空间来解决你的烦恼!!!C++不同于C的命名方式——带你认识C++的命名空间

命名空间 导读一、什么是C?二、C的发展三、命名空间3.1 C语言中的重名冲突3.2 什么是命名空间&#xff1f;3.3 命名空间的定义3.4 命名空间的使用环境3.5 ::——作用域限定符3.6 命名空间的使用方法3.6.1 通过作用域限定符来指定作用域3.6.2 通过关键字using和关键字namespace…

如何用 Redis 实现延迟队列?

延迟队列是一种常见的消息队列模式&#xff0c;用于处理需要延迟执行的任务或消息。Redis 是一种快速、开源的键值对存储数据库&#xff0c;具有高性能、持久性和丰富的数据结构&#xff0c;因此很适合用于实现延迟队列。在这篇文章中&#xff0c;我们将详细讨论如何使用 Redis…

51单片机两个中断及中断嵌套

文章目录 前言一、中断嵌套是什么&#xff1f;二、两个同级别中断2.1 中断运行关系2.2 测试程序 三、两个不同级别中断实现中断嵌套3.1 中断运行关系3.2 测试程序 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 课程需要&#xff1a; 提示&#x…

Mysql基础(四)DML之insert语句

一 insert 语句 强调&#xff1a; 本文介绍的内容很基础,仅做记录用,参考价值较少 ① 总述 目的&#xff1a; 增加rows记录1、完整格式insert [into] 表名[字段名1[, 字段名2]] value[s](值1, 值2);备注&#xff1a;指定部分字段添加,没有被指定的字段要么会自动增长,要…

微信小程序demo-----制作文章专栏

前言&#xff1a;不管我们要做什么种类的小程序都涉及到宣传或者扩展其他业务&#xff0c;我们就可以制作一个文章专栏的页面&#xff0c;实现点击一个专栏跳转到相应的页面&#xff0c;页面可以有科普类的知识或者其他&#xff0c;然后页面下方可以自由发挥&#xff0c;添加联…

ensp 配置s5700 ssh登陆

#核心配置 sys undo info-center enable sysname sw1 vlan 99 stelnet server enable telnet server enable int g 0/0/1 port lin acc port de vlan 99 q user-interface vty 0 4 protocol inbound ssh authentication-mode aaa q aaa local-user admin0 password cipher adm…

结构分析的有限元法及matlab实现(徐荣桥)|【PDF教材+配套案例Matlab源码】

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

为何数据库推荐将IPv4地址存储为32位整数而非字符串?

目录 一、IPv4地址在数据库中的存储方式&#xff1f; 二、IPv4地址的存储方式比较 &#xff08;一&#xff09;字符串存储 vs 整数存储 &#xff08;二&#xff09;IPv4地址"192.168.1.8"说明 三、数据库推荐32位整数存储方式原理 四、存储方式对系统性能的影响…

服务器IP选择

可以去https://ip.ping0.cc/查看IP的具体情况 1.IP位置--如果是国内用&#xff0c;国外服务器的话建议选择日本&#xff0c;香港这些比较好&#xff0c;因为它们离这里近&#xff0c;一般延时低&#xff08;在没有绕一圈的情况下&#xff09;。 不过GPT的话屏蔽了香港IP 2. 企…

C++ | Leetcode C++题解之第64题最小路径和

题目&#xff1a; 题解&#xff1a; class Solution { public:int minPathSum(vector<vector<int>>& grid) {if (grid.size() 0 || grid[0].size() 0) {return 0;}int rows grid.size(), columns grid[0].size();auto dp vector < vector <int>…

WebAuthn 无密码身份认证

文章目录 WebAuthn简介工作原理组成部分架构实现注册认证应用场景案例演示 WebAuthn简介 WebAuthn&#xff0c;全称 Web Authentication&#xff0c;是由 FIDO 联盟&#xff08;Fast IDentity Online Alliance&#xff09;和 W3C&#xff08;World Wide Web Consortium&#x…

【跟马少平老师学AI】-【神经网络是怎么实现的】(八)循环神经网络

一句话归纳&#xff1a; 1&#xff09;词向量与句子向量的循环神经网络&#xff1a; x(i)为词向量。h(i)为含前i个词信息的向量。h(t)为句向量。 2&#xff09;循环神经网络的局部。 每个子网络都是标准的全连接神经网络。 3&#xff09;对句向量增加全连接层和激活函数。 每个…

【Web】CTFSHOW 新手杯 题解

目录 easy_eval 剪刀石头布 baby_pickle repairman easy_eval 用script标签来绕过 剪刀石头布 需要赢100轮&#x1f914; 右键查看源码拿到提示 一眼session反序列化 打PHP_SESSION_UPLOAD_PROGRESS 脚本 import requestsp1 a|O:4:"Game":1:{s:3:"log…

如何将 redis 快速部署为 docker 容器?

部署 Redis 作为 Docker 容器是一种快速、灵活且可重复使用的方式&#xff0c;特别适合开发、测试和部署环境。本文将详细介绍如何将 Redis 部署为 Docker 容器&#xff0c;包括 Docker 安装、Redis 容器配置、数据持久化、网络设置等方面。 步骤 1&#xff1a;安装 Docker 首…

NI CRIO 9045 LABVIEW2020

1.labview工程如果要访问CRIO&#xff0c;需要设置以下&#xff0c;否则在项目中连接失败。 2.项目中如果要传文件&#xff0c;需要安装WebDEV 3.使用WebDAV将文件传输到实时(RT)目标 https://knowledge.ni.com/KnowledgeArticleDetails?idkA03q000000YGytCAG&lzh-CN

34.Docker基本操作

镜像相关的命令 镜像名称分为两部分组成&#xff1a;[repository]:[tag],tag就是镜像的版本。如果tag没有指定默认就是latest,表示最新版本的镜像。 查看docker命令的帮助信息 docker --help 具体某条命令的帮助信息 docker images --help 案例一&#xff1a;从DockerHub中…

【Vue3】openlayers加载瓦片地图并手动标记坐标点

目录 一、创建Vue3项目 二、openlayers加载瓦片地图&#xff08;引js文件版&#xff09; 2.1 将以下的文件复制到public下 2.2 index.html引入ol脚本 2.3 删除项目自带的HelloWorld.vue&#xff0c;创建Map.vue 2.4 编码Map.vue 2.5 修改App.vue 2.6 启动项目测试 三、…