RRCF 异常点检测

这段代码展示了如何利用随机森林(Random Forest)和RCTree(Resilient Continuous Tree)来检测时间序列数据中的异常值。首先,生成带有异常点的时间序列数据,然后通过构建多个RCTrees并计算每个点的离群值分数,当分数超过设定阈值时标记为异常。最终,将异常值用红色点在图表上突出显示。
import matplotlib.pyplot as plt
%matplotlib inline
y = np.array([ np.random.random()*10 + 50*int(np.random.random() > 0.99)*np.sign(np.random.random()-0.5) for _ in range(1000)])
y[:len(y)//2] += 200
y += 100
plt.figure(figsize=(20,5))
plt.plot(y)

在这里插入图片描述

import rrcf
import numpy as np
import math


num_trees = 20
shingle_size = 1
tree_size = 100
threshold = tree_size * 0.2


X = []
forest = []
scores = []

points = rrcf.shingle(y, size=shingle_size)
for i in range(num_trees):
    tree = rrcf.RCTree(random_state=i)
    forest.append(tree)

for index, point in enumerate(points):
    scorei = []
    for tree in forest:
        if len(tree.leaves) >= tree_size:
            tree.forget_point(index - tree_size)
        tree.insert_point(point, index=index)
        scorei.append(tree.codisp(index))
    scores.append(np.median(scorei))

plt.figure(figsize=(20,5))
plt.subplot(2,1,1)
plt.plot(scores)
plt.subplot(2,1,2)
plt.plot(y)
scores = np.array(scores)
locs = np.where( scores >= threshold)
locs = locs[0]
if len(locs) > 0:
    plt.plot(locs, y[locs], 'ro')

在这里插入图片描述

### 实时视频异常检测算法及实现方法 实时视频异常检测(VAD)是计算机视觉领域中的一个重要研究方向,其目标是在视频流中快速识别出异常事件。以下是几种常见的技术方案和算法: #### 1. 基于自编码器的帧重构 基于自编码器(Autoencoder, AE)的帧重构是一种流行的视频异常检测方法。该方法通过在正常数据上训练模型,使得模型能够较好地重建正常场景。当输入为异常场景时,模型的重建误差通常会显著增大[^3]。这种方法的核心在于利用重建误差作为异常检测的指标。 代码示例如下: ```python import tensorflow as tf from tensorflow.keras import layers # 构建自编码器模型 class Autoencoder(tf.keras.Model): def __init__(self): super(Autoencoder, self).__init__() self.encoder = tf.keras.Sequential([ layers.Input(shape=(64, 64, 3)), layers.Conv2D(32, (3, 3), activation='relu', padding='same', strides=2), layers.Conv2D(64, (3, 3), activation='relu', padding='same', strides=2), layers.Flatten() ]) self.decoder = tf.keras.Sequential([ layers.Dense(16 * 16 * 64, activation='relu'), layers.Reshape((16, 16, 64)), layers.Conv2DTranspose(64, (3, 3), activation='relu', padding='same', strides=2), layers.Conv2DTranspose(32, (3, 3), activation='relu', padding='same', strides=2), layers.Conv2D(3, (3, 3), activation='sigmoid', padding='same') ]) def call(self, x): encoded = self.encoder(x) decoded = self.decoder(encoded) return decoded # 训练模型 autoencoder = Autoencoder() autoencoder.compile(optimizer='adam', loss='mse') autoencoder.fit(normal_videos, normal_videos, epochs=50, batch_size=32) ``` #### 2. 动态单元与元学习模块 为了应对测试数据中未见过的新场景,一些研究引入了动态单元和元学习模块。动态单元能够在实时处理过程中动态编码正常视频的行为模式,而无需额外的内存开销。同时,元学习模块允许模型通过少量更新迭代快速适应新场景[^3]。 #### 3. 基于弱监督学习的方法 弱监督学习方法结合了正常和异常视频进行训练,并利用一定的监督信号来指导模型的学习过程。这种方法可以有效提升模型在真实世界异常事件中的泛化能力[^1]。 #### 4. 随机分割树森林(RRCF) 随机分割树森林(Robust Random Cut Forest, RRCF)是一种无监督的异常检测算法,适用于高维数据。RRCF通过构建一棵或多棵随机分割树来评估数据点的异常程度。该算法由 Sudipto Guha 等人提出,广泛应用于时间序列和视频流中的异常检测任务[^2]。 代码示例如下: ```python from rrcf import RRCF # 初始化RRCF模型 forest = [] num_trees = 100 tree_size = 256 for _ in range(num_trees): tree = RRCF() forest.append(tree) # 训练模型 for tree in forest: tree.fit(video_stream_data) ``` #### 5. 深度学习框架下的实现 许多现代视频异常检测算法基于深度学习框架实现,例如 TensorFlow 和 PyTorch。这些框架提供了强大的工具支持,使得模型的开发和部署更加高效。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颹蕭蕭

白嫖?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值