2021五一杯c题 数据驱动的异常检测与预警问题

2021五一杯C题关注数据驱动的异常检测与预警,通过数学模型区分非风险与风险性异常,量化异常程度,建立预警模型,应用于生产安全评估。
摘要由CSDN通过智能技术生成

2021五一杯C题数学建模

数据驱动的异常检测与预警问题

推动生产企业高质量发展,最根本的底线是保证安全、防范风险,而生产过程中产生的数据能够实时反映潜在的风险。附件1为某生产企业某日00:00:00-22:59:59由生产区域的仪器设备记录的时间序列数据(已经进行数据脱敏),本题未给出数据的具体名称,这些数据可能是温度、浓度、压力等与安全密切相关的数据。
请依据附件1数据,建立数学模型,完成以下问题:
问题1:附件1所给出的数据都可能存在波动,且所有波动都在安全值范围内。有些波动可能是正常性波动,例如随着外界温度或者产量变化的波动,或者可能是传感器误报,这些波动具有规律性、独立性、偶发性等特点,并不能产生安全风险,我们视为非风险性异常,不需要人为干预;有些波动具有持续性、联动性等特点,这些异常性波动的出现是生产过程中的不稳定因素造成的,预示着可能存在安全隐患,我们视为风险性异常,需要人为干预、分析和评定风险等级。请建立数学模型,给出判定非风险性异常数据和风险性异常数据的方法。

问题2:结合问题1的结果,建立数学模型,给出风险性异常数据异常程度的量化评价方法,要求使用百分制(0-100分)对每个时刻数据异常程度进行评价(分值越高表示异常程度越高)。应用所建立的模型和附件1的数据,找到数据中异常分值最高的5个时刻及这5个时刻对应的异常传感器编号(每个时刻只填写5个异常程度最高的传感器编号,异常传感器不足5个则无需填满;如果得分为0,可以不用填写异常传感器编号),并给出数学模型对所得结果进行评价。

问题3:为了提前发现未来生产过程中可能存在的风险隐患,请建立风险性异常预警模型,预测当日23:00:00-23:59:59可能产生的风险性异常。结合问题2中给出的风险性异常程度量化评价方法,指出23:00:00-23:59:59中四个时间段(见表2),每个时间段内的最高异常分值及对应的异常传感器编号(只填写5个异常程度最高的传感器编号,异常传感器不足5个则无需填满;如果得分为0,可以不用填写异常传感器编号)。

问题4:根据问题2和问题3中的结果,建立数学模型对该生产企业整个生产系统的安全性进行评价,请在00:00:00-23:59:59内每隔30分钟,用0-100分进行安全性评分,0分表示安全性最低,100分表示安全性最高(包括00:00:00-23:00:00的得分和23:00:00-23:59:59的预测得分),并用适当的方法对所给评分的结果进行评价和敏感性分析。

模型的建立与求解(部分):

为了按照真实的比重给各个波动的主成分,需要使用临近分析法对主成分进行加权,NCA 是一种基于邻域分量的特征选择方法,在有监督的机器学习方法中,通过 NCA 多步跌代算法对用于分类的特征向量进行分析,以此获得不同的特征向量的分类中的权重大小,可根据权重的大小对原始的特征向量进行进一步筛选,进一步对数据进行降维,对整个训练网络进行优化。在第一问中我们已经通过 PCA 降维算法对传感器数据进行了排序和权重计算,在本问中进一步 利用 NCA 对影响恐怖袭击等级的特征向量的排序和权重进行进一步的讨论,以此来得出风险性异常数据异常程度的量化评价方法。
Matlab 2018 有用于 NCA 近邻分析的工具箱,函数命令为 fscnca(x,y),其中 x 代表特征向量,y 代表样本标签(权重),因为 NCA 是一种迭代算法,在进行运算时需要对一些参数进行设置,包括迭代方法,最小批量处理等。考虑到样本的数量和计算精度的要求,对 NCA 计算参数的设置如下,为提高计算精度网络的迭代方式采用 SGD 随机梯度下降的计算方式,最小计算批量(MiniBatchSize)为 50,
PassLimitd 等于 10,调谐子集合为 150,迭代周期为 20。网络运行迭代过程中
loss 不断减小,直到稳定达到误差要求。其迭代过程如下图所示:
在这里插入图片描述
在这里插入图片描述

程序代码

'''如有问题if you want my model and word'''
'''小编QQ:631183848'''    
'''如有问题if you want my model and word'''
'''小编QQ:631183848'''    
import math
import random
random.seed(0)
def rand(a,b): #随机函数
    return (b-a)*random.random()+a
 
def make_matrix(m,n,fill=0.0):#创建一个指定大小的矩阵
    mat = []
    for i in range(m):
        mat.append([fill]*n)
    return mat
 
#定义sigmoid函数和它的导数
def sigmoid(x):
    return 1.0/(1.0+math.exp(-x))
def sigmoid_derivate(x):
    return x*(1-x) #sigmoid函数的导数
 
class BPNeuralNetwork:
    def __init__(self):#初始化变量
        self.input_n = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值