机器学习之非监督学习(二)异常检测(基于高斯概率密度)

机器学习之非监督学习(二)异常检测(基于高斯概率密度)

  • 0. 文章传送
  • 1.案例引入
  • 2.高斯正态分布
  • 3.异常检测算法
  • 4.异常检测 vs 监督学习
  • 5.算法优化
  • 6.代码实现

0. 文章传送

机器学习之监督学习(一)线性回归、多项式回归、算法优化[巨详细笔记]
机器学习之监督学习(二)二元逻辑回归
机器学习之监督学习(三)神经网络基础
机器学习之监督学习(四)决策树和随机森林
机器学习之实战篇——预测二手房房价(线性回归)
机器学习之实战篇——肿瘤良性/恶性分类器(二元逻辑回归)
机器学习之实战篇——MNIST手写数字0~9识别(全连接神经网络模型)
机器学习之非监督学习(一)K-means 聚类算法
机器学习之实战篇——图像压缩(K-means聚类算法)

1.案例引入

假设你是飞机生产商,生产了一批飞机发动机,并记录其两个特征x1(heat)和x2(vibration)。由于我们的生产技术过硬,可以相信其中大多数发动机能够正常工作。从机器学习的角度出发,那么我们能否充分利用已有的发动机数据,用来检测后续生产的发动机是否异常呢?这就是典型的异常监测任务。

如下图所示,可以根据数据建立概率密度分布模型,对于新的测试数据,若其位置对应的概率小于某个设定阈值,则可将其标记为‘异常。’
在这里插入图片描述
再举一个例子,数据中心可以通过用户电脑工作的实时数据(例如内存使用、CPU使用率)监测用户电脑是否异常,发现潜在的风险,例如计算机被攻击或感染恶意软件。一旦检测到异常,系统可以自动提醒用户注意,或向 IT 支持团队发送警报进行进一步检查,以保障用户体验和数据安全性。
在这里插入图片描述

2.高斯正态分布

在这里插入图片描述
高斯正态分布(Gaussian Normal Distribution)是概率统计中最重要和最常用的分布之一。它在许多自然现象中都有广泛的应用。以下是关于高斯正态分布的详细介绍:

  1. 定义
    高斯正态分布是一个连续概率分布,其概率密度函数(PDF)由以下公式给出:

p ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 p(x) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x - \mu)^2}{2\sigma^2}} p(x)=2π σ1e2σ2(xμ)2

其中:
μ 是均值(mean),决定了分布的中心位置。
σ 是标准差(standard deviation),影响分布的宽度和形状。
σ^2是方差(variance),表示数据的离散程度。

  1. 特性
    对称性:高斯正态分布是一个对称分布,均值 \muμ 是其对称中心。
    钟形曲线:概率密度函数图形呈现为钟形曲线,具有单峰性,意味着大多数数据集中在均值附近。
    68-95-99.7法则:在高斯分布中,约68%的数据点位于均值的一个标准差内 ( μ − σ 到 μ + σ ) (\mu - \sigma到 \mu + \sigma) μσμ+σ,约95%位于两个标准差内,99.7%位于三个标准差内。
    渐近性:分布在无限远处趋向于零,但永远不会等于零。
  2. 标准正态分布
    标准正态分布是特殊的高斯分布,其均值为0,标准差为1。其概率密度函数为:

p ( z ) = 1 2 π e − z 2 2 p(z) = \frac{1}{\sqrt{2\pi}} e^{-\frac{z^2}{2}} p(z)=2π 1e2z2

其中 z 是标准分数(z-score),定义为: z = x − μ σ z = \frac{x - \mu}{\sigma} z=σxμ.

通过标准化,可以将任意高斯分布转换为标准正态分布。

关于多元高斯分布,参照下图:
在这里插入图片描述

3.异常检测算法

在异常检测中,我们需要建立概率密度分布模型,通常假设每个特征满足正态分布。
x i ~ N ( μ i , σ i 2 ) , p ( x i ) = 1 2 π σ i e − ( x − μ i ) 2 2 σ i 2 x_i~N(\mu_i,\sigma_i^2),p(x_i)=\frac{1}{\sqrt{2\pi}\sigma_i}e^{-\frac{(x-\mu_i)^2}{2\sigma_i^2}} xiN(μi,σi2),p(xi)=2π σi1e2σi2(xμi)2
其中均值和标准差(无偏估计)的计算公式为:
μ i = 1 m ∑ k = 1 m x i ( k ) , σ i = 1 m − 1 ∑ k = 1 m ( μ i − x i ( k ) ) 2 \mu_i=\frac{1}{m}\sum_{k=1}^{m}x_i^{(k)},\sigma_i=\sqrt{\frac{1}{m-1}\sum_{k=1}^{m}(\mu_i-x_{i}^{(k)})^2} μi=m1k=1mxi(k),σi=m11k=1m(μixi(k))2
考虑多个特征,理想情况是考虑各个特征之间相互独立,则由概率公式可得
p ( x ) = ∏ j p ( x j ; μ j , σ j 2 ) p(x)=\prod_j{p(x_j;\mu_j,\sigma_j^2)} p(x)=jp(xj;μj,σj2)

尽管通常情况下各个特征之间不完全独立,但事实表明这种计算方式能取得较好的模型效果。

设置异常检测的临界概率(阈值) ϵ \epsilon ϵ,对于待检测样本,计算其概率p(x)并与 ϵ \epsilon ϵ比较,如果p(x)< ϵ \epsilon ϵ,则将其检测为异常样本。

在异常检测中,如何确定合适的阈值 ϵ \epsilon ϵ?在前面的系列文章中我们提到,对于参数选择,一种有效方式是引入验证集,通过验证效果来决定理想的参数。

如下图所示,假设我们已知有10000台正常发动机和20台异常发动机,这时可以选择6000台正常发动机作为训练集(符合算法假设);然后选择2000台正常发动机和10台异常发动机作为验证集;剩下的部分作为测试集。

由于异常检测任务归类于分类问题,因此评估的参数包括混淆矩阵、召回率、精确率、F1-score等等。通过选取不同的阈值,比较验证效果,来选择最优阈值。
同样的,测试集上的表现可以用这些分类指标进行评估。
在这里插入图片描述

4.异常检测 vs 监督学习

异常检测属于非监督学习,训练集中的数据均未带标签(默认正常),但我们可能拥有少量带标签的数据(例如发动机案例中已知少量异常发动机),这时候使用监督学习分类算法也可行,那如何在监督学习和基于概率的异常检测之间进行选择呢?

一般来说,异常检测通常适用的情况如下:
①我们只有少量异常数据和大量正常数据
②异常种类很多,未来新的样本可能出现新的异常情况,算法很难从已有数据中捕获足够的异常信息。

监督学习更适用的情况如下:
①我们有大量的正常和异常数据
②异常种类可枚举或未来新的样本呈现的异常情况具有重复性。
在这里插入图片描述
适合两种算法的典型场景如下图所示:
在这里插入图片描述

5.算法优化

在异常检测任务中,选取和构建合适的特征非常重要,因为基本假设是特征满足正态分布,因此对于偏离正态分布较大的特征,我们希望通过特征处理,将其分布趋近于正态分布。

如下图所示,绘制了某个特征的直方图,可以看到分布曲线向左偏移,偏离正态分布较大。这时候可以通过取对数函数 l o g ( x + c ) log(x+c) log(x+c),或取幂函数 x c ( 0 < c < 1 ) x^c(0<c<1) xc(0<c<1),调整分布接近正态分布。这一过程可以通过编程尝试不同参数c实现。
在这里插入图片描述
异常检测中另一种有效的优化方法是通过误差分析引入新的特征。例如在线上交易安全检测器中,我们选取了特征x1(表示交易量)作为特征,训练好模型后进行验证时发现一个错误的案例,发现该案例用户打字速度异常快,因此可以引入新的特征x2:打字速度。这样建立的模型取得了更好的分类效果。
在这里插入图片描述
再比如在电脑检测案例中,如果发现一台电脑具有很的高CPU使用率,却使用了很少的网络流量,基于此异常情况可以构建新的特征(如下图,可以取比值)。
在这里插入图片描述
特征工程的手段灵活而丰富,但最终的目的都是提升模型的检测能力,在验证集和测试集中都能取得满意的表现。

6.代码实现

计算各个特征高斯分布的均值与标准差函数

def estimate_gaussian(X): 
    """
    Calculates mean and variance of all features 
    in the dataset
    
    Args:
        X (ndarray): (m, n) Data matrix
    
    Returns:
        mu (ndarray): (n,) Mean of all features
        var (ndarray): (n,) Variance of all features
    """

    m, n = X.shape
    
    mu=np.average(X,axis=0)
    var=np.var(X,axis=0,ddof=0) #无偏估计
        
    return mu, var

计算所有输入数据对应的概率密度

def multivariate_gaussian(X, mu, var):
    """
    Computes the probability 
    density function of the examples X under the multivariate gaussian 
    distribution with parameters mu and var. If var is a matrix, it is
    treated as the covariance matrix. If var is a vector, it is treated
    as the var values of the variances in each dimension (a diagonal
    covariance matrix
    """
    
    k = len(mu)
    
    if var.ndim == 1:
        var = np.diag(var)
        
    X = X - mu
    p = (2* np.pi)**(-k/2) * np.linalg.det(var)**(-0.5) * \
        np.exp(-0.5 * np.sum(np.matmul(X, np.linalg.pinv(var)) * X, axis=1))
    
    return p

根据F1-score选择最佳阈值(阈值取值范围从 p m i n 到 p m a x , 取 1000 个值 p_{min}到p_{max},取1000个值 pminpmax,1000个值)

def select_threshold(y_val, p_val): 
    """
    Finds the best threshold to use for selecting outliers 
    based on the results from a validation set (p_val) 
    and the ground truth (y_val)
    
    Args:
        y_val (ndarray): Ground truth on validation set
        p_val (ndarray): Results on validation set
        
    Returns:
        epsilon (float): Threshold chosen 
        F1 (float):      F1 score by choosing epsilon as threshold
    """ 

    best_epsilon = 0
    best_F1 = 0
    F1 = 0
    
    step_size = (max(p_val) - min(p_val)) / 1000
    
    for epsilon in np.arange(min(p_val), max(p_val), step_size):
    
        ### START CODE HERE ### 
        y_pred=(p_val < epsilon)
        
        tp=np.sum((y_val==1)&(y_pred==1))
        fp=np.sum((y_val==0)&(y_pred==1))
        fn=np.sum((y_val==1)&(y_pred==0))

        prec=tp/(tp+fp)
        rec=tp/(tp+fn)
        F1=(2*prec*rec)/(prec+rec)
        ### END CODE HERE ### 
        
        if F1 > best_F1:
            best_F1 = F1
            best_epsilon = epsilon
        
    return best_epsilon, best_F1

实例用法

# Estimate the Gaussian parameters
mu, var = estimate_gaussian(X_train)

# Evaluate the probabilites for the training set
p = multivariate_gaussian(X_train, mu, var)

# Evaluate the probabilites for the cross validation set
p_val = multivariate_gaussian(X_val, mu, var)

# Find the best threshold
epsilon, F1 = select_threshold(y_val, p_val)

# Compute the probabilities and detection results for the testing set
p_test=multivariate_gaussian(X_test,mu,var)
y_test=(p_test<epsilon).astype('int')

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

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

相关文章

【mac开发入坑指南】能让你的终端好用一万倍的神仙组合iTerm2 + oh-my-zsh

介绍 iTerm2 iTerm2是默认终端的替代品&#xff0c;也是目前Mac系统下最好用的终端工具&#xff0c;集颜值和效率于一身。 Oh-My-Zsh Oh My Zsh 是一款社区驱动的命令行工具&#xff0c;正如它的主页上说的&#xff0c;Oh My Zsh 是一种生活方式。 它基于Zsh 命令行&#xff0c…

N诺计算机考研-错题

D 我们熟知的Windows XP、Linux、Mac OS X等都是多用户多任务分时操作系统。 C 分布式系统:由一组独立的计算机组成的系统,这些计算机通过网络相互连接,并且对外界用户来说,它们共同工作就像是一个单一的、统一的计算平台或服务。分布式系统的关键特征: 透明性:用户和应…

FLStudio21Mac版flstudio v21.2.1.3430简体中文版下载(含Win/Mac)

给大家介绍了许多FL21版本&#xff0c;今天给大家介绍一款FL Studio21Mac版本&#xff0c;如果是Mac电脑的朋友请千万不要错过&#xff0c;当然我也不会忽略掉Win系统的FL&#xff0c;链接我会放在文章&#xff0c;供大家下载与分享&#xff0c;如果有其他问题&#xff0c;欢迎…

[图解]静态关系和动态关系

1 00:00:01,060 --> 00:00:04,370 首先我们来看静态关系和动态关系 2 00:00:06,160 --> 00:00:10,040 我们要尽量基于静态关系来建立动态关系 3 00:00:11,740 --> 00:00:13,740 不能够在没有这个的基础上 4 00:00:14,220 --> 00:00:17,370 没有这个的情况下就胡…

Python第一篇:Python解释器

一&#xff1a;python解释器 python解释器是一款程序&#xff0c;用于解释、执行Python源代码。 一般python解释器都是c python使用c编写的&#xff0c;还有j python用java编写的。 二&#xff1a;python下载 三&#xff1a;使用示例 python进入控制台&#xff0c;python。 三…

【2.使用VBA自动填充Excel工作表】

目录 前言什么是VBA如何使用Excel中的VBA简单基础入门控制台输出信息定义过程&#xff08;功能&#xff09;定义变量常用的数据类型Set循环For To 我的需求开发过程效果演示文件情况测试填充源文件测试填充目标文件 全部完整的代码sheet1中的代码&#xff0c;对应A公司工作表Us…

2024年最新Redis内存数据库主从复制、哨兵模式、集群部署等详细教程(更新中)

Centos 安装 Redis 检查安装 GCC 环境 [rootVM-4-17-centos ~]# gcc --version gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; no…

Cisco Secure Firewall Threat Defense Virtual 7.6.0 发布下载,新增功能概览

Cisco Secure Firewall Threat Defense Virtual 7.6.0 - 思科下一代防火墙虚拟设备 (FTDv) Firepower Threat Defense (FTD) Software for ESXi & KVM 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-firepower-7/&#xff0c;查看最新版。原创作品&#xff0c…

信息安全管理工程师(工信部教育与考试中心)

在信息技术迅猛发展的时代&#xff0c;信息安全已经成为企业乃至国家安全不可或缺的一环。 工信部高级信息安全管理工程师认证&#xff0c;作为软考中的一项顶尖资格认证&#xff0c;对提升信息安全管理人员的专业能力、确保信息安全性具有至关重要的作用。 本文将深入探讨该…

神经网络(四):UNet图像分割网络

文章目录 一、简介二、网络结构2.1编码器部分2.2解码器部分2.3完整代码 三、实战案例 一、简介 UNet网络是一种用于图像分割的卷积神经网络&#xff0c;其特点是采用了U型网络结构&#xff0c;因此称为UNet。该网络具有编码器和解码器结构&#xff0c;两种结构的功能如下&#…

网络安全中的 EDR 是什么:概述和功能

专业知识&#xff1a;EDR、XDR、NDR 和 MDR_xdr edr ndr-CSDN博客 端点检测和响应 (EDR) 是一种先进的安全系统&#xff0c;用于检测、调查和解决端点上的网络攻击。它可以检查事件、检查行为并将系统恢复到攻击前的状态。EDR 使用人工智能、机器学习和威胁情报来避免再次发生攻…

矩阵分析 学习笔记4 内积与Gram矩阵

内积 定义 由于对称&#xff0c;第二变元线性那第一变元也线性了。例如这个&#xff1a;

Tomcat may not be running

一、问题背景 tomcat7运行在JDK1.7上&#xff0c;可启动tomcat&#xff0c;但是停止时报错误&#xff0c;如下&#xff1a; 二、适用条件 JDK1.7/JDK1.8 tomcat7 三、解决方法 1、查找java路径 which java 2、修改文件 找到/usr/lib/jvm/jdk1.7.0_80/jre/lib/security/j…

力扣P1706全排列问题 很好的引入暴力 递归 回溯 dfs

代码思路是受一个洛谷题解里面大佬的启发。应该算是一个dfs和回溯的入门题目&#xff0c;很好的入门题目了下面我会先给我原题解思路我想可以很快了解这个思路。下面是我自己根据力扣大佬写的。 我会进行详细讲解并配上图辅助理解大家请往下看 #include<iostream> #inc…

Java 注解详解:从基础到自定义及解析

注解&#xff1a;概述 目标 能够理解注解在程序中的作用 路径 什么是注解注解的作用 注解 什么是注解&#xff1f; 注解(Annotation)也称为元数据&#xff0c;是一种代码级别的说明注解是JDK1.5版本引入的一个特性&#xff0c;和类、接口是在同一个层次注解可以声明在包…

创意实现!在uni-app小程序商品详情页轮播中嵌入视频播放功能

背景介绍 通过uni-app框架实现商城小程序商品详情页的视频与图片轮播功能&#xff0c;以提升用户体验和增加商品吸引力。通过展示商品视频和图片&#xff0c;用户可以更全面地了解商品细节&#xff0c;从而提高购买决策的便利性和满意度。这种功能适用于各类商品&#xff0c;如…

Redis --- redis事务和分布式事务锁

redis事务基本实现 Redis 可以通过 MULTI&#xff0c;EXEC&#xff0c;DISCARD 和 WATCH 等命令来实现事务(transaction)功能。 > MULTI OK > SET USER "Guide哥" QUEUED > GET USER QUEUED > EXEC 1) OK 2) "Guide哥"使用 MULTI命令后可以输入…

嘉立创EDA-- 线宽、过孔和电流大小对比图

导线宽度和电流大小如何来考虑 1 电流大小需要考虑问题 1、允许的温升&#xff1a;如果能够允许的铜线升高的温度越高&#xff0c;那么允许通过的电流自然也就越高 2、走线的线宽&#xff1a;线越宽 &#xff0c;导线横截面积越大&#xff0c;电阻越小&#xff0c;发热越小&a…

影刀---实现我的第一个抓取数据的机器人

你们要的csdn自动回复机器人在这里文末哦&#xff01; 这个上传的资源要vip下载&#xff0c;如果想了解影刀这个软件的话可以私聊我&#xff0c;我发你 目录 1.网页对象2.网页元素3.相似元素组4.元素操作设置下拉框复选框滚动条获取元素的信息 5.变量6.数据的表达字符串变量列…

汽车免拆诊断案例 | 2016 款宾利GT车仪表盘上的多个故障灯点亮

故障现象 一辆2016款宾利欧陆GT车&#xff0c;搭载CYCB发动机&#xff0c;累计行驶里程约为4.5万km。据车主反映&#xff0c;发动机偶尔无法起动&#xff0c;仪表盘上的多个故障灯点亮&#xff08;图1&#xff09;。此外&#xff0c;刮水器、电动车窗及空调等电器设备功能失效…