【Gaussian Model】高斯分布模型
目录
- 高斯分布模型用于异常检测(Gaussian Model for Anomaly Detection)
- 1. 高斯分布简介
- 2. 高斯分布模型用于异常检测
- (1) 训练阶段:估计数据分布
- (2) 检测阶段:计算概率判断异常点
- 3. 示例代码
- 4. 高斯分布异常检测的优缺点
- 优点
- 缺点
- 5. 适用场景
- 6. 结论
高斯分布模型用于异常检测(Gaussian Model for Anomaly Detection)
在数据分析和机器学习任务中,异常检测(Anomaly Detection) 是一个重要的应用领域,例如欺诈检测、设备故障预测、网络安全等。高斯分布模型(Gaussian Model)是一种基于统计学的经典无监督学习方法,适用于异常检测任务。本文将介绍高斯分布模型的基本原理、如何用于异常检测,以及其优势和局限性。
1. 高斯分布简介
高斯分布(又称正态分布)是最常见的概率分布之一,具有对称性和钟形曲线的特点。对于一维数据 x x x,其概率密度函数(PDF)定义如下:
p ( x ) = 1 2 π σ 2 exp ( − ( x − μ ) 2 2 σ 2 ) p(x) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(x - \mu)^2}{2\sigma^2} \right) p(x)=2πσ21exp(−2σ2(x−μ)2)
其中:
-
μ \mu μ 为均值,表示数据的中心位置。
-
σ 2 \sigma^2 σ2 为方差,表示数据的离散程度。
在多维情况下(特征维度为 n n n),数据服从多元正态分布,概率密度函数如下:
p ( x ) = 1 ( 2 π ) n / 2 ∣ Σ ∣ 1 / 2 exp ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) p(x) = \frac{1}{(2\pi)^{n/2} |\Sigma|^{1/2}} \exp\left(-\frac{1}{2} (x - \mu)^T \Sigma^{-1} (x - \mu) \right) p(x)=(2π)n/2∣Σ∣1/21exp(−21(x−μ)TΣ−1(x−μ))
其中:
-
x ∈ R n x \in \mathbb{R}^n x∈Rn 是一个 n n n 维特征向量。
-
μ ∈ R n \mu \in \mathbb{R}^n μ∈Rn 是均值向量。
-
Σ \Sigma Σ 是 n × n n \times n n×n 维协方差矩阵,描述各特征之间的相关性。
2. 高斯分布模型用于异常检测
(1) 训练阶段:估计数据分布
我们假设正常数据服从高斯分布,并通过最大似然估计(MLE, Maximum Likelihood Estimation) 来估计均值 μ \mu μ 和方差 σ 2 \sigma^2 σ2(或协方差矩阵 Σ \Sigma Σ)。
给定一个训练数据集 X = { x 1 , x 2 , … , x m } X = \{x_1, x_2, \dots, x_m\} X={x1,x2,…,xm},每个样本具有 n n n 个特征,均值和方差的估计公式如下:
- 均值(对每个特征计算):
μ j = 1 m ∑ i = 1 m x i , j \mu_j = \frac{1}{m} \sum_{i=1}^{m} x_{i,j} μj=m1i=1∑mxi,j
- 方差(对每个特征计算):
σ j 2 = 1 m ∑ i = 1 m ( x i , j − μ j ) 2 \sigma_j^2 = \frac{1}{m} \sum_{i=1}^{m} (x_{i,j} - \mu_j)^2 σj2=m1i=1∑m(xi,j−μj)2
- 协方差矩阵(用于多元正态分布):
Σ = 1 m ∑ i = 1 m ( x i − μ ) ( x i − μ ) T \Sigma = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu)(x_i - \mu)^T Σ=m1i=1∑m(xi−μ)(xi−μ)T
(2) 检测阶段:计算概率判断异常点
对于新样本 x new x_{\text{new}} xnew,计算其在估计出的高斯分布下的概率 p ( x new ) p(x_{\text{new}}) p(xnew),如果概率低于设定的阈值 ϵ \epsilon ϵ,则判断为异常点:
p ( x new ) < ϵ ⇒ x new 是异常点 p(x_{\text{new}}) < \epsilon \Rightarrow x_{\text{new}} \text{ 是异常点} p(xnew)<ϵ⇒xnew 是异常点
通常, ϵ \epsilon ϵ 可以通过 验证集(Validation Set) 或经验设定。
3. 示例代码
我们用 Python 实现一个简单的高斯分布异常检测模型:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal
# 生成二维正态分布数据(正常样本)
np.random.seed(0)
X_train = np.random.multivariate_normal(mean=[5, 5], cov=[[1, 0.5], [0.5, 1]], size=200)
# 计算均值和协方差
mu = np.mean(X_train, axis=0)
sigma = np.cov(X_train.T)
# 计算新样本的概率
def anomaly_score(x, mu, sigma):
return multivariate_normal(mean=mu, cov=sigma).pdf(x)
# 生成新样本
X_test = np.array([[8, 8], [5, 5], [2, 2]])
# 计算概率并判断是否为异常
threshold = 0.01 # 设定阈值
for x in X_test:
p = anomaly_score(x, mu, sigma)
print(f"Sample {x} -> Probability: {p:.6f} {'(Anomaly)' if p < threshold else '(Normal)'}")
# 绘制数据分布
x, y = np.mgrid[2:8:.1, 2:8:.1]
pos = np.dstack((x, y))
rv = multivariate_normal(mu, sigma)
plt.contourf(x, y, rv.pdf(pos), levels=50, cmap='Blues')
plt.scatter(X_train[:, 0], X_train[:, 1], marker='o', label="Normal Data")
plt.scatter(X_test[:, 0], X_test[:, 1], marker='x', c='red', label="Test Samples")
plt.legend()
plt.title("Gaussian Model for Anomaly Detection")
plt.show()
4. 高斯分布异常检测的优缺点
优点
-
易于实现:只需计算均值和方差,并使用概率密度函数(PDF)。
-
适用于无监督任务:不需要标注异常数据。
-
适用于低维数据:当数据维度较低时,模型可以很好地拟合数据分布。
缺点
-
高维问题(维度灾难):在高维空间中,数据可能并不符合高斯分布,导致模型性能下降。
-
无法处理复杂分布:如果数据不是高斯分布,模型可能无法很好地捕捉数据分布特性。
-
对异常值敏感:如果训练数据中包含异常点,可能会影响均值和方差的估计。
5. 适用场景
-
工业设备故障检测:设备运行数据通常服从某种分布,偏离该分布可能意味着故障。
-
信用卡欺诈检测:正常交易数据可以建模成高斯分布,异常交易的概率较低。
-
网络安全:分析流量数据,检测异常访问或攻击行为。
6. 结论
高斯分布模型是一种经典的无监督异常检测方法,适用于低维数据的异常检测任务。尽管它存在局限性,但由于其简单高效,仍然是许多实际应用中的基础方法之一。在更复杂的场景下,可以结合孤立森林(Isolation Forest)、PCA降维等方法进行改进。
希望这篇文章对你理解高斯分布模型的异常检测有所帮助!如果你有任何问题或想进一步优化模型,欢迎讨论!🚀