thenamanshukla/gaussianguard

GitHub: thenamanshukla/Gaussian-Guard

基于高斯过程回归的贝叶斯异常检测引擎,通过自适应概率安全走廊对实时时间序列信号进行异常标记。

Stars: 0 | Forks: 0

# Gaussian Guard 一个贝叶斯监控系统,利用高斯过程回归在时间序列数据周围构建自适应安全走廊。该引擎学习信号的统计流形,建立概率基线,并将落在预期方差之外的观测值标记为异常。 ## 概述 该架构经历了两个阶段:使用受控正弦波进行合成信号验证,以及通过滑动窗口推理循环针对 Linux CPU 遥测数据进行实时部署。 ## 仓库结构 ``` gaussianguard/ core/ sentry_engine.py GP regression engine and kernel configuration examples/ detector_demo.py Synthetic signal validation and corridor visualization utils/ signal_gen.py Noisy sine wave generator for baseline testing live_monitor.py Live CPU telemetry guard with sliding window inference requirements.txt README.md gp_verification.png GP posterior fit over synthetic sine signal live_guard_terminal.png Active guard terminal output with baseline calibration system_monitor.png Linux system monitor showing per-core CPU activity distill_reference.png Distill.pub GP reference ``` ## 截图 ### 参考:高斯过程直觉 此架构的概念基础。高斯过程是一种概率方法,它在预测函数周围生成一个置信区域(阴影带),而不仅仅是一条单线。 ![Distill 参考](https://static.pigsec.cn/wp-content/uploads/repos/cas/ea/ea7a2cc7b04d15a1ca9fe35a4d57d6260398c6a8be8fdf94883953b3a5c62685.png) ### GP 后验拟合:合成验证 GP 从 60 个带噪声的锚点中正确学习到了一条平滑的潜在路径,并在 200 个预测位置对其进行了重构。灰色带为 3-sigma 安全走廊。 ![GP 验证](https://static.pigsec.cn/wp-content/uploads/repos/cas/3b/3b453a1d9167e07a0f82bdce7fa282288355cf2a28f002770edffda1a95d751b.png) ### 系统监控器:硬件上下文 守护程序跟踪跨越所有 12 个核心的系统范围平均值。下方的逐核心视图展示了输入到复合 kernel 的原始利用率。 ![系统监控器](https://static.pigsec.cn/wp-content/uploads/repos/cas/50/50f6197698d036533e49bb8ddcb263c32b849d3eeb8015647dcad0be49954768.png) ## 数学基础 ### Kernel 任意两个时间点之间的协方差由径向基函数定义: $$k(x, x') = \sigma_f^2 \exp\left( -\frac{\|x - x'\|^2}{2l^2} \right)$$ - **Signal variance** 控制概率边界的垂直范围。 - **Length-scale** 控制模型的时间记忆,即过去多长时间内的数据点会影响当前预测。 ### 预测推理 给定一个新的时间点,引擎会计算: **预测均值:** $$\mu_* = K_*^\top [K + \sigma_n^2 I]^{-1} y$$ **预测方差:** ``` \sigma^2_{*} = K(X_{*}, X_{*}) - K_{*}^\top [K + \sigma_n^2 I]^{-1} K_{*} ``` 方差在靠近训练观测值的地方收缩,在未观测区域中扩大。3-sigma 走廊覆盖了 99.7% 的概率质量。 ## 阶段 1:合成信号验证 第一阶段针对带有高斯噪声的受控正弦波验证引擎。这确认了 GP 能够在引入任何实时数据之前正确重构潜在路径,并绘制出校准良好的置信走廊。 **信号生成器** (`utils/signal_gen.py`): ``` import numpy as np def generate_signal(n_samples=60, noise_level=0.15): np.random.seed(42) X = np.linspace(0, 10, n_samples).reshape(-1, 1) y_clean = np.sin(X).ravel() noise = np.random.normal(0, noise_level, n_samples) return X, y_clean + noise ``` **哨兵引擎** (`core/sentry_engine.py`): ``` from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C class KernelSentry: def __init__(self, length_scale=1.0, noise_level=0.1): self.kernel = C(1.0, (1e-2, 1e2)) * RBF( length_scale=length_scale, length_scale_bounds=(1e-1, 1e2) ) self.gp = GaussianProcessRegressor( kernel=self.kernel, alpha=noise_level**2, n_restarts_optimizer=10, random_state=42 ) def learn(self, X, y): self.gp.fit(X, y) def check_integrity(self, X_new): return self.gp.predict(X_new, return_std=True) ``` ## 阶段 2:实时 CPU 遥测 第二阶段针对实时的 Linux 系统数据部署引擎。该模型以 CPU 利用率为目标,通过 `psutil` 每秒采样一次,并在 60 秒的滑动窗口上运行。 ### 复合 Kernel CPU 利用率包含三个结构组件,单一 RBF kernel 无法准确表示它们: | 组件 | Kernel | 用途 | |---|---|---| | 空闲基线偏移 | `ConstantKernel` | 处理非零基准(空闲机器上约为 6-12%) | | 应用负载趋势 | `RBF` | 随着进程的打开和关闭,对平滑的工作负载爬升进行建模 | | 中断抖动 | `WhiteKernel` | 吸收高频噪声,因此短暂的峰值不会被标记 | ### 自校准阶段 系统在激活异常检测之前,会运行一个强制性的 60 秒观测阶段。在此窗口期间,它会收集基线遥测数据并拟合初始模型。校准完成后,它将进入主动守护模式。 ### 实时监控器 (`live_monitor.py`): ``` import psutil import numpy as np from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import RBF, WhiteKernel, ConstantKernel # 观察阶段 history_x = np.atleast_2d(np.linspace(0, 59, 60)).T history_y = [] while len(history_y) < 60: history_y.append(psutil.cpu_percent(interval=1)) history_y = np.array(history_y) initial_baseline = np.mean(history_y) kernel = ConstantKernel(constant_value=initial_baseline) \ + 1.0 * RBF(length_scale=10.0) \ + WhiteKernel(noise_level=1.0) gp = GaussianProcessRegressor(kernel=kernel) # 主动 guard loop while True: current_usage = psutil.cpu_percent(interval=1) history_y = np.roll(history_y, -1) history_y[-1] = current_usage gp.fit(history_x, history_y) mu, sigma = gp.predict(np.atleast_2d([60]).T, return_std=True) upper = mu[0] + 3 * sigma[0] lower = mu[0] - 3 * sigma[0] status = "ANOMALY" if current_usage > upper or current_usage < lower else "NORMAL" print(f"CPU: {current_usage:5.1f}% | Expected: {mu[0]:5.1f} | Status: {status}") ``` ### 观测到的行为 - 在校准期间学习到了 6.8% 的初始空闲基线。 - 当负载攀升至 13.4% 然后达到 19.6% 时,模型更新了其预期均值,并未触发误报;工作负载的偏移足够平缓,落在滑动窗口学习到的趋势范围内。 - 旨在标记违反概率安全走廊的突发非相关峰值。 ![实时守护终端](https://static.pigsec.cn/wp-content/uploads/repos/cas/46/46501b6783a3c80ab6f8ba4f6e3e9f6145d7f7f3d1541eac2e3477e6a119e06d.png) ## 关键设计决策 **在线滑动窗口优于批量重新训练。** GP 每秒在固定的 60 个数据点窗口上重新拟合,而不是无限制地增加数据集。这保持了恒定的推理延迟,并确保模型跟踪当前行为而不是历史平均值。 **矩阵维度。** 所有时间数组在传递给 kernel 之前都被重塑为 `(-1, 1)`。线性代数后端在构建协方差矩阵时需要二维列矩阵。 **分辨率不对称。** 训练使用 60 个锚点。预测在 200 个位置运行。这产生了一个平滑、高分辨率的流形,而无需密集的训练数据。 **超参数优化。** RBF 的 length-scale 和 signal variance 通过在 `fit()` 期间最大化对数边际似然进行优化。初始 kernel 选择后无需手动调参。 ## 安装和使用 ``` # Clone the repository git clone https://github.com/thenamanshukla/gaussianguard.git cd gaussianguard # Create and activate virtual environment python -m venv venv source venv/bin/activate # Install dependencies pip install -r requirements.txt ``` **运行合成验证:** ``` python examples/detector_demo.py ``` 输出:`gp_verification.png` — 针对带噪声正弦信号的后验拟合图。 **运行实时 CPU 守护程序:** ``` python live_monitor.py ``` 终端将显示 60 秒的校准进度,然后切换到实时异常报告。 ## 依赖要求 ``` numpy scikit-learn matplotlib psutil ``` ## 参考文献 Rasmussen, C. E., and Williams, C. K. I. *Gaussian Processes for Machine Learning*. MIT Press, 2006. Distill.pub. *A Visual Exploration of Gaussian Processes*. 2019. https://distill.pub/2019/visual-exploration-gaussian-processes/
标签:Apex, 异常检测, 时间序列分析, 机器学习, 贝叶斯推断, 逆向工具, 高斯过程回归