使用 Keras 进行回归

发布日期:2026-07-12 03:31:03   来源 : 杭州电子商务研究院    浏览量 :21
杭州电子商务研究院 发布日期:2026-07-12 03:31:03  
21

介绍

深度学习是当今数据科学领域最热门的话题之一。这并不奇怪,因为大量令人着迷的应用程序正在使用深度学习进行开发,例如自动驾驶汽车、色彩恢复、自然语言处理、自动机器翻译、图像分类等等。

目前有很多深度学习库,但最受欢迎的是 TensorFlow、Keras 和 PyTorch。尽管 TensorFlow 和 Pytorch 非常受欢迎,但它们并不容易使用,而且学习曲线陡峭。因此,对于许多从业者来说,Keras 是首选。

Keras 库是用于构建深度学习模型的高级 API,因其易用性和简单性而受到青睐,有助于快速开发。通常,使用 Keras 构建非常复杂的深度学习网络只需几行代码即可实现。

在本指南中,我们将重点介绍如何使用 Keras 库构建回归模型。

使用 Keras 进行回归

回归是一种用于预测连续标签的监督式机器学习算法。其目标是根据评估标准生成一个代表某些观察数据的“最佳拟合”的模型。

我们将要介绍的深度学习神经网络的基本架构由三个主要部分组成。

  1. 输入层:这是输入训练观测值的地方。预测变量的数量也通过神经元在这里指定。

  2. 隐藏层:这些是输入层和输出层之间的中间层。深度神经网络在此组件中学习数据中涉及的关系。

  3. 输出层:这是从前两层发生的事情中提取最终输出的层。在回归问题的情况下,稍后的输出将有一个神经元。

问题陈述

失业是任何国家面临的主要社会经济和政治问题,因此,管理失业是任何政府的主要任务。但要管理经济中的失业,预测失业也是必不可少的。这就是本指南的目标。本指南将使用 Keras 构建深度学习回归模型来预测失业率。

本项目使用的数据来自 https://research.stlouisfed.org/fred2 提供的美国经济时间序列数据。数据包含 574 行和 5 个变量,如下所述:

      - psavert - personal savings rate.
- pce     - personal consumption expenditures, in billions of dollars.
- uempmed - median duration of unemployment, in weeks.
- pop     - total population, in thousands.
- unemploy- number of unemployed in thousands (dependent variable).
    

评估指标

我们将使用均方根误差 (RMSE) 来评估模型的性能,这是回归问题常用的指标。​​简单来说,RMSE 测量残差或误差的平均幅度。从数学上讲,它计算为预测值和实际值之间平方差的平均值的平方根。

步骤

以下是使用 Keras 实现回归模型时通常遵循的步骤。

步骤 1——加载所需的库和模块。

第 2 步——加载数据并执行基本数据检查。

步骤 3-为特征和响应变量创建数组。

步骤4-创建训练和测试数据集。

步骤5-定义、编译和拟合Keras回归模型。

第 6 步-根据测试数据进行预测并计算评估指标。

以下部分将介绍这些步骤。

步骤 1 - 加载所需的库和模块

      # Import required libraries
import pandas as pd
import numpy as np 
import matplotlib.pyplot as plt
import sklearn

# Import necessary modules
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from math import sqrt

# Keras specific
import keras
from keras.models import Sequential
from keras.layers import Dense
    

第 2 步 - 读取数据并执行基本数据检查

第一行代码将数据读入为 pandas 数据框,而第二行代码打印形状 - 5 个变量的 574 个观测值。第三行给出数值变量的汇总统计信息。我们可以看到所有变量的“计数”均为 574,这等于数据集中的记录数。这意味着我们没有缺失值。

      df = pd.read_csv('regressionexample.csv') 
print(df.shape)
df.describe()
    
      (574, 5)
    
个人消费支出 流行音乐 普萨韦尔 医学 失业
数数 574 574 574 574 574
意思是 4,844 2,57,189 8 9 7,772
标准 3,579 36,731 3 4 2,642
分钟 507 1,98,712 2 4 2,685
25% 1,582 2,24,896 6 6 6,284
50% 3,954 2,53,060 8 8 7,494
75% 7,667 2,90,291 11 9 8,691
最大限度 12,162 3,20,887 17 二十五 15,352

步骤 3 - 为特征和响应变量创建数组

第一行代码创建了目标变量的对象,而第二行代码为我们提供了所有特征的列表,不包括目标变量“unemploy”。

第三行对预测变量进行归一化。这很重要,因为变量的单位差异很大,可能会影响建模过程。为了防止这种情况,我们将通过将预测变量缩放到 0 到 1 之间来进行归一化。

第四行显示标准化数据的摘要。我们可以看到,所有独立变量现在都已在 0 到 1 之间缩放。目标变量保持不变。

      target_column = ['unemploy'] 
predictors = list(set(list(df.columns))-set(target_column))
df[predictors] = df[predictors]/df[predictors].max()
df.describe()
    
个人消费支出 流行音乐 普萨韦尔 医学 失业
数数 574 574 574 574 574
意思是 0.40 0.80 0.47 0.34 7,772
标准 0.29 0.11 0.18 0.16 2,642
分钟 0.04 0.62 0.11 0.16 2,685
25% 0.13 0.70 0.32 0.24 6,284
50% 0.33 0.79 0.45 0.30 7,494
75% 0.63 0.90 0.62 0.36 8,691
最大限度 1 1 1 1 15,352

步骤 4 - 创建训练和测试数据集

前几行分别创建独立变量 (X) 和因变量 (y) 的数组。第三行将数据分为训练数据集和测试数据集,而第四行打印训练集 (4 个变量的 401 个观测值) 和测试集 (4 个变量的 173 个观测值) 的形状。

      X = df[predictors].values
y = df[target_column].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=40)
print(X_train.shape); print(X_test.shape)
    
      (401, 4)
(173, 4)
    

第 5 步 - 构建深度学习回归模型

我们将使用 Keras 中的深度学习构建回归模型。首先,我们将定义模型。下面的第一行代码调用 Sequential 构造函数。请注意,我们将使用 Sequential 模型,因为我们的网络由线性堆叠的层组成。第二行代码代表第一层,它指定激活函数和输入维度的数量,在我们的例子中是 4 个预测变量。然后,我们在隐藏层的第三行和第四行代码中重复相同的过程,这次没有 input_dim 参数。最后一行代码创建了一个带有一个节点的输出层,该节点应该输出以千为单位的失业人数。

隐藏层中使用的激活函数是修正线性单元(ReLU)。它是使用最广泛的激活函数,因为它具有非线性的优点,并且能够不同时激活所有神经元。简而言之,这意味着一次只激活少数神经元,从而使网络稀疏且非常高效。

      # Define model
model = Sequential()
model.add(Dense(500, input_dim=4, activation= "relu"))
model.add(Dense(100, activation= "relu"))
model.add(Dense(50, activation= "relu"))
model.add(Dense(1))
#model.summary() #Print model Summary
    

下一步是定义一个优化器和训练的损失度量。均方误差是我们的损失度量,“adam”优化器是我们的最小化算法。“adam”优化器的主要优点是我们不需要像梯度下降那样指定学习率;从而为我们节省了优化模型学习率的任务。我们使用下面代码的第一行完成了这个任务。

第二行代码在训练数据集上拟合模型。我们还提供了参数 epochs,它表示训练迭代次数。我们已经进行了 20 次 epoch。

      model.compile(loss= "mean_squared_error" , optimizer="adam", metrics=["mean_squared_error"])
model.fit(X_train, y_train, epochs=20)
    
      Epoch 1/20
401/401 [==============================] - 0s 1ms/step - loss: 68136318.3441 - mean_squared_error: 68136318.3441
Epoch 2/20
401/401 [==============================] - 0s 133us/step - loss: 68101432.0698 - mean_squared_error: 68101432.0698
Epoch 3/20
401/401 [==============================] - 0s 125us/step - loss: 67985495.1022 - mean_squared_error: 67985495.1022
Epoch 4/20
401/401 [==============================] - 0s 134us/step - loss: 67665023.0524 - mean_squared_error: 67665023.0524
Epoch 5/20
401/401 [==============================] - 0s 127us/step - loss: 66899397.2868 - mean_squared_error: 66899397.2868
Epoch 6/20
401/401 [====================
以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据