神经网络:DNN回归问题

article/2025/9/27 0:05:09

2020_11_01

DNN Regression

参考资料:《Python深度学习》 Francois Choll

神经网络可以主要解决三大类问题:二分类、多分类、回归。

回归问题特点在于结果是连续值,因此调参过程也与分类问题相异。

在了解DNN回归问题后,我们可以以波士顿房价预测的经典问题作为案例与模板。

数据准备

Code Block

# 从Keras.datasets数据集中导入 Boston_Housing Problem
from keras.datasets import boston_housing# 导入数据(train_data, train_targets),(test_data, test_targets) = \boston_housing.load_data()

波士顿房价预测案例数据集已经内置于Keras.datasets数据库中,作为公开练习数据使用。
在这里插入图片描述

详细内容参考:https://keras.io/zh/datasets/

IPython:

In [1]: train_data.shape
Out[1]: (404, 13)In [2]: train_targets.shape
Out[2]: (404,)In [3]: test_data.shape
Out[3]: (102, 13)In [4]: test_targets.shape
Out[4]: (102,)In [5]: type(train_data)
Out[5]: numpy.ndarray

了解到:

  • 训练集与测试集都是小数据量,分别为404,102条。其中,输入特征变量个数为13个。
  • 训练集和测试集的数据格式都是np.array数组。

标准化

# 数据标准化mean = train_data.mean(axis = 0)
train_data -= mean
std = train_data.std(axis = 0)
train_data /= std# !用于测试数据标准化的均值和标准差都是在训练数据上计算得到的
test_data -= mean
test_data /= std

标准化是让模型更加普适性的操作,不会对于训练集产生依赖性。

搭建神经网络

# 构建神经网络
def build_model():model = models.Sequential()model.add(layers.Dense(64, activation='relu',input_shape = (train_data.shape[1],)))model.add(layers.Dense(64, activation='relu'))# !网络的最后一层只有一个单元,没有激活,是一个线性层# !这是标量回归(标量回归是预测单一连续值的回归)的典型设置model.add(layers.Dense(1))# !编译网络用的是mse损失函数,即均方误差(MSE, mean squared error)# !预测值与目标值之差的平方,这是回归问题常用的损失函数# !平均绝对误差(MAE, mean absolute error)# !是预测值与目标值之差的绝对值model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])return model

K折训练

# K折验证k = 4
num_value_sample = len(train_data) // k
num_epochs = 100
all_scores = []for i in range(k):print("Processing fold #", i)# !提取第i折的训练集与验证集val_data = train_data[i * num_value_sample : (i + 1) * num_value_sample]val_targets = train_targets[i * num_value_sample : \(i + 1) * num_value_sample]partial_train_data = np.concatenate([train_data[:i * num_value_sample],train_data[(i + 1) * num_value_sample:]],axis = 0)partial_train_targets = np.concatenate([train_targets[:i * num_value_sample],train_targets[(i + 1) * num_value_sample:]],axis = 0)# !使用训练集训练model = build_model()model.fit(partial_train_data, partial_train_targets,epochs = num_epochs,batch_size = 1,verbose=0)# !使用验证集验证val_mse, val_mae = model.evaluate(val_data, val_targets, verbose=0)all_scores.append(val_mae)

K折训练结果

All Code

# -*- coding: utf-8 -*-
"""
Created on Sat Oct 31 19:07:30 2020@author: Gavin
"""import numpy as np
import pandas as pd
# 从Keras.datasets数据集中导入 Boston_Housing Problem
from keras.datasets import boston_housing
# 从Keras导入构建神经网络的库
from keras import models
from keras import layers# 导入数据
# !数据类型均为 np.ndarray
(train_data, train_targets),(test_data, test_targets) = \boston_housing.load_data()# 数据标准化mean = train_data.mean(axis = 0)
train_data -= mean
std = train_data.std(axis = 0)
train_data /= std# !用于测试数据标准化的均值和标准差都是在训练数据上计算得到的
test_data -= mean
test_data /= std# 构建神经网络
def build_model():model = models.Sequential()model.add(layers.Dense(64, activation='relu',input_shape = (train_data.shape[1],)))model.add(layers.Dense(64, activation='relu'))# !网络的最后一层只有一个单元,没有激活,是一个线性层# !这是标量回归(标量回归是预测单一连续值的回归)的典型设置model.add(layers.Dense(1))# !编译网络用的是mse损失函数,即均方误差(MSE, mean squared error)# !预测值与目标值之差的平方,这是回归问题常用的损失函数# !平均绝对误差(MAE, mean absolute error)# !是预测值与目标值之差的绝对值model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])return model# K折验证k = 4
num_value_sample = len(train_data) // k
num_epochs = 500
all_scores = []for i in range(k):print("Processing fold #", i)# !提取第i折的训练集与验证集val_data = train_data[i * num_value_sample : (i + 1) * num_value_sample]val_targets = train_targets[i * num_value_sample : \(i + 1) * num_value_sample]partial_train_data = np.concatenate([train_data[:i * num_value_sample],train_data[(i + 1) * num_value_sample:]],axis = 0)partial_train_targets = np.concatenate([train_targets[:i * num_value_sample],train_targets[(i + 1) * num_value_sample:]],axis = 0)# !使用训练集训练model = build_model()model.fit(partial_train_data, partial_train_targets,epochs = num_epochs,batch_size = 1,verbose=0)# !使用验证集验证val_mse, val_mae = model.evaluate(val_data, val_targets, verbose=0)all_scores.append(val_mae)

总结

在这里插入图片描述


http://chatgpt.dhexx.cn/article/HW7ay4aj.shtml

相关文章

机器学习实战(二)使用LightGBM的回归问题模型搭建

目录 1.导入所用的数据包 2.导入模型建立所需要的数据 3.数据集划分 4.导入训练包与交叉验证包(LGBM) 5.模型训练 6.模型验证及画图 7.画图展示模型验证情况 8.特征重要性分析 数据集链接 S. Thai, H. Thai, B. Uy, T. Ngo, M. Naser, Test Data…

Keras深度学习(4)-回归问题之预测房价

在深度学习的任务中,回归问题也是一个常见的任务。 本文将要预测 20 世纪 70 年代中期波士顿郊区房屋价格的中位数,已知当时郊区的一些数据点,比如犯罪率、当地房产税率等。本节用到的数据集与前面两个例子有一个有趣的区别。它包含的数据点相…

『迷你教程』绝对能看懂的分类问题和回归问题白话版

文章目录 内容介绍函数近似分类预测建模回归预测建模分类与回归在分类和回归问题之间转换 内容介绍 老生常谈的话题分类问题和回归问题之间有一个重要的区别。从根本上说,分类是关于预测标签,回归是关于预测数量。 我经常看到这样的问题: 如…

各类回归问题总结

回归问题的条件/前提: 1) 收集的数据 2) 假设的模型,即一个函数,这个函数里含有未知的参数,通过学习,可以估计出参数。然后利用这个模型去预测/分类新的数据。 1. 线性回归 假设 特征 和 结果…

回归问题的评价指标和重要知识点总结

回归分析为许多机器学习算法提供了坚实的基础。在这篇文章中,我们将总结 10 个重要的回归问题和5个重要的回归问题的评价指标。 1、线性回归的假设是什么? 线性回归有四个假设 线性:自变量(x)和因变量(y…

深度学习3:回归问题

首先不要将回归问题和logistic回归算法混为一谈,logistic回归不是回归算法,而是分类算法。 之前的分类问题的目标是预测输入数据点所对应的单一离散的标签,而这节要预测一个连续的而不是离散的标签,比如根据气象数据预测明天的气温…

回归问题评价指标

目录 平均绝对值误差(MAE) 均方误差(MSE) 均方根误差(RMSE) 平均绝对百分比误差(MAPE) 均方误差对数(MSLE) 中位绝对误差(MedAE) R Squared 总结 回归模型: 个样本,每个样本…

stacking集成模型预测回归问题

前言 关于各种集成模型,已经有很多文章做了详细的原理介绍。本文不再赘述stacking的原理,直接通过一个案例,使用stacking集成模型预测回归问题。 本文通过学习一篇stacking继承学习预测分类问题,对其代码进行了调整,以…

逻辑回归问题汇总

文章目录 1. Logistic回归与线性回归的区别与联系?2. Logistic回归有哪些基本假设?3. Logistic回归的损失函数?4. Logistic回归损失函数的求解方法?5. Logistic回归是如何进行分类的?6. Logistic回归为什么要用极大似然函数作为损失函数?7. 为什么在…

回归问题归一化总结

在用深度学习做回归问题时,对数据进行标准化处理是一个共识,将数据标准化,利用标准化后得数据进行数据分析。不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响…

分类和回归问题

前言 最近在复习一些深度学习和机器学习的基础知识,看到分类和回归,这里记录一下。 一、回归 首先,回归应用的场景是用来输出一系列连续的值,然后用于预测等任务。回归的目的是为了找到最优拟合的曲线,这个曲线可以…

回归问题一般解决方法

1. 回归问题 Given a labeled training set learn a general mapping which associates previously unseen independent test data with their correct continuous prediction. 回归问题和分类问题很相似,区别在于回归问题的输出是一个连续值。 上图是训练数据 和 对应的连续值…

对线性回归、逻辑回归、各种回归的概念学习

回归问题的条件/前提: 1) 收集的数据 2) 假设的模型,即一个函数,这个函数里含有未知的参数,通过学习,可以估计出参数。然后利用这个模型去预测/分类新的数据。 1. 线性回归 假设 特征 和 结果 都满足线性。即不大于一次方。这个是针对 收集的数据而言。 收集的数据中…

回归问题

回归 回归(regression) 是监督学习的另一个重要问题。 回归用于预测输入变量(自变量) 和输出变量(因变量) 之间的关系, 特别是当输入变量的值发生变化时, 输出变量的值随之发生的…

回归问题原理

回归问题是一种常见的监督机器学习任务,在很多领域均有广泛应用。其典型应用包括销量预测、库存预测、股票价格预测、天气预测等。本问将讨论线性回归,包括线性回归模型的目标函数(损失函数和正则函数)、线性回归模型的优化求解、…

机器学习之回归问题

目录 前言 一、回归定义 二、回归建模步骤 1.模型假设-线性模型(Linear Model) (1)一元线性模型 (2)多元线性模型 2.模型评估-损失函数(Loss Funtion) 3.最佳模型-梯度下降&…

mac idea jrebel 激活

jrebel 官网提供注册,然后会给你一个注册码 首先 idea 安装 jrebel . 在安装完成之后,点击以下按钮 一开始 跟我的不一样,我的是注册完成之后,才会显示Change license 的这个提示, 之前好像是 Activate now 提示,点击即可 当注册完成之后,关闭弹出框 选择上图中的值,去官网注…

安装jrebel并激活

1.File-Settings-Plugins搜索jrebel,找到JRebel for IntelliJ ,点击install(我这里已经安装过了,所以显示的是更新) 2.重启idea 3.激活步骤,下载工具 ①下载激活工具 连接:https://pan.baidu.com/s/1Fh2v2zrAO2u50ZnS9LHBOQ 提取码…

JRebel激活步骤

JRebel简介: JRebel是与应用程序服务器集成的JVM Java代理,可使用现有的类加载器重新加载类。只有更改的类会重新编译并立即重新加载到正在运行的应用程序中,JRebel特别不依赖任何IDE或开发工具(除编译器外)。但是&…

关于JRebel 激活

具体JRebel安装教程参考: https://blog.csdn.net/lmdsoft/article/details/93769089 本文提供JRebel激活 Demo JRebel address was: 【http://jrebel.qekang.com:80/48dc7f8c-019f-4cb8-85d7-99b0134b69d0】, with any email.