数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例

时间序列概况在日常生活和专业研究中都很常见。简而言之,时间序列概况是一系列连续的数据点 y(0), y(1), …, y(t) ,其中时间 t 的点依赖于时间 t-1 的前一个点(或更早的时间点)。

在许多应用中,研究者致力于预测时间序列概况的未来行为。存在各种建模方法。这些模型通常基于过去或现在的信息,对未来概况进行估计。相关研究涉及多个领域,如使用神经网络进行天气预报(Bi et al., 2023)、深度学习在股票价格预测中的应用(Xiao and Su, 2022)以及制药产品需求演变分析(Rathipriya et al., 2023)等。

然而,模型训练需要数据支持。通常,数据质量越高,对研究过程的描述就越准确。

一般而言,模型可以学习预测下一个状态 y(t+1) ,如果给定先前的时间点 y(0), …, y(t) 。但在某些应用中,我们可能需要模型接收当前观察值 y(0), …, y(t) ,并预测系统在当前或下一个时间点的变化速率。这就要求我们获得系统的导数 dy ,而非可观察状态 y 。所以要训练此类模型并输出导数 dy ,首先需要收集这些导数数据,这些导数是直接从观察数据 y 计算得出的,因为直接测量导数在很多情况下可能困难或不可行。

这就引出了一个关键问题:噪声。处理过噪声时间序列数据的研究者都知道计算其导数的困难。

有多种方法可以处理时间序列数据中的噪声。本文将介绍一种在我们的研究项目中表现良好的方法,特别适用于时间序列概况中数据点较少的情况。

让我们开始使用Python来实现这个方法。

数据生成

首先,我们需要创建一个测试场景,并且希望模拟数据点较少的情况,我们将构建一个简单的生物反应器模型。

在这个反应器中,生物质(如细菌或其他细胞)消耗底物(如糖),并产生一种产品,例如具有药用价值的蛋白质。我们关注"生物质"、"底物"和"产品"这三个变量。这些物质的浓度(以克/升(g/L)为单位)在给定时间点 t 可直接测量,构成了我们的可观察数据 y

我们的目标是创建一个能够输出导数的特定形式的模型。需要从观察到的时间序列概况 y 中推导出导数。

让我们使用Python来实现这个过程。首先导入必要的包,并定义一个用于保存图形的函数:

 importos  importrandom   random.seed(0)  importnumpyasnp  importmatplotlib.pyplotasplt  fromscipy.integrateimportodeint    fromsklearn.metricsimportmean_squared_error  # 保存图形的函数  FIG_SIZE= (7, 2.5)  FIG_DPI=400  FIG_SAVEPATH='.'  FIG_SAVEEXT= ['png']  defsave_figure(figure_savepath : str=None,   save_figures_extension : list= ['png'],  figure_name : str='Figure',   dpi : int=1200):  figure_name=figure_name  ifisinstance(save_figures_extension, list):  figure_extension_list=save_figures_extension  else:  raiseValueError('[-] The indicated file extension for figures needs to be a list!')  forfigure_extensioninfigure_extension_list:  iffigure_savepathisNone:  figure_savepath=os.getcwd()  savepath=os.path.join(figure_savepath, figure_name+'.'+figure_extension)  plt.savefig(savepath, dpi=dpi)  print(f'[!] Figure saved as: {savepath}')

接下来,定义一个类来模拟上述生物反应器场景。这个类将使用给定的初始条件 y0 和80小时的时间跨度( tspan )求解一个常微分方程(ODE)系统,使用20个时间点。这种设置模拟了每四小时采样一次的低频采样情况。

 #%% 生成时间序列数据  # ============================================================================  classdatagen():  # ------------------------------------------------------------------------  def__init__(self,   y0=np.array([0.1, 60, 0]),  tspan=np.linspace(0, 80, 20)):  self.y0=y0  self.tspan=tspan  self.specnames= ['Biomass', 'Substrate', 'Product']  # ------------------------------------------------------------------------  defsolve_ODE_model(self):  '''求解给定样本和时间跨度的ODE模型。 \  返回导数(dydt)作为形状为[n,]的数组和ODE求解器的运行时间。  '''  # 模拟反应器操作直到选定的时间tf  self.y=odeint(func=self.ODEmodel, y0=self.y0, t=self.tspan)  # ------------------------------------------------------------------------  defODEmodel(self, y, t):  '''调整后的批次发酵ODE模型。'''  # 变量    X=y[0]  S=y[1]  P=y[2]  # 参数  mu_max=0.25;  #h^-1  K_S=105.4;    #kg/m^3  Y_XS=0.07;    #[-]  Y_PS=0.167;   #[-]  KXmu=121.8669;#g/L 高细胞密度导致的生物量生长抑制常数  T=273+35;    #K  R=0.0083145;  #kJ/(K*mol) 通用气体常数  k1_=130.0307;  #[-] 生物量生长激活常数  E1_=12.4321;  #kJ/mol 生物量生长激活焓  k2_=3.8343e48; #[-] 生物量生长失活常数  E2_=298.5476; #kJ/mol 生物量生长失活焓  # 定义速率常数的温度依赖性  k1=k1_*np.exp(-E1_/(R*T))  k2=k2_*np.exp(-E2_/(R*T))  # 计算生物量的比生长速率  mu= (mu_max*S)/(K_S+S) *k1/(1+k2) * (1-(X/(KXmu+X)))  # 计算底物消耗  sigma=-(1/Y_XS)*mu  # 计算蛋白质的比生产速率  pi=Y_PS/Y_XS*mu  # 速率矢量化  rate=np.hstack((mu.reshape(-1,1), sigma.reshape(-1,1), pi.reshape(-1,1)))          # 生物量、体积和产品的ODE    dydt=rate*X.reshape(-1,1)  # 返回  returndydt.reshape(-1,)  # ------------------------------------------------------------------------  defaddnoise_per_species(self, percentage=5):  '''使用一些基准数据并添加噪声。   '''  self.y_noisy=np.zeros((self.y.shape[0], 0))  forspec_idinrange(self.y.shape[1]):  rmse=mean_squared_error(self.y[:, spec_id], np.zeros(self.y[:, spec_id].shape), squared=False)  y_noisy_spec=self.y[:, spec_id] +np.random.normal(0, rmse/100.0*percentage, self.y[:, spec_id].shape)  self.y_noisy=np.hstack((self.y_noisy, y_noisy_spec.reshape(-1,1)))  # ----------------------------------------  defevaluate_true_derivatives(self):  '''评估生成数据的真实导数。  '''  self.y_true_diff=np.zeros((0, self.y.shape[1]))  fort_id, tinenumerate(self.tspan):  self.y_true_diff=np.vstack((self.y_true_diff, self.ODEmodel(y=self.y[t_id, :], t=t).reshape(1,-1)))

有了这个类,我们可以实例化它,通过求解ODE系统生成数据,并添加噪声。以下代码展示了如何生成数据并可视化结果:

 # 实例化类  data=datagen()  # 创建数据并添加噪声  data.solve_ODE_model()  data.addnoise_per_species()  data.evaluate_true_derivatives()  # 绘制真实和噪声数据  fig, ax=plt.subplots(figsize=FIG_SIZE, ncols=3)  foriinrange(len(data.specnames)):  ax[i].plot(data.tspan, data.y[:, i], marker='', linestyle='--', color='black', label='Ground truth')  ax[i].plot(data.tspan, data.y_noisy[:, i], marker='o', markersize=4, linestyle='', color='black', alpha=0.6, label='Observed')  ax[i].set_xlabel('Time / h', fontsize=8)  ax[i].set_ylabel('{} / g/L'.format(data.specnames[i]), fontsize=8)  ax[i].tick_params(axis='both', which='major', labelsize=8)  ifi==1:  ax[i].legend(frameon=False, fontsize=8, loc='lower left')  plt.tight_layout()  save_figure(figure_savepath=FIG_SAVEPATH, save_figures_extension=FIG_SAVEEXT, figure_name='True_and_noisy_data', dpi=FIG_DPI)

图1. 研究系统的基准真实情况(虚线)与观察到的噪声数据点(黑色圆圈)。

图1展示了生成的数据。虚线表示无噪声的真实数据,而黑点表示添加噪声后的观察数据。从左到右的三个图分别显示了生物质增长、底物消耗和产品形成的过程。

接下来,我们将探讨几种不同的方法来计算这些噪声数据的导数,并比较它们的性能。

有限差分法的直接应用

首先,我们将直接对噪声数据应用有限差分(FD)法。这是一种计算函数导数的基本方法,定义如下:

其中 f’(x) 是函数 f(x) 在点 x 处的导数, h 是一个小步长。

以下是有限差分法的Python实现:

 deffinite_difference(x_data, y_data):  x_diff=np.zeros((y_data.shape[0]-1, y_data.shape[1]))  y_diff=np.zeros((y_data.shape[0]-1, y_data.shape[1]))  dt= (x_data[1] -x_data[0])/2  forspec_idinrange(y_data.shape[1]):  y_diff_FD= []  x_diff_FD= []  fort_inrange(len(x_data)-1):  x_diff_FD.append(x_data[t_] +dt)  y_diff_FD.append((y_data[t_+1, spec_id] -y_data[t_, spec_id])/(x_data[t_+1] -x_data[t_]))  x_diff[:, spec_id] =np.array(x_diff_FD)  y_diff[:, spec_id] =np.array(y_diff_FD)  returnx_diff[:,0].reshape(-1,), y_diff  # 执行有限差分  data.x_diff_FD, data.y_diff_FD=finite_difference(data.tspan, data.y_noisy)

让我们比较FD法计算的导数与真实导数:

 fig, ax=plt.subplots(figsize=FIG_SIZE, ncols=3)  foriinrange(len(data.specnames)):  ax[i].plot(data.tspan, data.y_true_diff[:, i], marker='', linestyle='--', color='black', label='True')  ax[i].plot(data.x_diff_FD, data.y_diff_FD[:, i], marker='', markersize=4, linestyle='-', color='blue', label='FD')  ax[i].set_xlabel('Time / h', fontsize=8)  ax[i].set_ylabel('Derivative {} / g/L/h'.format(data.specnames[i]), fontsize=8)  ax[i].tick_params(axis='both', which='major', labelsize=8)  ifi==1:  ax[i].legend(frameon=False, fontsize=8, loc='upper center')  plt.tight_layout()  save_figure(figure_savepath=FIG_SAVEPATH, save_figures_extension=FIG_SAVEEXT, figure_name='Derivative_comparison_FD', dpi=FIG_DPI)

图2. 基准真实导数(虚线)与通过FD计算的导数(蓝色实线)对比。

图2展示了FD法的局限性。黑色虚线表示真实导数,蓝色实线表示FD法计算的导数。可以观察到,FD法对噪声极为敏感。这种敏感性导致了导数的显著波动,使得计算结果难以应用于后续分析或建模。

Savitzky-Golay滤波技术

为了减少噪声影响,一种常用方法是在计算导数之前先对数据进行滤波。Savitzky-Golay(SG)滤波器是一种广泛使用的数据平滑技术。SG滤波器通过在移动窗口内拟合多项式来平滑数据。可以使用

scipy

包中的SG滤波器实现:

 fromscipy.signalimportsavgol_filter  # 定义SG滤波器参数  window_size=5  polynomial_order=2  # 对每个物种的噪声数据进行平滑  y_smooth=np.zeros((data.y_noisy.shape[0], data.y_noisy.shape[1]))  foriinrange(data.y_noisy.shape[1]):  y_smooth[:, i] =savgol_filter(data.y_noisy[:, i], window_size, polynomial_order)  # 绘制平滑数据与噪声数据的对比  fig, ax=plt.subplots(figsize=FIG_SIZE, ncols=3)  foriinrange(len(data.specnames)):  ax[i].plot(data.tspan, data.y[:, i], marker='', linestyle='--', color='black', label='True')  ax[i].plot(data.tspan, data.y_noisy[:, i], marker='o', markersize=4, linestyle='', color='black', label='Observed')  ax[i].plot(data.tspan, y_smooth[:, i], marker='', linestyle='-', color='red', label='Smoothed')  ax[i].set_xlabel('Time / h', fontsize=8)  ax[i].set_ylabel('{} / g/L'.format(data.specnames[i]), fontsize=8)  ax[i].tick_params(axis='both', which='major', labelsize=8)  ifi==1:  ax[i].legend(frameon=False, fontsize=8, loc='lower left')  plt.tight_layout()  save_figure(figure_savepath=FIG_SAVEPATH, save_figures_extension=FIG_SAVEEXT, figure_name='Smoothing_SG', dpi=FIG_DPI)

图3. 基准真实数据(黑色虚线)与观察到的噪声数据点(黑色圆圈)和SG平滑后的概况(红色实线)对比。

使用平滑后的数据点重新计算导数:

 # 对Savitzky-Golay平滑后的数据使用FD法计算导数  data.x_diff_SGFD, data.y_diff_SGFD=finite_difference(data.tspan, y_smooth)

比较SG-FD方法与之前的结果:

 # 可视化真实导数、FD和SGFD的结果  fig, ax=plt.subplots(figsize=FIG_SIZE, ncols=3)  foriinrange(len(data.specnames)):  ax[i].plot(data.tspan, data.y_true_diff[:, i], 'k--', label='True')  ax[i].plot(data.x_diff_FD, data.y_diff_FD[:, i], 'b-', label='FD')  ax[i].plot(data.x_diff_SGFD, data.y_diff_SGFD[:, i], 'r-', label='SGFD')  ax[i].set_xlabel('Time / h', fontsize=8)  ax[i].set_ylabel('Derivative {} / g/L/h'.format(data.specnames[i]), fontsize=8)  ax[i].tick_params(axis='both', which='major', labelsize=8)  ifi==1:  ax[i].legend(frameon=False, fontsize=8, loc='best')  plt.tight_layout()  save_figure(figure_savepath=FIG_SAVEPATH, save_figures_extension=FIG_SAVEEXT, figure_name='Derivative_comparison_FD_SGFD', dpi=FIG_DPI)

图4. 基准真实导数(黑色虚线)与通过FD计算的导数(蓝色实线)和SG平滑后用FD计算的数据(红色实线)对比。

图4显示,SG-FD方法(红线)相比直接FD方法(蓝线)有所改善。但是结果仍然存在明显的噪声影响,特别是在数据变化较快的区域。这表明在数据点较少的情况下,SG滤波器的效果可能不够理想。

符号回归方法

现在介绍一种不太常用但在某些情况下非常有效的方法:符号回归(SR)。SR方法的核心思想是找到一个能够很好拟合数据的函数表达式。一旦我们有了这个函数表达式,就可以对其进行解析微分,从而获得更平滑的导数估计。

SR方法的优势在于它可以自动发现数据中的潜在模式和关系,而不需要预先指定函数形式。这对于复杂的非线性系统特别有用。

我们将使用

udiff

包来实现SR方法。这个包基于Guimerà等人(2020)开发的BMS算法。以下是使用SR方法的代码:

from udiff.smooth import smooth_bms             # 使用符号回归模型平滑数据  
from udiff.differentiate import differentiator  # 对获得的符号回归模型进行解析微分  # 创建空数组用于存储拟合概况  
data.y_smooth_sr = np.zeros(data.y.shape)  
data.y_diff_sr = np.zeros(data.y.shape)  # 对每个物种拟合概况并求导(这个过程可能需要一些时间)  
for spec_id in range(data.y.shape[1]):  X = data.tspan  Y = data.y_noisy[:, spec_id]  obj = smooth_bms(x=X, y=Y, scaling=False)  obj.fit_bms(nsteps=1e4, maxtime=1800, minr2=0.999, show_update=True, update_every_n_seconds=200)   data.y_smooth_sr[:, spec_id] = obj.y_smooth  diffobj = differentiator(obj)  diffobj.differentiate()  data.y_diff_sr[:, spec_id] = diffobj.y_diff

这个过程可能需要一些时间,因为SR算法需要搜索和评估大量可能的函数表达式。完成后,我们可以比较SR方法与之前的方法:

# 可视化真实导数、FD、SGFD和SR的结果  
fig, ax = plt.subplots(figsize=FIG_SIZE, ncols=3)  
nm = data.specnames  
for i in range(len(data.specnames)):  ax[i].plot(data.tspan, data.y_true_diff[:, i], 'k--', label='True')  ax[i].plot(data.x_diff_FD, data.y_diff_FD[:, i], 'b-', label='FD')  ax[i].plot(data.x_diff_SGFD, data.y_diff_SGFD[:, i], 'r-', label='SGFD')  ax[i].plot(data.tspan, data.y_diff_sr[:, i], 'g-', label='SR')  ax[i].set_xlabel('Time / h', fontsize=8)  ax[i].set_ylabel('Derivative {} / g/L/h'.format(data.specnames[i]), fontsize=8)  ax[i].tick_params(axis='both', which='major', labelsize=8)  if i == 1:  ax[i].legend(frameon=False, fontsize=8, loc='best')  
plt.tight_layout()  
save_figure(figure_savepath = FIG_SAVEPATH, save_figures_extension = FIG_SAVEEXT, figure_name = 'Derivative_comparison_FD_SGFD_BMS', dpi = FIG_DPI)

图5. 基准真实导数(黑色虚线)与通过FD计算的导数(蓝色实线)、SG平滑后用FD计算的数据(红色实线),以及符号回归平滑数据后进行解析微分(绿色实线)的对比。

图5清晰地展示了SR方法(绿线)的优越性。与FD和SG-FD方法相比,SR方法产生的导数估计更加平滑,更接近真实导数。这种改进尤其明显在数据变化较快的区域,这些区域通常是FD和SG-FD方法表现不佳的地方。

SR方法的成功在于它能够捕捉数据的整体趋势,而不是过度拟合局部噪声。通过找到一个能够很好描述整个数据集的函数表达式,SR方法能够在保持数据整体特征的同时,有效地过滤掉噪声的影响。

需要注意的是,SR方法也不是完美的。它的性能可能受到初始参数设置和计算时间的影响。此外,对于极其复杂或高度非线性的系统,SR方法可能难以找到准确的函数表达式。

总结

本文展示了在处理噪声时间序列数据时,获得可靠导数估计的几种方法。我们从最基本的有限差分法开始,然后探讨了Savitzky-Golay滤波与有限差分相结合的方法,最后介绍了符号回归这一较为先进的技术。

研究结果表明,在数据点较少且存在显著噪声的情况下,符号回归方法能够提供最可靠的导数估计。这种方法的优势在于它能够找到一个封闭形式的函数表达式来描述数据,从而允许进行解析微分。

值得注意的是,没有一种方法是万能的。选择合适的方法应该基于具体问题的特征,如数据的复杂性、噪声水平、可用的计算资源等。在实际应用中,可能需要结合多种方法并进行交叉验证,以确保结果的可靠性。

本研究的方法和发现可能对多个领域的研究者有所帮助,特别是在处理稀疏且噪声较大的时间序列数据时。例如,在生物过程工程、金融市场分析或环境监测等领域,这些技术可能会提供更准确的动态系统行为洞察。

对于那些希望深入了解符号回归在优化问题中应用的读者,我们建议参考相关的研究文献。特别地,Guimerà等人(2020)的工作为本文所用的BMS算法奠定了基础。此外,Forster等人(2024)和de Carvalho Servia(2024)的研究进一步展示了符号回归在复杂系统建模中的应用潜力。

最后,值得强调的是,本文介绍的方法并非旨在替代传统的数据分析技术,而是作为一种补充工具,特别是在处理具有挑战性的数据集时。研究者应该根据具体问题的需求和约束条件,选择最合适的方法或方法组合。

未来研究方向

基于本研究的结果,我们可以提出几个潜在的未来研究方向:

  1. 方法的鲁棒性分析: 对不同类型和程度的噪声,以及不同的采样频率进行系统的测试,以评估各种方法的鲁棒性。
  2. 自适应算法开发: 开发能够根据数据特征自动选择最佮算法或参数的智能系统。
  3. 计算效率优化: 特别是对于符号回归方法,研究如何提高其计算效率,使其能够处理更大规模的数据集。
  4. 与机器学习方法的结合: 探索将本文介绍的方法与深度学习等先进机器学习技术结合的可能性。
  5. 跨领域应用研究: 在更多不同的科学和工程领域测试这些方法,以验证其通用性和限制。

参考文献

  1. What is Machine Learning? A Primer for the Epidemiologist
  2. Stock Market Prediction via Deep Learning Techniques: A Survey
  3. Demand forecasting model for time-series pharmaceutical data using shallow and deep neural network model
  4. A Bayesian machine scientist to aid in the solution of challenging scientific problems
  5. Application of symbolic regression for constitutive modeling of plastic deformation

https://avoid.overfit.cn/post/24cb44a912ba46ceaa035c26e5f89089

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

算法:76.最小覆盖子串

题目 链接:leetcode链接 思路分析(滑动窗口) 还是老样子,连续问题,滑动窗口哈希表 令t用的hash表为hash1,s用的hash表为hash2 利用hash表统计窗口内的个字符出现的个数,与hash1进行比较 选…

Java数据存储结构——平衡二叉树

文章目录 22.1.3 平衡二叉树22.1.3.1 LL22.1.3.2 LR22.1.3.3 RR22.1.3.4 RL 22.1.3 平衡二叉树 平衡二叉树的特点: 二叉树左右两个子树的高度差不超过1任意节点的左右两个子树都是一颗平衡二叉树 在原来的平衡二叉树中,新增数据会破坏平衡性&#xff…

【CMake】使用CMake在Visual Studio 构建多cpp文件项目

首先,我们在 C m a k e Cmake Cmake文件下写入以下代码: #需求的最低cmake程序版本 cmake_minimum_required(VERSION 3.12)#本工程的名字 project(OpenGL)#支持的C版本 set(CMAKE_CXX_STANDARD 20)#本工程主程序文件及输出程序名称,生成exe …

信奥初赛解析:1.1-计算机概述

目录 前言 知识要点 一、发展史 二、计算机的分类 三、计算机的基本特征 四、计算机的应用 课堂练习 题目列表 定项选择题 不定项选择题 参考答案 定项选择题 不定项选择题 前言 从今天开始,我们要重点讲初赛内容, 预计讲半年,信…

【漏洞复现】金某云星空ERP GetImportOutData .net反序列化漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

★ C++进阶篇 ★ 多态

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第一章----多态 ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 …

make 和 Makefile/makefile

1.概念 make 是一条命令 &#xff0c; Makefile/makefile是一个文件。 【 makefile 是一个 写了如何编译文件&#xff0c;形成可执行程序的文件】 2. 语法 1. 基本语法 依赖关系 // 依赖关系 由 目标名和依赖文件列表组成&#xff0c;语法为 目标名 : 依赖文件列表 【Ta…

Playwright快速入门(TypeScript版)

文章目录 1. 前言1. 系统环境要求2. Playwright介绍3. 安装Playwright4. 运行示例测试5. HTML 测试报告6. 在UI模式下运行测试示例7. 更新Playwright版本 1. 前言 Playwright 相比 Selenium&#xff0c;具有多浏览器支持、现代化 API、更快性能、精细页面控制、自动等待元素、…

医学数据分析实训 项目三 关联规则分析作业--在线购物车分析--痹症方剂用药规律分析

文章目录 项目三 关联规则分析一、实践目的二、实践平台三、实践内容任务一&#xff1a;在线购物车分析&#xff08;一&#xff09;数据读入&#xff08;二&#xff09;数据理解&#xff08;三&#xff09;数据预处理&#xff08;四&#xff09;生成频繁项集&#xff08;五&…

什么是 HTTP/3?下一代 Web 协议

毫无疑问&#xff0c;发展互联网底层的庞大协议基础设施是一项艰巨的任务。 HTTP 的下一个主要版本基于 QUIC 协议构建&#xff0c;并有望提供更好的性能和更高的安全性。 以下是 Web 应用程序开发人员需要了解的内容。 HTTP/3 的前景与风险 HTTP/3 致力于让互联网对每个人…

[数据集][图像分类]茶叶病害分类数据集6749张7类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;6749 分类类别数&#xff1a;7 类别名称:["Unlabeled","alg…

项目实现:云备份②(文件操作、Json等工具类的实现)

云备份 前言文件操作实用工具类设计文件属性的获取文件的读写操作文件压缩与解压缩的实现文件目录操作 Json 实用工具类设计编译优化 前言 如果有老铁不知道当前项目实现的功能是什么的话&#xff0c;可以先移步这篇文章内容&#xff1a; 云备份项目的介绍 其中介绍了云备份项…

在 Dify 中高效利用 SiliconCloud API

引言 SiliconCloud 以其丰富的模型库和卓越的处理速度&#xff0c;在 Dify 平台上实现高效工作流和智能代理变得轻而易举。本文将指导您如何在 Dify 中集成 SiliconCloud 的强大功能。 集成 SiliconCloud 模型 步骤一&#xff1a;设置 SiliconCloud 账户 首先&#xff0c;您…

5. Python之数据类型

Python数据类型有数值型&#xff0c;字符串型&#xff0c;布尔型等等 内置函数type()&#xff0c;可以查看变量的数据类型 。 一、数值类型 整数&#xff08;没有小数部分&#xff0c;包含正整数&#xff0c;负整数&#xff0c;0&#xff0c;默认为十进制数&#xff09;&…

PHP:强大的Web开发语言

PHP&#xff1a;强大的Web开发语言 一、PHP 简介及优势 PHP 的基本概念 PHP&#xff08;PHP: Hypertext Preprocessor&#xff09;即 “超文本预处理器”&#xff0c;是一种通用开源脚本语言&#xff0c;最初由 Rasmus Lerdorf 于 1994 年创建。它可以在服务器上执行&#xf…

正则表达式匹配整数与浮点数失败与解决方案

正则表达式匹配整数与浮点数失败与解决方案 问题描述问题分析解决方案总结 问题描述 在处理数据的时候需要提取文本内整数与浮点数&#xff0c;这个时候想到使用正则表达式&#xff0c;咨询百度文心一言给出以下方案及参考代码 import re text "我有100元&#xff0c;…

华为地图服务功能概览 -- HarmonyOS自学7

华为地图服务式Harmony OS生态下的一个地图服务&#xff0c;为开发者提供强大而便捷的地图能力&#xff0c;助力全球开发者实现个性化地图呈现&#xff0c;地图搜索和路线规划功能。 主要包括七大功能&#xff1a;静态图&#xff0c;场景化控件&#xff0c;地点搜索&#xff0c…

函数的认识(二)

函数的基础知识可查看&#xff1a;函数的认识&#xff08;一&#xff09; &#xff08;1&#xff09;函数说明文档 函数是纯代码语言&#xff0c;想要理解其含义&#xff0c;就需要一行行的去阅读理解代码&#xff0c;效率比较低。 我们可以给函数添加说明文档&#xff0c;辅…

Python 解析 Charles JSON Session File (.chlsj)

Charles 代理&#xff0c;是一款抓包软件&#xff0c;可以帮助我们抓取浏览器请求跟响应。 1、在 Filter 里面输入需要抓包的网址 2、右键 Export Session 3、文件类型选择 JSON Session File (.chlsj) 保存 4、解析响应的数据结构 response.body.text 是文本字符串。 # 导入…

Navicat使用 笔记04

Navicat调用数据库 1.创建一个自己的链接&#xff08;文件-->新建连接-->MySQL&#xff09; 进入到这个界面中&#xff1a; 【注意&#xff1a;密码是下载登录软件时设定过的】 创建一个连接完成&#xff08;通过双击激活&#xff09;。 2.在创建好的连接中创建数据库…