吴恩达机器学习 第三课 week1 无监督机器学习(下)

目录

01 学习目标

02 异常检测算法

 2.1 异常检测算法的概念

2.2 基于高斯模型的异常检测 

03 利用异常检测算法检测网络服务器的故障

3.1 问题描述

3.2 算法实现

3.3 问题升级

04 总结


01 学习目标

    (1)理解异常检测算法(Anomaly Detection Algorithm)的原理

    (2)利用异常检测算法检测网络服务器的故障。

02 异常检测算法

 2.1 异常检测算法的概念

       异常检测算法不是指某一特定算法,而是实现异常检测功能的算法统称,旨在识别数据集中不符合常规模式的数据点,如欺诈检测、网络安全、故障预测、生产线上的残次品等。以下是常用的异常检测算法:

  1. 基于统计的方法:

    • Z-Score: 计算数据点与数据集平均值的偏离程度,使用标准差作为度量。如果一个数据点的Z-Score超过某个阈值(通常是3),则认为它是异常的。
    • IQR(四分位距): 计算数据的第一四分位数(Q1)和第三四分位数(Q3)之间的距离,任何小于Q1-1.5IQR或大于Q3+1.5IQR的值被视为异常。
  2. 基于密度的方法:

    • 局部异常因子(LOF, Local Outlier Factor): 通过比较一个数据点与其邻居的密度来识别异常。如果一个点的密度远低于其邻居,则被认为是异常的。
    • DBSCAN(Density-Based Spatial Clustering of Applications with Noise): 一种聚类算法,能够识别出低密度区域的点作为异常点。
  3. 基于距离的方法:

    • K-最近邻(KNN): 通过计算一个数据点到其K个最近邻的距离的平均值或加权平均值,如果这个值显著高于其他点,则认为该点是异常的。
  4. 基于概率模型的方法:

    • 高斯混合模型(GMM): 利用GMM拟合数据分布,异常点被定义为在模型下概率很低的点。
    • 隐马尔可夫模型(HMM): 对于序列数据,HMM可以用来学习数据的正常行为模式,异常则表现为模型预测概率显著降低的状态。
  5. 基于机器学习的方法:

    • 孤立森林(Isolation Forest): 通过构建随机的决策树来“隔离”数据点,异常点更容易被“孤立”,因此通过平均路径长度来评估数据点的异常程度。
    • 支持向量机(SVM): 在异常检测中,可以通过一类SVM(只有一类标签的数据)来构造一个边界,将大部分数据包含在内,超出这个边界的点视为异常。
  6. 深度学习方法:

    • 自编码器(Autoencoders): 通过训练一个自编码器来重构输入数据,异常数据往往导致较大的重构误差。
    • 生成对抗网络(GANs): 可以学习数据的正常分布,异常点通过与生成的正常数据对比来识别。

2.2 基于高斯模型的异常检测 

       高斯模型是一种连续型概率模型,用于表示服从高斯分布(正态分布)的数据。

       n维高斯分布:

f(\textbf{x}|\theta )=\frac{1}{(2\pi)^{n/2}|\sum |^{1/2}}exp[-\frac{1}{2}(\textbf{x}-\mu )^{T}|\sum |^{-1}(\textbf{x}-\mu )]

上式中,\theta=(\mu ,\sum )为待估计参数,\mu是均值,\sigma ^2是方差,由最大似然估计得到。

        n=1时,上式变为一元高斯分布:

f(x|\theta )=\frac{1}{(2\pi)^{1/2}\sigma }exp[-\frac{1}{2}(x-\mu )^2\sigma ^{-2}]=\frac{1}{\sqrt{2\pi}\sigma }exp[-\frac{(x-\mu )^2}{2\sigma ^{2}}]

上式中,参数\mu\sigma ^2按下式估计:

\mu_j=\frac{1}{m}\sum_{i=1}^{m}x_j^{(i)}

\sigma^2_j=\frac{1}{m}\sum_{i=1}^{m}(x_j^{(i)}-\mu_j)^2

上式中,j为特征序数,i为特征的数据序数,m为数据总数。

        基于高斯模型的异常检测的原理即选定一个适当小的概率值p_\varepsilon作为界限,出现概率小于p_\varepsilon的数据均为异常数据。如下图所示(以1维为例):

03 利用异常检测算法检测网络服务器的故障

3.1 问题描述

       假设你现在是贝塔科技公司的高级主管,负责公司的服务器运维。今天你抽检了服务器的307份数据,打算采用“传输的数据量 (mb/s,每秒兆字节)”和“每台服务器的响应延迟(ms,毫秒)”两项指标检测网络服务器是否存在故障。

       Let's begining!

3.2 算法实现

     (1)导包

import numpy as np
import matplotlib.pyplot as plt
from utils import *

%matplotlib inline

    (2) 导入数据

      训练集共307组数据(抽检的数据),每组数据有2个数值,代表2个特征:“传输的数据量”、“服务器的响应延迟”;交叉验证集也收集了307组数据(以前保存的数据),每组数据有3个数值,分别为2个特征和1个值,值为0或1:0为正常、1为异常。训练集数据无标签,用于估计参数\mu\sigma ^2;交叉验证集数据被标记0/1,用于确定概率界限p_{\varepsilon}.。

# 导入无标签数据,307*2
X_train, X_val, y_val = load_data()

       X_train为训练数据集的特征列(307*2),X_val为交叉验证集的特征列(307*2),y_val 为交叉验证集的标签列(307*1)。

    (3)参数估计

        先定义高斯估计函数:

def estimate_gaussian(X): 

    m, n = X.shape
    mu = np.ones(n)
    var = np.ones(n)
    for i in range(n):
        mu = np.sum(X, axis=0) / m    
        var = np.sum((X - mu) **2, axis=0) / m
        
    return mu, var

       然后估计参数 :

# 估计每个特征的参数
mu, var = estimate_gaussian(X_train)              

print("Mean of each feature:", mu)
print("Variance of each feature:", var)

      运行以上代码,结果如下:

Mean of each feature: [14.11222578 14.99771051]
Variance of each feature: [1.83263141 1.70974533]

      现在有了参数\mu\sigma ^2,我们可以绘出概率密度分布:

# visualize_fit为自定义绘图函数
#visualize_fit(X_train, mu, var)
visualize_fit(X_val, mu, var)

       运行以上代码,结果如下:

  

       (4)定义概率模型

         得到 估计参数\mu\sigma ^2后,可以利用高斯分布定义概率模型:

def multivariate_gaussian(X, mu, var):
    
    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

       (这里,定义了一个n维高斯分布的概率模型) 

       (5)确定概率界限

        确定概率界限的原则是,p_{\varepsilon}在合理的取值下,当p_a<p_{\varepsilon}时,在交叉验证集中异常点a能被准确识别到。如何保证高精度地识别异常呢?可以采用F1评分标准,取一系列p_{\varepsilon}进行计算,谁的F1分数最高就选谁,步骤如下:

        首先,给定p_{\varepsilon}进行预测,将预测值与实际值进行对比得到4类情况,如下表:

        然后,计算预测precision(精度,查准率)和recall(召回率,查全率):

prec=\frac{tp}{tp+fp}

rec=\frac{tp}{tp+fn}

precision的含义是异常预测正确的概率有多大,recall的含义是成功找出异常的概率有多大。这两个指标存在这样的问题:当阈值p_{\varepsilon}设置为大值时prec增大、rec减小,当阈值p_{\varepsilon}设置为小值时prec减小、rec增大。

        接下来,计算一个更均衡的指标F1:

F_1=\frac{2\cdot prec\cdot rec}{prec + rec}

F1将prec和rec进行了平衡,并且F1数值受二者中较小值控制。

        现在,可以定义概率界限计算函数:

def select_threshold(y_val, p_val): 

    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):
     
        predictions = p_val < epsilon
        tp = np.sum((predictions == 1) & (y_val == 1))
        fp = np.sum((predictions == 1) & (y_val == 0))
        fn = np.sum((predictions == 0) & (y_val == 1))

        if (tp + fp)  == 0 or (tp + fn) == 0:
            prec = 0
            rec = 0
            F1 = 0
        else:
            prec = tp / (tp + fp)
            rec = tp / (tp + fn)
            F1 = 2 * prec * rec / (prec + rec)
        
        if F1 > best_F1:
            best_F1 = F1
            best_epsilon = epsilon
        
    return best_epsilon, best_F1

          然后,执行函数计算:

p_val = multivariate_gaussian(X_val, mu, var)
epsilon, F1 = select_threshold(y_val, p_val)

print('Best epsilon found using cross-validation: %e' % epsilon)
print('Best F1 on Cross Validation Set: %f' % F1)

       运行以上代码,结果如下:

Best epsilon found using cross-validation: 8.990853e-05
Best F1 on Cross Validation Set: 0.875000

      (6)检测异常,可视化

# 在训练集上找出异常值
outliers = p < epsilon

# 二维图中绘出307组数据
visualize_fit(X_train, mu, var)

# 用红色圆圈标记异常值
plt.plot(X_train[outliers, 0], X_train[outliers, 1], 'ro',
         markersize= 10,markerfacecolor='none', markeredgewidth=2)

       运行以上代码,结果如下:

       经过一番操作,发现这抽检的307组合数据中有6组异常。

3.3 问题升级

       当你检测出异常后,贝塔科技公司的同事们不停欢呼、夸赞你技术高超,希望你再秀一秀高级的。身为主管的你决定再抽检一批数据,以11个特征为依据进行异常检测。

       开始吧!

     (1)导入数据

# 导入数据
X_train_high, X_val_high, y_val_high = load_data_multi()
# 打印数据信息
print ('The shape of X_train_high is:', X_train_high.shape)
print ('The shape of X_val_high is:', X_val_high.shape)
print ('The shape of y_val_high is: ', y_val_high.shape)

       运行以上代码,结果为:

The shape of X_train_high is: (1000, 11)
The shape of X_val_high is: (100, 11)
The shape of y_val_high is:  (100,)

      (2)开始检测

# 参数估计
mu_high, var_high = estimate_gaussian(X_train_high)

# 训练集的概率计算
p_high = multivariate_gaussian(X_train_high, mu_high, var_high)

# 交叉验证集的概率计算
p_val_high = multivariate_gaussian(X_val_high, mu_high, var_high)

# 寻找界限
epsilon_high, F1_high = select_threshold(y_val_high, p_val_high)

# 计算异常数量
anomalies = sum(p_high < epsilon_high)

print('Best epsilon found using cross-validation: %e'% epsilon_high)
print('Best F1 on Cross Validation Set:  %f'% F1_high)
print('# Anomalies found: %d'% anomalies)

        运行以上代码,结果为:

Best epsilon found using cross-validation: 1.377229e-18
Best F1 on Cross Validation Set:  0.615385
# Anomalies found: 117

04 总结

     (1)异常检测算法的交叉验证集数据也是有标记的,但不同于监督学习算法的二分类:异常检测的数据中异常类型较多、但数量较少,分布极为不均。

     (2)异常检测的实现算法与维度(特征数)无关,均为4个步骤:参数估计>概率计算>确定阈值>检测异常。

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

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

相关文章

vue2实现打印功能(vue-print-nb的实现)

实现效果&#xff1a; 引入插件 npm install vue-print-nb --save import Print from vue-print-nb Vue.use(Print) <div ref"printTest" id"printTest"><div style"text-align: center; page-break-after: always"><div style…

强化学习——基本概念

何为强化学习 机器学习的一大分支 强化学习&#xff08;Reinforcement Learning&#xff09;是机器学习的一种&#xff0c;它通过与环境不断地交互&#xff0c;借助环境的反馈来调整自己的行为&#xff0c;使得累计回报最大。强化学习要解决的是决策问题——求取当前状态下最…

HNU-计算机系统(CSAPP)实验三 BombLab

前言 BombLab来自《深入理解计算机系统》&#xff08;CSAPP&#xff09;一书的第三章“程序的机器级表示”的配套实验&#xff0c;该实验的目的是通过反汇编可执行程序bomb&#xff0c;来反推出程序执行内容&#xff0c;进而能够正确破解“密码”&#xff0c;拆除“炸弹”。 …

【人机交互 复习】第8章 交互设计模型与理论

一、引文 1.模型&#xff1a; 有的人成功了&#xff0c;他把这一路的经验中可以供其他人参考的部分总结了出来&#xff0c;然后让别人套用。 2.本章模型 &#xff08;1&#xff09;计算用户完成任务的时间&#xff1a;KLM &#xff08;2&#xff09;描述交互过程中系统状态的变…

java连接kerberos用户认证以及java连接ldap读取账户信息

文章目录 一、背景二、代码2.1目录2.2配置文件application.properties2.3pom依赖2.4代码AuthProviderConfig配置类CustomConfigurationByKeytab配置类CustomConfigurationByPassword配置类LdapConfiguration配置类TestControllerLdapUser实体类MyCallbackHandlerLdapUserAttrib…

SpringCloudAlibaba组件之间的版本兼容问题

我之前的SpringCloud项目以及使用的组件的版本是这些 但是我不知道具体的版本兼容问题&#xff0c;以及各种组件之间对应的版本 想要使用我们的springcloud和springcloudAlibaba组件&#xff0c;我们就要版本对应&#xff0c;不然就是一堆依赖报错&#xff0c;要不就是缺了这个…

业余时间做跨境电商实现经济自由,我是怎么做的?

在知乎问答上翻阅大家非常感兴趣的问题&#xff0c;解答一些疑惑的同时&#xff0c;发现大家对跨境电商还是很感兴趣的&#xff0c;类似“小白如何入局跨境电商&#xff1f;2024跨境电商平台&#xff0c;哪些值得做&#xff1f;现在电商哪个平台好做?”等的这些主观问题&#…

Java程序员Python一小时速成

背景 由于最近要开发一些AI LLM&#xff08;Large Language Model 大语言模型&#xff09;应用程序&#xff0c;然后又想使用LangChain&#xff08;LangChain 是一个用于构建和操作大语言模型&#xff08;LLMs&#xff09;的框架&#xff0c;旨在帮助开发者更方便地集成和使用…

Vant2组件库的基础应用

目录 一、Picker 选择器 1.1、数组对象处理 1.2、每个选项颜色设置 二、滚动分页加载列表 三、Calendar 日历(可选范围限制) 四、input值过滤 官网&#xff1a;Vant 2 - Mobile UI Components built on Vue 一、Picker 选择器 官网示例数据&#xff1a; columns: [杭州…

Anti-human IL-12/-23 (p40) mAb (MT3279H), azide free

Anti-human IL-12/-23 (p40) mAb (MT3279H), azide free该单克隆抗体用于中和人IL-12/-23的生物活性。 产品详情&#xff1a; 免疫原&#xff1a;人重组IL-23蛋白 Isotype: mouse IgG2b Specificity: 天然和重组人IL-12和 IL-23蛋白的p40 subunit 浓度&#xff1a;1mg/ml …

查看nginx安装/配置路径,一个服务器启动两个nginx

查看nginx安装/配置路径 查看nginx的pid&#xff1a; ps -ef | grep nginx查看pid对应服务的启动路径 ll /proc/2320/exe使用检查配置文件命令&#xff0c;查看配置文件位置 /usr/local/nginx/sbin/nginx -t一个服务启动两个nginx 拷贝一份程序&#xff0c;cpbin是我自己创…

【HarmonyOS NEXT】har 包的构建生成过程

Har模块文件结构 构建HAR 打包规则 开源HAR除了默认不需要打包的文件&#xff08;build、node_modules、oh_modules、.cxx、.previewer、.hvigor、.gitignore、.ohpmignore&#xff09;和.gitignore/.ohpmignore中配置的文件&#xff0c;cpp工程的CMakeLists.txt&#xff0c;…

[CR]厚云填补_基于相似像素的渐进式缺口填补方法PGFCTS

Progressive gap-filling in optical remote sensing imagery through a cascade of temporal and spatial reconstruction models--Remote Sensing of Environment--2024.06.01 Abstract 在光学遥感图像的预处理中&#xff0c;由于云层较厚或传感器发生故障而产生的空白填充一…

群晖NAS本地部署并运行一个基于大语言模型Llama2的个人本地聊天机器人

前言 本文主要分享如何在群晖 NAS 本地部署并运行一个基于大语言模型 Llama 2 的个人本地聊天机器人并结合内网穿透工具发布到公网远程访问。本地部署对设备配置要求高一些,如果想要拥有比较好的体验,可以使用高配置的服务器设备. 目前大部分大语言模型的产品都是基于网络线上…

律所优选管理软件排名:Alpha法律智能操作系统领先行业

面对庞大复杂的管理体量&#xff0c;律所一体化建设面临的首要问题便是信息化系统的建设与应用&#xff0c;即统一管理平台的问题。Alpha法律智能操作系统集法律大数据、律所管理、人工智能于一体&#xff0c;从业务、人员、信息三个板块最大限度支持律所数字化建设&#xff0c…

电脑桌面文件夹删除不了怎么办?6种方法快速解决,建议收藏!

桌面文件夹删不掉怎么办&#xff1f;有时会遇到桌面上的文件夹无法删除的问题&#xff0c;这是由于文件夹被系统进程或某些应用占用&#xff0c;或者是由于权限设置等原因造成的。以下是解决桌面文件夹无法删除问题的方法&#xff0c;帮助你有效地清理桌面环境。 桌面文件夹删不…

南京邮电大学计算机网络实验二(网络路由器配置RIP协议)

文章目录 一、 实验目的和要求二、 实验环境(实验设备)三、 实验步骤四、实验小结&#xff08;包括问题和解决方法、心得体会、意见与建议等&#xff09;五、报告资源 一、 实验目的和要求 掌握思科路由器的运行过程&#xff0c;掌握思科路由器的硬件连线与接口&#xff0c;掌…

HNU-计算机系统(CSAPP)实验一 原型机vspm1.0

一、题目 【实验目的】 &#xff08;1&#xff09;了解冯诺伊曼体系结构&#xff1b; &#xff08;2&#xff09;理解指令集结构及其作用&#xff1b; &#xff08;3&#xff09;理解计算机的运行过程&#xff0c;就是指令的执行过程&#xff0c;并初步掌握调试方法。 【实…

黑马苍穹外卖4 店铺营业状态设置+Redis基础

店铺营业状态设置 Redis MySQL Java并发 JavaMVC 计算机网络 操作系统 算法&#xff0c;后端面试主要是这些&#xff0c;外加项目 Redis 数据库&#xff0c;基于内存存储的key-value结构。 mysql是磁盘存储&#xff0c;通过二维表存储。 在文件夹目录打开cmd 服务端&#xf…

HNU操作系统2023期中考试试卷及参考答案

本试题参考 甘晴void 的CSDN博客【2.2】操作系统OS_甘晴void的博客-CSDN博客&#xff0c;本意为期中复习自用&#xff0c;答案在其基础上进行进一步完善&#xff0c;若有错误还请指正&#xff01; 第一题&#xff1a;基础题&#xff08;20分&#xff09; 1.1&#xff08;4分&a…