【读论文】Learning perturbations to explain time series predictions

文章目录

  • Abstract
  • 1. Introduction
  • 2. Background Work
  • 3. Method
  • 4. Experiments
    • 4.1 Hidden Markov model experiment
    • 4.2 MIMIC-III experiment
  • 5. Conclusion
  • References

  • 论文地址:Learning Perturbations to Explain Time Series Predictions
  • 代码地址:https://github.com/josephenguehard/time_interpret
  • 收录于:PMLR 2023
  • 引用格式【GB/T 7714】:Enguehard J. Learning perturbations to explain time series predictions[C]//International Conference on Machine Learning. PMLR, 2023: 9329-9342.

Abstract

解释“基于多变量时间序列数据的预测”的困难在于:不仅要处理多个特征,还要处理时间依赖性。而且根据时间信息的不同,相同的特征可能会对预测产生截然不同的影响。(在多变量时间序列预测上进行解释的难点)

以前的工作使用了基于扰动的显著性方法来解决这个问题,使用可训练的掩码来对输入进行扰动,以发现哪些特征在哪些时间驱动了模型的预测结果。然而,这类方法从静态数据的类似方法中得到启发,引入了固定的扰动,而在时间序列数据上似乎没有什么动机这样做。(原有方法存在的问题)

在这项工作中,我们的目标是通过不仅学习掩码,而且通过学习相关的扰动来解释预测。(本文的做法)

我们的经验表明,学习这些扰动显著提高了在时间序列数据上解释结果的质量。(效果)

1. Introduction

尽管目前已经提出了许多解释神经网络的方法,但在多元时间序列数据上的解释方法的研究还相对不足。然而,这种类型的数据在医疗领域尤其重要,其中的数据可以是带有时间戳的医疗事件列表或生命体征测量值。因此,对于这种时间因素的处理是至关重要的。

目前,针对多元时间序列数据的解释方法研究主要包括:

  • RETAIN1,这是一种基于注意力的模型,可以通过特征和时间来学习这种注意力;
  • FIT2,它通过量化预测分布的变化来估计特征随时间的重要性;
  • DynaMask3,将基于扰动的方法应用于多元时间序列。

在这项工作中,我们的目标是进一步改进基于扰动的解释方法,以使其适应于多变量时间序列数据。

在 Fong & Vedaldi (2017)4 和 Crabbé & Van Der Schaar (2021)3 等人的研究中,虽然掩码(mask)是可学习的,但这个掩码引起的扰动是固定的。例如,Fong & Vedaldi (2017)4 根据特征的掩码值用高斯模糊(特征周围数据的加权平均值)替换特征,掩码值越低,模糊量越高。Crabbé & Van Der Schaar (2021)3 也采用了这种方法,在时间上对数据进行高斯模糊。这种方法对于图像似乎是合理的,其中的信息可以被认为是局部的,这就解释了为什么卷积神经网络(cnn)具有有限的过滤器大小,但在这类数据上仍然表现得很好。然而,多变量时间序列可能具有长期依赖性,这使得使用时间高斯模糊作为扰动不那么明显。

我们可能不想用局部平均值替换被掩盖的特征,而是想用时间更远的数据来替换它。这就需要用可学习的扰动来代替固定的扰动

2. Background Work

在这一节中,作者介绍了 Fong & Vedaldi (2017)4 和 Crabbé & Van Der Schaar (2021)3 等人的研究。

3. Method

虽然 Crabbé & Van Der Schaar (2021) 提出的时间扰动是 Fong & Vedaldi (2017) 在计算机视觉环境中定义的扰动的适应,但这些扰动是固定的和局部的。它们实际上要么被定义为移动平均扰动,要么被定义为时间高斯模糊。然而,时间数据通常具有长期依赖性,因此局部信息可能不足以确定特定时间特征的重要性。

例如,时间数据可以包括重复的模式(周期性)。比如下面这个例子:
在这里插入图片描述
在上图中,第1张图为原始数据图像。假设我们的目标是评估第三个尖峰的重要性,这个尖峰很可能不重要,可能只有最后一个尖峰才重要。然而,使用高斯模糊(第2张图)或移动平均(第3张图)会显著改变输入,这可能导致解释方法错误地声明该峰值很重要。另一方面,我们学习到的扰动(第4张图)应该用另一个峰值替换解释的数据,导致输出的差异很小,因此正确地说明该数据不重要。

这种见解需要一个广义的扰动,它可以调整到我们要解释的数据。

第一个想法是通过优化类似于 a r g min ⁡ m ∈ [ 0 , 1 ] n λ ∣ ∣ m ∣ ∣ 1 + L ( f ( x ) , f ( Φ ( x , m ) ) ) arg\min_{m\in [0,1]^n} \lambda ||m||_1 + \mathcal{L}(f(x),f(\Phi(x,m))) argminm[0,1]nλ∣∣m1+L(f(x),f(Φ(x,m))) 的函数,直接学习这个扰动 Φ ( x ) \Phi(x) Φ(x) ,而不需要掩码。然而,这种方法存在的问题在于,它给了扰动模型太多的自由,会鼓励输出稀疏的解释。

因此我们需要约束扰动算子来解释输入数据的每一部分。我们从 Crabbé & Van Der Schaar (2021) 设计的扰动算子中获得灵感,这些扰动算子通常定义为 m × x + ( 1 − m ) × μ ( x ) m\times x + (1-m)\times \mu(x) m×x+(1m)×μ(x) ,其中, μ ( x ) \mu(x) μ(x) 定义了扰动的方式。

Crabbé & Van Der Schaar (2021) 设计的扰动算子:
Φ ( x , m ) t , i = { m t , i × x t , i + ( 1 − m t , i ) × μ t , i m t , i × x t , i + ( 1 − m t , i ) × μ t , i p ( 1 ) ∑ t ′ = 1 T x t ′ , i × g σ ( m t , i ) ( t − t ′ ) ∑ t ′ = 1 T g σ ( m t , i ) ( t − t ′ ) \Phi(x,m)_{t,i}=\begin{cases}m_{t,i} \times x_{t,i} + (1-m_{t,i})\times \mu_{t,i}\\m_{t,i} \times x_{t,i} + (1-m_{t,i})\times \mu^p_{t,i} \quad\quad\quad\quad\quad (1)\\\frac{\sum^T_{t'=1} x_{t',i} \times g_{\sigma(m_{t,i})}(t-t')}{\sum^T_{t'=1}g_{\sigma(m_{t,i})}(t-t')}\end{cases} Φ(x,m)t,i= mt,i×xt,i+(1mt,i)×μt,imt,i×xt,i+(1mt,i)×μt,ip(1)t=1Tgσ(mt,i)(tt)t=1Txt,i×gσ(mt,i)(tt)
其中,

μ t , i \mu_{t,i} μt,i x : , i x_{:,i} x:,i 在时间 t t t 前后 W W W 时间窗口上的平均值。即:
μ t , i = 1 2 W + 1 ∑ t − W t + W x t ′ , i ( 2 ) \mu_{t,i}=\frac{1}{2W+1}\sum^{t+W}_{t-W}x_{t',i} \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad (2) μt,i=2W+11tWt+Wxt,i(2)
μ t , i p \mu^p_{t,i} μt,ip x : , i x_{:,i} x:,i 在时间 t t t W W W 时间窗口上的平均值。即:
μ t , i p = 1 W + 1 ∑ t − W t x t ′ , i ( 3 ) \mu^p_{t,i}=\frac{1}{W+1}\sum^{t}_{t-W}x_{t',i} \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad (3) μt,ip=W+11tWtxt,i(3)
g σ ( m t , i ) ( t ) g_{\sigma(m_{t,i})}(t) gσ(mt,i)(t) 是时间高斯模糊,其计算方式为:
g σ ( m t , i ) ( t ) = e x p ( − t 2 2 σ 2 ) ; σ ( m ) = σ m a x ( 1 − m ) ( 4 ) g_{\sigma(m_{t,i})}(t)=exp(-\frac{t^2}{2\sigma ^2}); \sigma(m)=\sigma_{max}(1-m) \quad\quad\quad\quad\quad (4) gσ(mt,i)(t)=exp(2σ2t2);σ(m)=σmax(1m)(4)

在这项工作中,我们提出用神经网络 (NN) 来代替上述这些固定的扰动函数 (1)(2)(3),并结合掩码来进行训练。因此,我们的扰动定义为:
Φ ( x , m ) = m × x + ( 1 − m ) × N N ( x ) ( 5 ) \Phi(x,m)=m\times x + (1-m)\times NN(x) \quad\quad\quad\quad\quad\quad\quad\quad\quad (5) Φ(x,m)=m×x+(1m)×NN(x)(5)
其中, 0 ⩽ m ⩽ 1 0\leqslant m \leqslant 1 0m1

在实践中,我们将模型 N N ( x ) NN(x) NN(x) 定义为 x t , i , t ∈ { 1 , . . . , T } x_{t,i},t\in \{1,...,T\} xt,i,t{1,...,T} 的加权和,因此我们选择双向GRU模型5来定义这个神经网络。

在实验中,我们还将双向GRU模型和单向GRU模型进行了对比,单向GRU模型的效果更接近于 Crabbé & Van Der Schaar (2021) 中的 μ t , i p \mu^p_{t,i} μt,ip

和 Crabbé & Van Der Schaar (2021) 类似,我们旨在掩盖尽可能多的数据,同时保持与原始数据尽可能接近的预测。因此,我们的优化目标为:
a r g min ⁡ m , Θ ∈ N N λ ∣ ∣ m ∣ ∣ 1 + L ( f ( x ) , f ( Φ ( x , m ) ) ( 6 ) arg\min_{m,\Theta\in NN}\lambda ||m||_1 + \mathcal{L}(f(x),f(\Phi(x,m)) \quad\quad\quad\quad\quad\quad\quad\quad\quad (6) argm,ΘNNminλ∣∣m1+L(f(x),f(Φ(x,m))(6)
其中, Θ \Theta Θ 表示神经网络的参数, L \mathcal{L} L 表示原始预测与扰动预测之间的损失(在分类任务中可以是交叉熵,回归任务中可以是均方误差)。

这个目标函数存在的一个问题是,神经网络可能会倾向于生成更接近于 x x x 的扰动结果 N N ( x ) NN(x) NN(x) 。如果 m = 0 m=0 m=0 ,则 Φ ( x , m ) ≈ x \Phi(x,m) \approx x Φ(x,m)x (几乎没有进行扰动),此时目标函数(6)的取值趋近于0。为了防止这种行为,我们将公式(6)修改为:
a r g min ⁡ m , Θ ∈ N N λ 1 ∣ ∣ m ∣ ∣ 1 + λ 2 ∣ ∣ N N ( x ) ∣ ∣ 1 + L ( f ( x ) , f ( Φ ( x , m ) ) ( 7 ) arg\min_{m,\Theta\in NN}\lambda_1 ||m||_1 + \lambda_2 ||NN(x)||_1 + \mathcal{L}(f(x),f(\Phi(x,m)) \quad\quad (7) argm,ΘNNminλ1∣∣m1+λ2∣∣NN(x)1+L(f(x),f(Φ(x,m))(7)
在公式(7)中,我们设置了两个正则化项: ∣ ∣ m ∣ ∣ 1 ||m||_1 ∣∣m1 ∣ ∣ N N ( x ) ∣ ∣ 1 ||NN(x)||_1 ∣∣NN(x)1 。结合扰动公式 Φ ( x , m ) = m × x + ( 1 − m ) × N N ( x ) \Phi(x,m)=m\times x + (1-m)\times NN(x) Φ(x,m)=m×x+(1m)×NN(x) 可以看出:

  • m m m 越小, Φ ( x , m ) \Phi(x,m) Φ(x,m) 生成的扰动样本越接近于 N N ( x ) NN(x) NN(x) ,即正则化项 ∣ ∣ m ∣ ∣ 1 ||m||_1 ∣∣m1 诱导 Φ ( x , m ) \Phi(x,m) Φ(x,m) 生成的扰动样本接近于 N N ( x ) NN(x) NN(x)
  • N N ( x ) NN(x) NN(x) 越小, Φ ( x , m ) \Phi(x,m) Φ(x,m) 生成的扰动样本越接近于0(无信息),即正则化项 ∣ ∣ N N ( x ) ∣ ∣ 1 ||NN(x)||_1 ∣∣NN(x)1 诱导 Φ ( x , m ) \Phi(x,m) Φ(x,m) 生成的扰动样本接近于0(无信息);
  • 而公式(7)中的损失函数 L \mathcal{L} L 则诱导 f ( Φ ( x , m ) f(\Phi(x,m) f(Φ(x,m) f ( x ) f(x) f(x) 尽可能接近。

三者相互制约。

4. Experiments

作者在两个数据集上进行了实验:使用隐马尔可夫模型生成的合成数据集3 和 真实数据集MIMIC-III6

4.1 Hidden Markov model experiment

作者按照 Crabbé & Van Der Schaar (2021) 的做法,使用2状态隐马尔可夫模型生成1000个时间序列(具体做法可参考 Crabbé & Van Der Schaar (2021) 论文细节3),并训练一个单层GRU模型来根据 x t x_t xt 预测对应的 y t y_t yt

当知道该数据集的真实显著特征时,可以通过比较每种方法产生的显著特征与基础事实之间的相似性来评估我们的解释方法。和 Crabbé & Van Der Schaar (2021) 的做法相同,作者也使用了精确率曲线下面积 (AUP)、召回率曲线下面积 (AUR)、信息量 ( I M ( A ) I_M(A) IM(A)) 和 掩码熵 ( S M ( A ) S_M(A) SM(A)) 来作为评估指标。表1是实验结果。
在这里插入图片描述
实验结果表明,尽管我们的方法在AUP方面的表现略低于一些基线,但在其他指标上,它的表现明显优于所有其他方法。特别是,虽然它在AUP方面略优于DynaMask,但它在AUR、信息量和掩码熵方面明显产生了更好的结果。

此外,作者还对比了 λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2 的不同取值对实验结果的影响:
在这里插入图片描述
从实验结果中可以看出,

  • λ 1 \lambda_1 λ1 接近于1时才能产生较好的实验效果。事实上, λ 1 \lambda_1 λ1 较小时意味着较低的正则化,因此会保留很多不重要的特征;而当 λ 1 \lambda_1 λ1 较大时则会迫使 m m m 接近于0,从而导致大多数的特征被认为不重要。
  • 此外, λ 2 \lambda_2 λ2 需要至少为1才能迫使 N N ( x ) NN(x) NN(x) 学习到无信息的扰动。

4.2 MIMIC-III experiment

和 Crabbé & Van Der Schaar (2021) 的实验类似,作者在真实数据集 MIMIC-III 上对本文提出的解释方法进行了评估。

MIMIC-III 由重症监护病房(ICU)的患者组成,定期测量一些生命体征和实验室检查结果。这里的任务是根据48小时的数据预测每个病人的住院死亡率,每小时离散。缺失的值是使用以前可用的值来输入的。如果没有先前的特征,则输入标准值。

我们训练了一个隐藏层大小为200的单层GRU模型来预测这个住院死亡率(分类任务),我们的目标是解释这个模型。在这个数据集中,真正的显著特征是未知的,我们需要提供不同的指标来评估我们的方法。

评估方式为:将原始预测 与 特定比例的显著特征被掩盖之后的预测 进行了比较,这里用数据样本 对应特征时间维度上的平均值 来 替换被掩盖的特征,即 x ‾ t , i = 1 T ∑ t x t , i \overline{x}_{t,i} = \frac{1}{T}\sum_t x_{t,i} xt,i=T1txt,i ,其中, T = 48 T=48 T=48(小时)。在这里用到的评估指标有:

  • Accuracy (Acc) 准确率:我们屏蔽最显著的特征,并使用这些被屏蔽的数据计算结果的准确性。较低的准确率意味着做出准确预测的重要特征被删除了。因此,这个度量越低越好。
  • Cross-Entropy (CE) 交叉熵损失:我们掩盖最显著的特征,并计算用这些被掩盖的数据与原始数据做出的预测之间的交叉熵。数值越高,表明预测变化越显著,重要特征被删除。因此,这个度量越高越好。
  • Comprehensiveness (Comp) 综合性:我们掩盖最显著的特征,并计算预测类概率与原始类概率相比的平均变化。这个度量越高越好。
  • Sufficiency (Suff) 充分性:我们只保留最显著的特征,计算预测类概率相对于原始类概率的平均变化。这个指标越低越好。

作者在 表4(屏蔽了前20%最显著的数据,并将数据替换为对应特征时间维度上的平均值 x ‾ t , i = 1 T ∑ t x t , i \overline{x}_{t,i} = \frac{1}{T}\sum_t x_{t,i} xt,i=T1txt,i)和 表5(屏蔽了前20%最显著的数据,并将数据替换为对应特征时间维度上的平均值 x ‾ t , i = 0 \overline{x}_{t,i} = 0 xt,i=0)中报告了实验结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实验结果表明,我们的方法在每个指标上都明显优于其他方法,无论是使用随时间的平均值还是使用零作为屏蔽数据。这也表明,在解释多元时间序列数据的预测时,使用学习扰动比使用固定扰动更可取。

作者还对比了不同扰动模型的实验效果:

(1)用每个特征随时间的总体平均值替换20%的数据:
在这里插入图片描述
(2)用零替换20%的数据:
在这里插入图片描述

5. Conclusion

我们的研究结果表明,与现有的方法(包括具有固定扰动的DynaMask方法)相比,使用学习扰动可以产生更好的解释。我们还研究了神经网络对扰动建模的选择,发现在MIMIC-III的住院死亡率任务上,单向GRU比双向GRU效果更好,更稳定。

References


  1. Choi, E., Bahadori, M. T., Sun, J., Kulas, J., Schuetz, A., and Stewart, W. Retain: An interpretable predictive model for healthcare using reverse time attention mechanism. Advances in neural information processing systems, 29, 2016. ↩︎

  2. Tonekaboni, S., Joshi, S., Campbell, K., Duvenaud, D. K., and Goldenberg, A. What went wrong and when?instance-wise feature importance for time-series black box models. Advances in Neural Information Processing Systems, 33:799–809, 2020. ↩︎

  3. Crabbé J, Van Der Schaar M. Explaining time series predictions with dynamic masks[C]//International Conference on Machine Learning. PMLR, 2021: 2166-2177. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  4. Fong, R. C. and Vedaldi, A. Interpretable explanations of black boxes by meaningful perturbation. In Proceedings of the IEEE international conference on computer vision, pp. 3429–3437, 2017. ↩︎ ↩︎ ↩︎

  5. Cho K, van Merriënboer B, Bahdanau D, et al. On the Properties of Neural Machine Translation: Encoder–Decoder Approaches[J]. Syntax, Semantics and Structure in Statistical Translation, 2014: 103. ↩︎

  6. Johnson, A. E., Pollard, T. J., Shen, L., Lehman, L.-w. H., Feng, M., Ghassemi, M., Moody, B., Szolovits, P., Anthony Celi, L., and Mark, R. G. Mimic-iii, a freely accessible critical care database. Scientific data, 3(1):1–9, 2016. ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/31588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习Week17——优化器对比实验

文章目录 深度学习Week17——优化器对比实验 一、前言 二、我的环境 三、前期工作 1、配置环境 2、导入数据 2.1 加载数据 2.2 检查数据 2.3 配置数据集 2.4 数据可视化 四、构建模型 五、训练模型 1、将其嵌入model中 2、在Dataset数据集中进行数据增强 六、模型评估 1、Accur…

鸿蒙 登录界面示例

1.b站登录界面 我的b站教学视频:https://www.bilibili.com/video/BV1LQgQexEGm/?spm_id_from333.999.0.0&vd_sourced0ea58f1127eed138a4ba5421c577eb1 最终实现效果: 需要准备2张图片,分别是向下和向右边的图标 代码: En…

第1章 MySQL数据库概述

1.1 基本概念 数据库是什么? 存储数据的地方 DB:数据库(Database) 为什么要用数据库? 因为应用程序产生的数据是在内存中的,如果程序退出或者是断电了,则数据就会消失。使用数据库是为了…

硬件开发笔记(二十一):外部搜索不到的元器件封装可尝试使用AD21软件的“ManufacturerPart Search”功能

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/139869584 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

探索图神经网络(GNN):使用Python实现你的GNN模型

一、引言 图神经网络(Graph Neural Network, GNN)作为近年来机器学习和深度学习领域的热门话题,正逐渐吸引越来越多的研究者和开发者的关注。GNN能够处理图结构数据,在社交网络分析、推荐系统、化学分子结构预测等领域有着广泛的…

学校校园考场电子钟,同步授时,助力考场公平公正-讯鹏科技

随着教育技术的不断发展,学校对于考场管理的需求也日益提高。传统的考场时钟往往存在时间误差、维护不便等问题,这在一定程度上影响了考试的公平性和公正性。为了解决这些问题,越来越多的学校开始引入考场电子钟,通过同步授时技术…

HTTP 状态码详解及使用场景

目录 1xx 信息性状态码2xx 成功状态码3xx 重定向状态码4xx 客户端错误状态码5xx 服务器错误状态码 HTTP思维导图连接:https://note.youdao.com/s/A7QHimm0 1xx 信息性状态码 100 Continue:表示客户端应继续发送请求的其余部分。 使用场景:客…

学习分享-Redis 中的压缩列表 (Ziplist)

Redis 中的压缩列表 (Ziplist) 压缩列表 (Ziplist) 是 Redis 内部用于优化小规模数据存储的一种紧凑数据结构。它设计用于高效地存储包含少量元素的列表、哈希表或有序集合,以减少内存占用和提高性能。以下是压缩列表的详细介绍: 1. 压缩列表的结构 压…

Freertos-----任务之间的消息传递(使用消息队列信号量方法)

这次来分享任务之间的数据传递的方法,方法有很多种,我展示2种,让大家对freertos有更深刻的印象 目录 消息队列 信号量 消息队列 首先直接打开普中的例程,然后在里面加上ADC的驱动代码,先初始化外设先,我…

内江科技杂志内江科技杂志社内江科技编辑部2024年第13期目录

科教兴国 内江市科技局“五个强化”助力“五经普”工作有序推进 本刊通讯员; 1 内江市多措并举融入成渝中线科创走廊建设 本刊通讯员; 2 科学管理《内江科技》投稿:cnqikantg126.com 数字化社会公共图书馆的服务效能提升策略研究 闫永凤;臧萌;王亚博;王…

[极客大挑战 2020]Roamphp4-Rceme

rce,rce,rce!!! 右键源代码里给了提示&#xff0c;有备份文件index.php.swp,大伙都做到这来了&#xff0c;应该不用写了吧。看源码 <?php error_reporting(0); session_start(); if(!isset($_SESSION[code])){$_SESSION[code] substr(md5(mt_rand().sha1(mt_rand)),0,5);…

汽车IVI中控开发入门及进阶(二十九):i.MX6

前言: i.MX 6双/6Quad处理器集成多媒体应用处理器,是不断增长的多媒体产品系列的一部分,提供高性能处理,并针对最低功耗进行了优化。 i.MX 6Dual/6Quad处理器采用先进的quad-ArmCortex-A9内核,运行速度高达800 MHz,包括2D和3D图形处理器、1080p视频处理和集成电源管理。…

区块链中nonce是什么,什么作用

目录 区块链中nonce是什么,什么作用 区块链中nonce是什么,什么作用 Nonce在以太坊中是一个用于确保交易顺序性和唯一性的重要参数。以下是对Nonce的详细解释: 定义 Nonce是一个scalar值,它等于从该地址发送的交易数量,或在具有关联代码的账户的情况下,由该账户创建的合…

从xxl-job源码中学习Netty的使用

1. 启动与Spring实例化 com.xxl.job.core.executor.impl.XxlJobSpringExecutor.java类 继承SmartInitializingSingleton 类&#xff0c;在afterSingletonsInstantiated 实例化后方法中 调用initJobHandlerMethodRepository 把所有的xxljob任务管理起来&#xff1b; private…

使用ASP.NET Core封装接口请求参数格式

有些人获取接口请求参数是直接使用数据库实体类来获取的&#xff0c;这种方式虽然写起来很方便&#xff0c;但是会导致swagger接口文档出现很多没用的参数&#xff0c;让人看着不舒服。 比如&#xff0c;新增用户只需要传用户名、密码、邮箱就可以了&#xff0c;但是实体类也包…

数据可视化---绘制常用图表,组合图表,定制图表主题

题目一&#xff1a;绘制桑基图&#xff0c;展示某商铺新老客服群体的商品喜好 编写程序。根据第9.3.7&#xff0c;绘制桑基图&#xff0c;展示某商铺新老客服群体的商品喜好。 运行代码&#xff1a; #绘制桑基图&#xff0c;展示某商铺新老客服群体的商品喜好 from pyecharts…

34.构建核心注入代码

上一个内容&#xff1a;33.获取入口点 以 33.获取入口点 它的代码为基础进行修改 实现的功能是把LoadLibrary函数注入到目标进程实现加载我们的模块。LoadLibrary只有有程序使用过了它的代码就会加载到内存中&#xff08;因为动态链接库是内存加载&#xff09;就是a程序要用L…

大数据-数据分析师利用excel绘图

你会用excel&#xff0c;统计数据吗&#xff1f;我是大数据工程师&#xff0c;但是我不会excel。那咋办&#xff1f; 用sql&#xff0c;统计&#xff0c;导出到excel&#xff0c;在用excel统计。本文主要讨论的是导出到excel后&#xff0c;画图。 图是什么&#xff1f; x和y…

【学习笔记】Mybatis-Plus(二) :常用注解

常用注解 注解含义应用场景TableName表名注解&#xff0c;标识实体类对应的表表名和实体类名称不一致TableId主键注解&#xff0c;标识实体类的主键主键需要指定自增长TableField字段注解数据库名称和字段名称不一致TableLogic逻辑删除不是真正物理删除数据KeySequence序列主键…

Ilya出走记:SSI的超级安全革命

图片&#xff5c;OpenAI官网 ©自象限原创 作者丨罗辑、程心 和OpenAI分道扬镳以后&#xff0c;Ilya“神秘而伟大”的事业终于揭开了面纱。 6月20日&#xff0c;前OpenAI核心创始人 Ilya Stuskever&#xff0c;在官宣离职一个月后&#xff0c;Ilya在社交媒体平台公开了…