深度学习3:回归问题

article/2025/9/27 0:39:53

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

波士顿房价预测数据集

所包含的数据点相对较少,只有506个,分为404个训练样本和102个测试样本,输入数据的每个特征都有不同的取值范围,例如有些特性是比例取值是0-1,有的取值是1-12,还有的取值是0-100等等。

实现过程

加载数据集

(train_data,train_target),(test_data,test_target) = boston_housing.load_data()

在这里插入图片描述
每个样本都有13个数值特征,比如人均犯罪率,每个住宅的平均房间数等
在这里插入图片描述
准备数据

# 数据标准化
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是均放误差,预测值和目标值之差的平方# mae是平均绝对误差,它是预测值和目标值只差的绝对值model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])return model

网络的最后一层只有一个单元,没有激活,是一个线性层,这是标量回归的典型设置,因为如果添加激活函数就会限制输出范围。例如,如果最后一层添加sigmoid函数,网络只能预测0-1之间的值,这里最后一层纯线性,所以网络可以学会预测任意范围内的值。
回归问题常用的损失函数是mse损失函数,也就是均方误差。
mae是平均绝对误差,它是预测值和目标值之差的绝对值,如果mae等于0.5,代表预测的房价和实际价格平均相差500美元。

利用k折验证来验证方法

由于数据点很少,验证集就非常少,因此验证集的划分方式可能会造成验证分数上有很大方差,这样就无法对模型进行可靠的评估。这种情况下最好的做法是k折交叉验证,这种方法可以把可用数据划分为k个分区(k通常取4或5),实例化k个相同模型,将每个模型在k-1个分区上训练,并在剩下一个分区上评估,模型的验证分数等于k个验证分数的平均值。
在这里插入图片描述
concentrate的作用

>>> a=np.array([1,2,3])
>>> b=np.array([11,22,33])
>>> c=np.array([44,55,66])
>>> np.concatenate((a,b,c),axis=0)  # 默认情况下,axis=0可以不写
array([ 1,  2,  3, 11, 22, 33, 44, 55, 66]) #对于一维数组拼接,axis的值不影响最后的结果
k = 4
num_val_samples = len(train_data)//k
num_epochs = 500
all_scores=[]
for i in range(k):print('processing fold #', i)# 准备验证数据,第k个分区val_data = train_data[i*num_val_samples:(i+1)*num_val_samples]val_targets = train_target[i*num_val_samples:(i+1)*num_val_samples]# 准备训练数据:其他所有分区数据# 一次完成多个数组的拼接partial_train_data = np.concatenate([train_data[:i*num_val_samples],train_data[(i+1)*num_val_samples:]],axis=0)partial_train_targets = np.concatenate([train_target[:i*num_val_samples],train_target[(i+1)*num_val_samples:]],axis=0)model = build_model()#     保存每折的验证结果history = model.fit(partial_train_data, partial_train_targets, epochs=num_epochs, batch_size=1, verbose=0)
# 在验证数据上评估模型mae_history = history.history['val_mean_absolute_error']all_scores.append(mae_history)
#     计算所有轮次的k折验证分数平均值
average_mae_history = [np.mean([x[i] for x in all_scores]) for i in range(num_epochs)]

在这里插入图片描述
删除前10个数据点,因为它们的取值范围和曲线上其他点不一样,将每个数据点替换成前面数据点的指数移动平均值,以得到光滑的曲线。
绘制验证分数(删除前10个数据):

# 验证数据分数
def smooth_curve(points, factor=0.9):smoothed_points = []for point in points:if smoothed_points:previous = smoothed_points[-1]smoothed_points.append(previous*factor + point*(1-factor))else:smoothed_points.append(point)return smoothed_points
smooth_mae_history = smooth_curve(average_mae_history[10:])
plt.plot(range(1,len(smooth_mae_history)+1),smooth_mae_history)
plt.xlabel('Epochs')
plt.ylabel('Validation MAE')
plt.legend()
plt.show()

在这里插入图片描述

完整代码:

from tensorflow.keras.datasets import boston_housing
from tensorflow.keras import layers,models
(train_data,train_target),(test_data,test_target) = boston_housing.load_data()
import numpy as np
# 数据标准化
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是均放误差,预测值和目标值之差的平方# mae是平均绝对误差,它是预测值和目标值只差的绝对值model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])return model
model = build_model()
history = model.fit(train_data, train_target, epochs=80, batch_size=16, verbose=0)
test_mse_score,test_mae_score = model.evaluate(test_data,test_target)
print(test_mae_score)

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

相关文章

回归问题评价指标

目录 平均绝对值误差(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.

JRebel插件激活

JRebel,一款好用的 Spring 热部署插件。 1. 安装 注意:截至到目前为止,作者只找到了 2022.4.1 的激活方式,更高版本皆未激活成功。 1.1. IDEA 中直接安装 在插件市场中直接搜索:JRebel and XRebel 注意,这…

2019.9最新JRebel激活方式

原文链接 最近JRebel离线方式到期, idea报无法激活JRebel了, 找了很多以前的方式都无法生效, ip或域名都已经失效了, 好在找到了大神有效的激活方式,以下是激活步骤: 1. 下载反向代理软件 下载地址: https://github.com/ilanyu/ReverseProxy/releases根据自己的操作系统下载…

jrebel激活服务器搭建教程

jrebel是一款热部署插件,很好用,但是是收费的软件,本博客将搭建起一个jrebel激活服务器,如果条件允许,请购买正版lisence,请购买正版lisence,请购买正版lisence重要的事说三遍。 本博客激活是基于码云上的一个开源程序…

jrebel 激活

jrebel是ideal是的一款插件,是一个很好的热部署工具 -作用: 在项目启动过程中编译代码后,无需再次run或者debug,节省程序启动时间。 主要操作file—》settings—》plugins在搜索框中,输入jrebel点击右侧的install安装好…

JRebel激活失效解决

问题: 使用Jrebel运行项目时报错:Jrebel is not yet activated.Do you want to activate Jrebel now? 意思是插件未激活,需要激活插件 解决办法: 1. 下载代理软件:ReverseProxy,下载成功后双击打开(未成…

【IDEA】IDEA使用——IDEA中全局查找和全局替换

【IDEA】IDEA使用——IDEA中全局查找和全局替换 IDEA是一款优秀的Java IDE,全局查找和全局替换功能在学习和开发过程中使用的最为频繁,本文将简要总结其使用方法。 1.全局查找 面板位置:Edit > Find > Find In Path快捷键:…