首页 > 其他分享 >节点异常检测-二维高斯分布

节点异常检测-二维高斯分布

时间:2024-03-16 11:15:41浏览次数:26  
标签:椭圆 均值 矩阵 协方差 二维 sigma 节点 高斯分布

所以一个样本是一个椭圆曲线吗?

不完全是这样。在二维高斯分布的上下文中,单个样本是分布中的一个点,而不是一个椭圆曲线。椭圆曲线实际上表示的是等高线,也就是概率密度函数在不同值下的轮廓线。每条椭圆曲线上的点具有相同的概率密度,这些椭圆反映了数据的分布特性,如集中趋势和变异情况。

当我们谈论二维高斯分布时,通常意味着数据点在二维空间中的分布。这个分布可以由两个变量的均值、方差以及它们之间的协方差来描述。在这个分布中,最密集的数据点区域位于均值附近,数据点的密度向外逐渐减少。等高线图是一种表示这种密度变化的可视化方式,其中每一条椭圆曲线连接所有具有相同概率密度值的点。

因此,如果你有一个特定的样本点,它只是这个二维空间中的一个点。你可以计算它在高斯分布下的概率密度,然后通过查看它落在哪一条等高线上来大致了解它的"正常性"或"异常性"。样本点越靠近分布的中心(即均值所在位置),通常被认为是越"正常"的;而那些位于较远等高线(即低概率密度区域)的样本点,则可能被视为异常。

在二维的数据里,均值是已知的,协方差矩阵有几个未知的参数是已知的?是否可以通过编码器去实现?

在二维数据的情况下,均值向量((\mu))由两个元素组成,分别对应两个维度的均值。协方差矩阵((\Sigma))是一个(2 \times 2)矩阵,理论上包含四个参数:两个方差(对角线上的元素)和两个相同的协方差(对角线以外的元素,因为(\Sigma)是对称的)。所以,总共有三个独立参数需要确定:(\sigma_{1}2)、(\sigma_{2}2)(两个方差),和(\sigma_{12} = \sigma_{21})(协方差)。

如果某些参数是已知的,可以通过剩余的数据来估计未知参数。例如,如果已知一个方差和协方差,则可以使用样本数据来估计另一个方差。

以下是一个通过Python代码实现的例子,假设我们知道协方差矩阵的一些参数,我们如何估计整个协方差矩阵:

import numpy as np

# 假设我们有一些二维数据
data = np.array([[1, 2], [2, 3], [3, 5], [4, 2]])

# 已知参数
known_sigma_1_squared = 0.5  # 第一个变量的方差
known_sigma_12 = 0.1        # 两个变量之间的协方差

# 使用数据估计均值
mean = np.mean(data, axis=0)

# 估计第二个变量的方差
sigma_2_squared = np.var(data[:, 1], ddof=1)

# 构造协方差矩阵
cov_matrix = np.array([[known_sigma_1_squared, known_sigma_12],
                       [known_sigma_12, sigma_2_squared]])

print("Estimated Covariance Matrix:")
print(cov_matrix)

这段代码首先计算了数据的均值,然后用已知的方差和协方差值构造了协方差矩阵。请注意,这个例子假设了某些参数是已知的,而在实际情况中,可能需要根据具体情况来确定这些参数。

如果需要从数据中估计协方差矩阵,而不是依赖于已知参数,可以直接使用np.cov(data, rowvar=False)来计算整个数据集的协方差矩阵,其中data是你的二维数据数组,rowvar=False参数表示每一列代表一个变量。

这种方法允许你根据实际数据和任何已知的参数约束来估计协方差矩阵,从而在进行二维高斯分布建模和后续的分析(如异常检测)时使用。

在二维的数据样本里,均值是已知的,方差也是已知的,而协方差的值是未知的。是否可以通过编码器生成协方差的值。

如果在二维数据中均值和方差是已知的,但协方差是未知的,我们可以利用数据样本来估计协方差的值。在统计学中,协方差表示两个变量之间的线性相关程度,它可以通过样本数据计算得到。如果你的数据是(X)和(Y)两个变量组成的,协方差的公式如下:

[ \text{Cov}(X, Y) = \frac{1}{n-1} \sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y}) ]

其中,(\bar{X})和(\bar{Y})分别是(X)和(Y)的样本均值,(n)是样本大小。如果均值是已知的,可以直接使用这些已知值而不是从样本中计算它们。

以下是如何用Python代码来计算协方差的一个例子,假设我们已经知道了均值和方差:

import numpy as np

# 示例数据
data = np.array([[1, 2], [2, 3], [3, 2], [4, 4]])

# 假定已知的均值
mean_x, mean_y = 2.5, 2.75  # 例如,这些是已知的均值

# 计算协方差
# 注意:这里我们直接使用已知的均值
cov_xy = np.sum((data[:, 0] - mean_x) * (data[:, 1] - mean_y)) / (data.shape[0] - 1)

print("Estimated Covariance:", cov_xy)

这段代码首先定义了一组二维数据data,然后使用公式直接计算了(X)和(Y)之间的协方差,这里假设均值是已知的并直接使用这些值进行计算。这种方法可以帮助你估计在给定均值和方差情况下的协方差值,从而完整地定义二维高斯分布的参数。

知道二维数据的均值、方差和协方差。如何构建识别异常的椭圆曲线

已知二维数据的均值、方差和协方差后,我们可以构建识别异常点的椭圆曲线,这个椭圆曲线基于二维高斯分布的等高线。这些等高线可以用来确定哪些点可能是异常的,基于它们与分布中心的相对距离。在高斯分布中,等高线对应于概率密度函数(PDF)的某个固定值,而这个值又对应于特定的置信区间或概率。通常,远离均值超过某个阈值的点可以被认为是异常点。

为了绘制这样的椭圆,我们需要使用均值向量和协方差矩阵来定义二维高斯分布。然后,可以计算并绘制等高线,表示特定概率密度值的区域。在统计学中,这些概率密度值通常对应于某个置信水平,例如,一个常见的选择是选择对应于高斯分布中95%置信区间的等高线。

以下是一个使用Python进行此操作的示例,其中使用了matplotlib来绘制椭圆等高线:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
import matplotlib.transforms as transforms

def plot_cov_ellipse(mean, cov, n_std=2, ax=None, **kwargs):
    """
    画出一个给定协方差矩阵的椭圆。
    参数:
    - mean: 数据的均值,形式为[x, y]
    - cov: 数据的协方差矩阵
    - n_std: 标准差的数量,用于确定椭圆的大小
    - ax: matplotlib的轴对象
    - kwargs: 传递给Ellipse patch的关键字参数
    """
    if ax is None:
        ax = plt.gca()

    # 计算协方差矩阵的特征值和特征向量
    vals, vecs = np.linalg.eigh(cov)
    order = vals.argsort()[::-1]
    vals, vecs = vals[order], vecs[:, order]

    # 计算椭圆的参数
    theta = np.degrees(np.arctan2(*vecs[:, 0][::-1]))
    width, height = 2 * n_std * np.sqrt(vals)
    ellipse = Ellipse(xy=mean, width=width, height=height, angle=theta, **kwargs)

    # 绘制椭圆
    ax.add_patch(ellipse)
    return ax

# 已知的均值和协方差矩阵
mean = [0, 0]
cov = [[2, 1], [1, 2]]  # 例如,方差分别为2,协方差为1

# 绘图
fig, ax = plt.subplots(1, 1)
plot_cov_ellipse(mean, cov, n_std=2, ax=ax, edgecolor='red', facecolor='none')

# 样式设置
ax.set_xlim(-5, 5)
ax.set_ylim(-5, 5)
ax.grid(True)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Elliptical Boundary for Anomaly Detection')
plt.show()

在这个例子中,plot_cov_ellipse函数根据提供的均值、协方差矩阵和标准差数量(n_std),绘制了一个椭圆。椭圆的中心是数据的均值,其形状和方向由协方差矩阵决定。通过调整n_std参数,你可以控制椭圆的大小,从而反映不同的置信区间或概率阈值。在异常检测中,位于椭圆外部的点可以被认为是潜在的异常值。

也就是说通过均值,协方差矩阵和标准差的设置,可以构建一个椭圆?

是的,正是如此。通过使用均值、协方差矩阵以及标准差的设置,你可以构建一个椭圆,这个椭圆在二维高斯分布的上下文中表示等高线。这些等高线或椭圆形状的边界对应于特定的概率密度值,并且它们围绕着分布的均值。

在这个框架下:

  • 均值 ((\mu)) 提供了椭圆的中心点或位置,表示数据点的平均位置。
  • 协方差矩阵 ((\Sigma)) 决定了椭圆的形状和方向。协方差矩阵中的方差成分 ((\sigma^2)) 控制了椭圆沿着主轴的延伸程度,而协方差成分 ((\sigma_{xy})) 决定了椭圆的倾斜程度,即两个变量之间的线性关系如何影响椭圆的方向。
  • 标准差 ((n\sigma)) 的设置则用于调节椭圆的大小,它反映了置信区间或概率水平。例如,使用1个标准差 ((1\sigma)) 通常覆盖约68.27%的数据点(对于正态分布),而2个标准差 ((2\sigma)) 覆盖约95.45%的数据点。

通过调整这些参数,你可以控制椭圆的位置、形状、方向和大小,从而在进行异常检测时提供一个用于比较的参考标准。位于椭圆外的数据点,即那些相对于分布中心位置偏离较远的点,可以被视为潜在的异常或离群值。

标签:椭圆,均值,矩阵,协方差,二维,sigma,节点,高斯分布
From: https://www.cnblogs.com/csjywu01/p/18076802

相关文章

  • Java中二维数组全部赋成同一个值
    有以下几种方法可以将二维数组全部赋成同一个值:1. 使用双重循环遍历二维数组,逐个元素赋值。int[][]arr=newint[3][3];intvalue=5;for(inti=0;i<arr.length;i++){for(intj=0;j<arr[i].length;j++){arr[i][j]=value;}}2. 使用Arrays.......
  • 动态规划背包问题(01、二维、完全背包)
    背包问题01背包dfs#include<bits/stdc++.h>usingnamespacestd;constintN=1009;intn,m,v[N],w[N];intdfs(intx,intspV){//当前枚举到哪个物品,背包剩余容量 if(x>n)return0; elseif(spV<v[x])returndfs(x+1,spV); elsereturnmax(dfs(x+1,spV),dfs(x+......
  • vue 3+TS 封装自定义右键全局菜单(虚拟节点)
    有时我们需要点击(右键或左键)某个元素时弹出菜单,实现复制、粘贴、删除等功能。本文将介绍如何封装一个自定义的右键全局菜单(无三方依赖)。封装的菜单可自定义菜单项,图标,禁用,分割线,隐藏等。并且可以在全局任意地方使用。源码在文章末尾。效果使用<template><div>......
  • 二维逆运动学 – 代码
    介绍在本系列的前一部分中,我们讨论了具有两个自由度的机械臂的反向运动学问题;如下图所示。在这种情况下,机械臂的长度和 通常是已知的。如果我们必须到达的点是 ,那么配置就变成了一个三角形,其中所有边都是已知的。然后,我们推导出了角度和的方程,它控制着机械臂关节的旋转:(1......
  • 稀疏数组与二维数组之间的转换
    稀疏数组介绍:稀疏数组:当一个数组中大部分元素为同一个值时,就可以考虑使用稀疏数组来保存数据节省空间。稀疏数组的原理:1)稀疏数组一共三列,第一行的第一列保存原二维数组的行数,第一行第二列保存原二维数组的列数,第一行第三列保存原二维数组非0数据的个数;2)稀疏数组一共有【原二维......
  • 二维逆运动学 – 数学
    如果您已经关注此博客一段时间,您可能已经注意到一些反复出现的主题。逆向运动学绝对是其中之一,我已经专门写了一整套关于如何将其应用于机械臂和触手的系列文章。如果您还没有读过它们,请不要担心:这个新系列将是独立的,因为它从一个新的角度回顾了逆运动学的问题。您可以在此处阅......
  • 450. 删除二叉搜索树中的节点c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*leftleave(structTreeNode*root){if(root->left){root=root->left;......
  • LeetCodeHot100 73. 矩阵置零 54. 螺旋矩阵 48. 旋转图像 240. 搜索二维矩阵 II
    73.矩阵置零https://leetcode.cn/problems/set-matrix-zeroes/description/?envType=study-plan-v2&envId=top-100-likedpublicvoidsetZeroes(int[][]matrix){inttop=0,bottom=matrix.length,left=0,right=matrix[0].length;int[][]flag......
  • leedcode-完全二叉树的节点个数
    自己写的,使用广度优先BFS,迭代:classSolution:defcountNodes(self,root:Optional[TreeNode])->int:#如果根节点为空,则树中节点数为0ifnotroot:return0#初始化队列,并将根节点放入队列中queue=[root]......
  • OceanBase初体验之部署生产标准的三节点分布式集群
    前置条件OceanBase数据库集群至少由三个节点组成,所以先准备好3台服务器:IP配置操作系统x.x.x.150Intelx8612C64G内存1TSSDCentOS7.9x.x.x.155Intelx8612C64G内存1TSSDCentOS7.9x.x.x.222Intelx8612C64G内存1TSSDCentOS7.9关于运行......