实地研究降本增效的杀伤力,LSTM算法实现全国失业率分析预测

前言

降本增效=降本增笑?增不增效暂且不清楚,但是这段时间大厂的产品频繁出现服务器宕机和产品BUG确实是十分增笑。目前来看降本增效这一理念还会不断渗透到各行各业,不单单只是互联网这块了,那么对于目前就业最为严峻的一段时期,我们能够对失业率有个全面的了解是最好的情况,所以基于此理念我们来拟定一个失业率预测分析这一微项目。

我们将会从数据获取–数据处理–LSTM建模–预测检测这四个流程依次进行最终得到一个较为合理准确的数据,当然该预测率的准确度是依赖获取到的官方数据的,至于数据真实性这个不作过多解释~大家只要了解建模过程如何和LSTM模型如何使用就好。

博主现任高级人工智能工程师,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。写文章的目的就是为了让零基础快速使用各类代码模型,保证每篇文章都为用心撰写。

且每篇文章我都会尽可能将简化涉及到垂直领域的专业知识,转化为大众小白可以读懂易于理解的知识,将繁杂的程序创建步骤逐个拆解,以逐步递进的方式由难转易逐渐掌握并实践,欢迎各位学习者关注博主,博主将不断创作技术实用前沿文章。

数据获取

不查不知道,一查确实还是挺有意思的数据,想要获取官方数据可以直接访问国家数据网站。
全国失业率统计数据因为是官方的数据所以就默认为真实情况,就不用进行数据清洗工程了。

数据预览

# 转换为DataFrame
df = pd.DataFrame(data)

# 将日期转换为时间序列,并设为索引
df['日期'] = pd.to_datetime(df['日期'], format='%Y年%m月')
df.set_index('日期', inplace=True)

# 由于数据是逆序的,我们需要将其反转以正确地展示时间序列
df = df.iloc[::-1]

df

请在此添加图片描述

我们再来数据可视化帮我们更具体的看清楚整个数据的全貌:

# 绘制线图
plt.figure(figsize=(10, 6))  # 设置图形大小
plt.plot(df.index, df['全国城镇调查失业率(%)'], marker='o', label='全国城镇调查失业率(%)')
plt.plot(df.index, df['全国城镇本地户籍劳动力失业率(%)'], marker='s', label='全国城镇本地户籍劳动力失业率(%)')
plt.plot(df.index, df['全国城镇外来户籍劳动力失业率(%)'], marker='^', label='全国城镇外来户籍劳动力失业率(%)')

# 设置图表标题和标签
plt.title('不同类型失业率的时间序列变化')
plt.xlabel('日期')
plt.ylabel('失业率(%)')
plt.xticks(rotation=45)  # 旋转x轴标签以避免重叠
plt.legend()  # 显示图例

# 显示图表
plt.tight_layout()  # 自动调整子图参数, 使之填充整个图像区域
plt.show()

请在此添加图片描述

LSTM建模

请在此添加图片描述

那么现在我们可以来预测未来三个月的失业率到底如何,构建一个LSTM模型来预测未来三个月的失业率是一个典型的时间序列预测任务。使用PyTorch框架进行此类预测需要几个步骤:数据预处理、定义LSTM模型、训练模型、以及最后的预测。下面我会概述这个过程的每个步骤,并提供相应的示例代码。

步骤 1: 数据预处理

时间序列预测的第一步通常涉及到数据的预处理,包括标准化/归一化数据和创建适合于监督学习的时间序列数据集。

from sklearn.preprocessing import MinMaxScaler
import numpy as np
import torch

# 假设df是包含失业率时间序列的DataFrame

# 选择一个列作为预测目标
data = df['全国城镇调查失业率(%)'].values.reshape(-1, 1)

# 数据标准化
scaler = MinMaxScaler(feature_range=(-1, 1))
data_normalized = scaler.fit_transform(data)

# 创建数据集
def create_dataset(data, look_back=1):
    dataX, dataY = [], []
    for i in range(len(data)-look_back):
        a = data[i:(i+look_back), 0]
        dataX.append(a)
        dataY.append(data[i + look_back, 0])
    return np.array(dataX), np.array(dataY)

look_back = 3  # 使用3个月的数据来预测下一个月
X, y = create_dataset(data_normalized, look_back)
X = X.reshape(X.shape[0], 1, X.shape[1])  # 为了LSTM输入,需要转换为[samples, time steps, features]

# 转换为PyTorch张量
X_torch = torch.from_numpy(X).float()
y_torch = torch.from_numpy(y).float()

步骤 2: 定义LSTM模型

在PyTorch中定义一个简单的LSTM模型。

import torch.nn as nn

class LSTMModel(nn.Module):
    def __init__(self, input_size=1, hidden_layer_size=100, output_size=1):
        super().__init__()
        self.hidden_layer_size = hidden_layer_size

        self.lstm = nn.LSTM(input_size, hidden_layer_size)

        self.linear = nn.Linear(hidden_layer_size, output_size)

        self.hidden_cell = (torch.zeros(1,1,self.hidden_layer_size),
                            torch.zeros(1,1,self.hidden_layer_size))

    def forward(self, input_seq):
        lstm_out, self.hidden_cell = self.lstm(input_seq.view(len(input_seq) ,1, -1), self.hidden_cell)
        predictions = self.linear(lstm_out.view(len(input_seq), -1))
        return predictions[-1]

步骤 3: 训练模型

接下来,定义训练循环来训练LSTM模型。

model = LSTMModel(input_size=3, hidden_layer_size=100, output_size=1)  # 确保这里的参数与你的数据匹配
loss_function = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

epochs = 150
for epoch in range(epochs):
    total_loss = 0
    for seq, labels in zip(X_torch, y_torch):
        optimizer.zero_grad()
        
        # 根据修改后的模型,不再需要外部初始化hidden_cell
        y_pred = model(seq.unsqueeze(0))  # 增加一个批次维度

        single_loss = loss_function(y_pred, labels.unsqueeze(0))  # 标签也需要增加一个批次维度
        single_loss.backward()
        optimizer.step()
        
        total_loss += single_loss.item()
    
    if epoch % 25 == 0:
        print(f'epoch: {epoch:3} loss: {total_loss/len(X_torch):10.8f}')

训练误差:

epoch:   0 loss: 0.50735911
epoch:  25 loss: 0.09428047
epoch:  50 loss: 0.08110558
epoch:  75 loss: 0.06782570
epoch: 100 loss: 0.05745859
epoch: 125 loss: 0.05270799

模型预测

基于前面讨论的步骤和代码,使用训练好的LSTM模型和最近几个月的数据来预测未来三个月的失业率。这个过程大致分为以下几步:

  1. 使用最近的数据:基于look_back参数,从最新的数据开始预测。
  2. 进行预测:利用模型预测下一个时间点的值。
  3. 更新输入数据:将预测值添加到输入数据中,用于下一步的预测。
  4. 重复预测过程:重复步骤2和3,直到预测了所需的未来时间点的数据。
# 如果look_back=3,我们取最后3个已知时间点的数据
input_data_normalized = data_normalized[-look_back:].reshape((1, 1, look_back))

# 转换为PyTorch张量
input_data_tensor = torch.from_numpy(input_data_normalized).float()

# 存储预测结果
predictions_normalized = []

# 进行未来三个月的预测
for _ in range(3):  # 预测未来三个月
    with torch.no_grad():  # 不计算梯度
        # 预测下一个时间点
        pred = model(input_data_tensor)
        predictions_normalized.append(pred.numpy().flatten()[0])  # 存储预测结果
        
        # 更新输入数据
        input_data_tensor = torch.cat((input_data_tensor[:, :, 1:], pred.unsqueeze(0)), dim=2)

# 将预测结果逆标准化
predictions = scaler.inverse_transform(np.array(predictions_normalized).reshape(-1, 1))

print("预测的未来三个月失业率:", predictions.flatten())
预测的未来三个月失业率: [5.226562  5.1846743 5.1323695]

这个过程假定input_data_normalized包含了用于开始预测的最后look_back个时间点的数据,已经是标准化形式。每次预测后,我们都会更新这个输入数据,将最新的预测值添加进去,同时移除最旧的数据点,以便于下一次预测。预测完成后,我们使用与训练数据相同的MinMaxScaler实例scaler来逆标准化预测结果,以获取原始尺度上的预测值。

确保在进行预测之前,model已经在相似的数据上训练并且达到了满意的性能。预测的这个值大家看个乐呵就行不要太较真~

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

五款软件让效率飞跃

幸运的是,随着信息技术的不断演进,一系列高效的软件工具应运而生,它们旨在简化我们的日常工作,帮助我们以更少的时间完成更多的任务。下面,将介绍五款能够有效提升您工作效率的软件神器。 1、亿可达 他是一款自动化工…

从自动化到测开,测试人员逆袭之路从此起步!

在当今竞争激烈的软件测试行业中,近期的招聘市场确实面临一些挑战。大量的求职者争相涌入岗位,许多热衷于功能测试的人士甚至难以找到理想的工作机会。更不幸的是,连自动化测试和性能测试这些专业领域也受到了测试开发人员的竞争压力。然而&a…

Ubuntu使用Docker部署Nginx容器并结合内网穿透实现公网访问本地服务

目录 ⛳️推荐 1. 安装Docker 2. 使用Docker拉取Nginx镜像 3. 创建并启动Nginx容器 4. 本地连接测试 5. 公网远程访问本地Nginx 5.1 内网穿透工具安装 5.2 创建远程连接公网地址 5.3 使用固定公网地址远程访问 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#…

作业:基于udp的tftp文件传输实例

#include <head.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <errno.h>#define PORT 69 //服务器绑定的端口号 #define IP "192.168.1.107" //服务器的IP地址int do_download(i…

adobe animate 时间轴找不到编辑多个帧按钮

如题&#xff0c;找了半天&#xff0c;在时间轴上找不到编辑多个帧按钮,导致无法批量处理帧 然后搜索发现原来是有些版本被隐藏了&#xff0c;需要再设置一下 勾选上就好了

怎么进行流程图制作?这种方法一看就会

怎么进行流程图制作&#xff1f;在当今这个信息爆炸的时代&#xff0c;流程图作为一种直观、高效的表达方式&#xff0c;被广泛应用于各种工作场景。无论是项目管理、流程优化&#xff0c;还是产品设计、教育培训&#xff0c;流程图都能帮助我们更好地理解、分析和优化工作流程…

如何查看chrome里network的payload

如何查看chrome的network的请求payload&#xff0c;点击漏斗形状的过滤器&#xff0c;过滤框清空&#xff0c;表示检测所有&#xff0c;右边按钮点击“全部”&#xff0c;“第三方请求”不要勾选。

数字化金融展厅设计要点,你get到了吗?

近年间随着各类数字化主题展厅的出圈&#xff0c;让这种数字多媒体的设计概念逐渐深入至各个领域&#xff0c;这其中也包含了金融主题展厅&#xff0c;与传统展厅不同的是&#xff0c;借助了先进的技术和设备的数字化展厅&#xff0c;能提供更为丰富、个性化的参观体验&#xf…

Java实现定时发送邮件(基于Springboot工程)

1、功能概述&#xff1f; 1、在企业中有很多需要定时提醒的任务&#xff1a;如每天下午四点钟给第二天的值班人员发送值班消息&#xff1f;如提前一天给参与第二天会议的人员发送参会消息等。 2、这种定时提醒有很多方式如短信提醒、站内提醒等邮件提醒是其中较为方便且廉价的…

opengl日记8-opengl创建三角形

文章目录 环境直接上代码一点小总结参考 环境 系统&#xff1a;ubuntu20.04opengl版本&#xff1a;4.6glfw版本&#xff1a;3.3glad版本&#xff1a;4.6cmake版本&#xff1a;3.16.3gcc版本&#xff1a;10.3.0 直接上代码 CMakeLists.txt cmake_minimum_required(VERSION 2…

开源离线语音识别输入工具CapsWriter v1.0——支持无限时长语音、音视频文件转录字幕。

分享一款开源离线语音识别输入工具&#xff0c;支持无限时长语音、音视频文件转录字幕。 软件简介&#xff1a; CapsWriter是一款免费开源且可完全离线识别的语音输入工具&#xff0c;无需担心因在线版本识别带来的各种隐私泄露问题。支持win7及以上的系统&#xff0c;已经更…

TH-FBCQX2防爆气象站

TH-FBCQX2防爆气象站主要适用于易燃易爆、危险性高的场所。以下是其主要的适用领域&#xff1a; 石油与天然气行业&#xff1a;在石油和天然气的生产、储存和运输过程中&#xff0c;防爆气象站可以监测环境中的可燃气体浓度&#xff0c;并根据气象条件预测爆炸风险。同时&…

Kali Linux结合cpolar内网穿透实现公网环境SSH远程访问

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh 远程连接kali! …

蓝桥杯可撤销并查集|查找|合并|撤销(C++)

前置知识 蓝桥杯并查集|路径压缩|合并优化|按秩合并|合根植物(C)-CSDN博客 可撤销并查集 关键注意 可撤销并查集的撤销功能如何实现可撤销并查集能不能用路径压缩 可撤销并查集(Reversible Union-Find)是一种扩展了标准并查集(Union-Find)数据结构的数据结构&#xff0c;它允…

小北技术圈第一期:技术人员不要只想着用技术变现

每周分享干货内容。寻找100个技术人员&#xff0c;聚在一起副业变现&#xff0c;全程免费&#xff0c;有意者关注微信公众号&#xff1a;小北技术圈。 本期赚钱经 摆脱思维陷阱。 技术人员的副业&#xff0c;不能只局限于开发产品。技术人员有很多独特的优势&#xff0c;这些…

讨论一下测试行业的现状

前言 我这两年尽量都克制自己发这类对行业的看法的文章。在写 23 年总结的时候&#xff0c;我也是只写过往经历&#xff0c;让大家自己判断我的经历是不是有参考价值的&#xff0c;尽量少去劝说其他人按我的思路来。 我对自己说多发技术文章&#xff0c;少发容易引起争议的帖子…

Java进阶 Maven基础

资料格式 配置文件 com.itheima Java代码 Statement stat con.createStatement(); 示例 com.itheima 命令 mvn test - Maven简介 传统项目管理状态分析 Maven 是什么 Maven的本质是一个项目管理工具&#xff0c;将项目开发过程抽象成一个项目对象模型&#xff08;POM&…

torchvision pytorch预训练模型目标检测使用

参考&#xff1a; https://pytorch.org/vision/0.13/models.html https://blog.csdn.net/weixin_42357472/article/details/131747022 有分类、检测、分割相关预训练模型 1、目标检测 https://pytorch.org/vision/0.13/models.html#object-detection-instance-segmentation-…

PytorchAPI的使用及在GPU的使用和优化

API 调用API&#xff1a;和手动实现的思路是一样的。#1&#xff0c;#2这两个步骤是通用的步骤&#xff0c;相当于建立一个模型&#xff0c;之后你具体的数据直接丢进去就行了。只需要按着这样的样式打代码就行&#xff0c;死的东西&#xff0c;不需要你自己创造。 import torc…

MySQL基础之锁

基本概念 锁是一种协调多个事务对同一数据并发访问的一种机制。它确保了数据库的一致性和完整性&#xff0c;防止多个事务同时修改一份数据导致冲突。 锁的类型 锁分为全局锁、表级锁、行级锁。全局锁会锁定整个数据库实例&#xff0c;使其处于只读状态&#xff1b;表级锁会在…