首页 > 其他分享 >创建用于预测序列的人工智能模型,评估模型的能力。

创建用于预测序列的人工智能模型,评估模型的能力。

时间:2024-12-26 10:13:43浏览次数:6  
标签:预测 人工智能 series 模型 forecast window 序列 size

上一篇:《创建用于预测序列的人工智能模型(三),训练模型》

序言:对于当前的动则几千亿的大语言模型来说,训练的过程可以持续几天几周基于几个月,这取决于拥有的硬件数量以及总要训练的参数。模型训练完成后就进入模型的评估验证过程,一般会不断的重复直到优化完成。

评估人工智能模型的性能

当你训练好了一个 DNN 后,就可以开始用它进行预测了。但请记住,你使用的是窗口化数据集,因此对于某个点的预测是基于之前一定数量时间步的数据。

换句话说,由于你的数据保存在一个名为 series 的列表中,要预测某个值时,需要将从时间步 ttt 到 t+window_sizet + \text{window_size}t+window_size 的值传入模型,它将返回下一个时间步的预测值。例如,如果你想预测时间步 1,020 的值,需要取时间步 1,000 到 1,019 的值,然后用这些值预测序列中的下一个值。获取这些值的代码如下(注意这里写作 series[1000:1020],而不是 series[1000:1019]):

print(series[1000:1020])

然后,获取时间步 1,020 的实际值:

print(series[1020])

要预测该数据点的值,只需将该序列传入 model.predict。不过,为了保持输入形状一致,你需要使用 [np.newaxis],代码如下:

print(model.predict(series[1000:1020][np.newaxis]))

或者,如果你希望代码更通用,可以这样写:

print(series[start_point:start_point+window_size])

print(series[start_point+window_size])

print(model.predict(

series[start_point:start_point+window_size][np.newaxis]))

注意,这些操作基于窗口大小为 20 的假设,这个窗口大小可能比较小,可能会导致模型的准确性不够。如果你想尝试不同的窗口大小,需要重新调用 windowed_dataset 函数对数据集重新格式化,并重新训练模型。

以下是当起始点为 1,000 并预测下一个值时的输出:

[109.170746 106.86935 102.61668 99.15634 105.95478 104.503876

107.08533 105.858284 108.00339 100.15279 109.4894 103.96404

113.426094 99.67773 111.87749 104.26137 100.08899 101.00105

101.893265 105.69048 ]

106.258606

[[105.36248]]

第一个张量显示了一系列的值;接下来是实际的下一个值 106.258606;最后是模型预测的下一个值 105.36248。这是一个相当合理的预测,但我们如何衡量模型在一段时间内的准确性呢?我们将在下一节探讨这个问题。

探索整体预测

在上一节中,你学会了如何通过获取基于窗口大小(在这里是 20)的前一组值并将其传递给模型来预测某个时间点的值。如果想查看模型的整体预测结果,就需要对每一个时间步执行相同的操作。

你可以使用如下简单的循环完成这一任务:

forecast = []

for time in range(len(series) - window_size):

forecast.append(

model.predict(series[time:time + window_size][np.newaxis]))

首先,创建一个名为 forecast 的新数组,用于存储预测值。接着,对原始序列中的每个时间步调用 predict 方法,并将结果存储到 forecast 数组中。注意,对于数据的前 nnn 个元素(即窗口大小),无法进行预测,因为每次预测都需要前 nnn 个值。

完成循环后,forecast 数组将包含从时间步 21 开始的预测值。

如果你还记得,我们在时间步 1,000 处将数据集分为训练集和验证集。因此,下一步只需要保留从这个时间点以后的预测值。由于 forecast 数据已经偏移了 20(或窗口大小的值),可以像这样对其进行切分并转换为 Numpy 数组:

forecast = forecast[split_time-window_size:]

results = np.array(forecast)[:, 0, 0]

现在,results 的形状已经与预测数据一致了。你可以将其与验证数据进行对比并绘制图像:

plt.figure(figsize=(10, 6))

plot_series(time_valid, x_valid)

plot_series(time_valid, results)

绘制出的图像可能类似于图 10-3。

                                            图 10-3:将预测结果与真实值进行对比

从图中可以直观地看到预测结果表现不错,整体上跟随了原始数据的曲线。当数据中出现快速变化时,预测可能需要一些时间来追赶,但总体表现还可以。

然而,仅靠观察曲线很难精确评估效果。最好用一个好的指标进行衡量。在第 9 章中你学到了一个指标——MAE(平均绝对误差)。现在你有了验证数据和预测结果,可以使用如下代码来计算 MAE:

tf.keras.metrics.mean_absolute_error(x_valid, results).numpy()

由于数据中引入了随机性,你的结果可能会有所不同。但我尝试后得到了一个 MAE 值为 4.51。

可以说,尽可能提高预测准确度的过程,其实就是尽量最小化 MAE 的过程。你可以通过一些技术来实现,比如调整窗口大小。我将这个任务留给你自行探索。在下一节中,我们将通过对优化器进行基本的超参数调优来改善神经网络的学习效果,并观察这对 MAE 有什么影响。

总结:本篇内容主要探讨了如何评估人工智能模型的性能。通过预测一个点的值,并使用验证数据集进行对比,观察预测结果和真实值的吻合程度。还展示了利用窗口化数据集,结合循环预测每个时间步的方式,生成整体预测结果。最后通过计算 MAE(平均绝对误差)来量化模型的表现,并提出调整窗口大小等方法进一步优化模型预测精度,为后续的超参数调优打下基础。

标签:预测,人工智能,series,模型,forecast,window,序列,size
From: https://www.cnblogs.com/jellyai/p/18632037

相关文章

  • DDI-GPT:使用知识图谱增强的大模型对药物相互作用进行可解释的预测
    DDI-GPT:ExplainablePredictionofDrug-DrugInteractionsusingLargeLanguageModelsenhancedwithKnowledgeGraphs 是一篇关于药物相互作用(DDI)预测的研究论文,该研究提出了一个深度学习框架DDI-GPT,它通过结合知识图谱(KGs)和预训练的大型语言模型(LLMs)来预测药物之间的......
  • C# 异步编程模型【代码之美系列】
    ......
  • UML之模型、包及包的版型(构造型)
    包是UML模型的组织结构,也是UML项目的配置管理结构。包存在多个层级,除了顶层包,所有包隶属于一个且仅隶属于一个上层包。在项目不同阶段实际推进与配置过程中,通常以不同层级的包为单位进行check-in、check-out、打标签及建立基准。许多项目会在计划的时间点进行正式的官方评审,例如系......
  • 模型训练中性能指标
    在机器学习和深度学习的模型训练过程中,评估模型性能是至关重要的一环。不同的任务和应用场景可能会采用不同的评估指标,常见的包括准确率(Accuracy)、精确率或精度(Precision)、召回率(Recall)和均值平均精度(mAP)。本文将介绍这些评估指标的定义、计算方法及其在实际中的应用。1.Accur......
  • Go 高级编程 三 内存模型
    内存模型并发编程模型:多线程、消息传递。从理论上来说,多线程和基于消息的并发编程是等价的。go语言是基于消息并发模块的编程语言,将基于CSP模型的并发编程内置到语言中,可以通过go关键字来启动一个goroutinego的goroutiune之间是共享内存的。Goroutinegoroutiune是一种轻量级......
  • 知识图谱+大模型:打造全新智慧城市底层架构
    在数字化时代,智慧城市的建设正迎来新一轮的变革。本文将探讨如何结合知识图谱和大模型技术,构建智慧城市的全新底层架构,以应对日益增长的数据量和复杂性,提升城市管理的智能化水平。 知识图谱:智慧城市的知识库知识图谱作为智慧城市的“大脑”,是一种语义......
  • LangGraph:基于图结构的大模型智能体开发框架
    LangGraph是LangChainAI开发的一个工具库,用于创建代理和多代理智能体工作流。它提供了以下核心优势:周期、可控性和持久性,对于Agent智能体开发者来说无疑减少了许多工作量。以下篇幅仅从本人角度阐述LangGraph在开发过程中的亮点以及使用方法。基本介绍LangGraph的StateGraph是......
  • Qwen2大模型微调入门实战(附完整代码)超详细讲解
    Qwen2(https://modelscope.cn/models/qwen/Qwen2-1.5B-Instruct/summary)是通义千问团队最近开源的大语言模型,由阿里云通义实验室研发。以Qwen2作为基座大模型,通过指令微调的方式做高精度文本分类,是学习LLM微调的入门任务。在本文中,我们会使用Qwen2-1.5b-Instruct(https......
  • OpenAI o3模型震撼发布:编程界的革命性突破,程序员的未来将何去何从?
    当人工智能踏足编程领域,生产力的提升让人瞠目结舌。就在近日,OpenAI发布了全新的o3模型,其强大的代码生成能力和上下文理解能力,将编程带入了一个全新的时代。是机遇还是挑战?程序员们将如何面对这场技术风暴? o3模型究竟有何与众不同之处?它的发布会对程序员和整个软件行业产生怎......
  • 阿里发布多模态推理模型 QVQ-72B,视觉、语言能力双提升;OpenAI 正在研发人形机器人丨 RT
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......