本篇技术博文摘要 🌟
- 文章开篇回顾了回归问题的基本概念 及其常见应用场景,并清晰呈现了使用TensorFlow解决此类问题的标准流程图,为后续实战奠定理论基础。
- 核心部分围绕经典的波士顿房价预测数据集 展开,详细拆解了机器学习项目的完整生命周期:从数据准备与探索 开始,逐步指导读者完成模型的构建 (含网络结构设计说明)、编译 (详解损失函数、优化器等关键参数配置)、训练 (阐述轮次、批量大小等参数意义)、评估 (解读均方误差等核心指标)到最终的模型预测应用。
- 针对模型可能存在的不足,文章深入介绍了多种性能优化技巧 ,包括调整网络结构 的深度与宽度、采用K折交叉验证 以获取更稳健的性能评估,以及通过添加正则化项来有效防止模型过拟合。
- 最后,本文提供了完整的项目代码汇总 ,并对实战中常见的三类问题------模型表现不稳定、训练误差低但测试误差高、预测值严重偏离------给出了具体的原因分析与解决方案,使读者不仅能按步骤完成项目,更能深入理解原理并具备独立解决实际问题的能力。
引言 📘
- 在这个变幻莫测、快速发展的技术时代,与时俱进是每个IT工程师的必修课。
- 我是盛透侧视攻城狮,一个"什么都会一丢丢"的网络安全工程师,目前正全力转向AI大模型安全开发新战场。作为活跃于各大技术社区的探索者与布道者,期待与大家交流碰撞,一起应对智能时代的安全挑战和机遇潮流。

上节回顾
目录
[本篇技术博文摘要 🌟](#本篇技术博文摘要 🌟)
[引言 📘](#引言 📘)
[1.TensorFlow 之回归问题](#1.TensorFlow 之回归问题)
[2.TensorFlow 解决回归问题的基本流程图](#2.TensorFlow 解决回归问题的基本流程图)
[6.3 预测值偏离实际值很多](#6.3 预测值偏离实际值很多)



1.TensorFlow 之回归问题
1.1什么是回归问题
- 回归问题是机器学习中的一类重要问题,其目标是预测连续值输出。与分类问题(预测离散类别)不同,回归问题预测的是实数范围内的数值

1.2常见回归问题示例
- 房价预测:根据房屋面积、位置等特征预测价格
- 股票预测:根据历史数据预测未来股价
- 温度预测:根据气象数据预测未来温度

2.TensorFlow 解决回归问题的基本流程图


3.TensorFlow实战之波士顿房价预测
3.1准备数据及示例
- 使用经典的波士顿房价数据集,它包含506个样本,每个样本有13个特征
python
from tensorflow.keras.datasets import boston_housing
# 加载数据
(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

3.2构建模型及示例
python
from tensorflow.keras import models
from tensorflow.keras import layers
def build_model():
model = models.Sequential([
layers.Dense(64, activation='relu', input_shape=(train_data.shape[1],)),
layers.Dense(64, activation='relu'),
layers.Dense(1) # 输出层不需要激活函数
])
return model
3.2.1模型结构说明
- 输入层:对应13个特征
- 两个隐藏层:每层64个神经元,使用ReLU激活函数
- 输出层:1个神经元(预测房价),不使用激活函数

3.3编译模型及示例及示例
python
model = build_model()
model.compile(optimizer='rmsprop',
loss='mse', # 均方误差
metrics=['mae']) # 平均绝对误差
3.3.1关键参数说明
- optimizer: 优化器,控制学习过程
rmsprop: 适合大多数问题的默认选择- loss: 损失函数,回归问题常用
mse(Mean Squared Error): 均方误差- metrics: 评估指标
mae(Mean Absolute Error): 平均绝对误差

3.4训练模型及示例
python
history = model.fit(train_data, train_targets,
epochs=100,
batch_size=16,
validation_split=0.2)
3.4.1参数解释
epochs: 训练轮数batch_size: 每批数据量validation_split: 验证集比例

3.5评估模型及示例
python
# 在测试集上评估
test_mse_score, test_mae_score = model.evaluate(test_data, test_targets)
print(f"测试集MAE: {test_mae_score}")
3.5.1评估指标解读
- MAE (平均绝对误差) : 预测值与真实值差距的平均值
- 例如MAE=2.5表示预测平均偏差2.5万美元
- MSE (均方误差): 对较大误差给予更大惩罚

3.6使用模型预测及示例
python
# 对新数据进行预测
sample = test_data[0] # 取测试集第一个样本
prediction = model.predict(sample.reshape(1, -1))
print(f"预测价格: {prediction[0][0]}, 实际价格: {test_targets[0]}")
4.模型优化技巧
4.1调整网络结构及示例
python
# 更深的网络可能表现更好
def build_deeper_model():
model = models.Sequential([
layers.Dense(128, activation='relu', input_shape=(train_data.shape[1],)),
layers.Dense(64, activation='relu'),
layers.Dense(32, activation='relu'),
layers.Dense(1)
])
return model
4.2使用K折交叉验证及示例
python
from sklearn.model_selection import KFold
k = 4
kf = KFold(n_splits=k)
for train_index, val_index in kf.split(train_data):
# 划分训练集和验证集
partial_train_data = train_data[train_index]
partial_train_targets = train_targets[train_index]
val_data = train_data[val_index]
val_targets = train_targets[val_index]
# 训练和评估模型
model = build_model()
model.fit(partial_train_data, partial_train_targets,
epochs=100, batch_size=16, verbose=0)
val_mse, val_mae = model.evaluate(val_data, val_targets, verbose=0)
print(f"验证MAE: {val_mae}")
4.3添加正则化防止过拟合及示例
python
from tensorflow.keras import regularizers
model = models.Sequential([
layers.Dense(64, activation='relu',
kernel_regularizer=regularizers.l2(0.001),
input_shape=(train_data.shape[1],)),
layers.Dense(64, activation='relu',
kernel_regularizer=regularizers.l2(0.001)),
layers.Dense(1)
])

5.波士顿房价预测项目代码汇总
python
import tensorflow as tf
from tensorflow.keras.datasets import boston_housing
from tensorflow.keras import models, layers
import numpy as np
# 1. 加载波士顿房价数据集
(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
# 2. 数据标准化(回归问题关键步骤)
mean = train_data.mean(axis=0) # 计算训练集均值
std = train_data.std(axis=0) # 计算训练集标准差
train_data -= mean
train_data /= std
test_data -= mean
test_data /= std # 用训练集统计量标准化测试集
# 3. 构建神经网络回归模型
def build_model():
model = models.Sequential([
layers.Dense(64, activation='relu', input_shape=(train_data.shape[1],)), # 13个特征输入
layers.Dense(64, activation='relu'),
layers.Dense(1) # 回归输出层,预测房价
])
return model
# 4. 创建模型
model = build_model()
# 5. 编译模型
model.compile(optimizer='rmsprop',
loss='mse', # 均方误差,回归任务常用损失
metrics=['mae']) # 平均绝对误差,更直观的评估指标
# 6. 训练模型
history = model.fit(train_data, train_targets,
epochs=100, # 训练轮数
batch_size=16, # 批大小
validation_split=0.2, # 20%数据作为验证集
verbose=0) # 不显示训练过程
# 7. 评估模型
test_mse_score, test_mae_score = model.evaluate(test_data, test_targets, verbose=0)
print(f"测试集MAE: {test_mae_score:.2f}") # 平均绝对误差,单位是千美元
# 8. 预测房价
sample = test_data[0] # 获取第一个测试样本
prediction = model.predict(sample.reshape(1, -1), verbose=0) # 重塑为批处理格式
print(f"预测价格: ${prediction[0][0]:.2f}K, 实际价格: ${test_targets[0]:.2f}K")


6.常见问题与解决方案
6.1模型表现不稳定
- 原因: 数据量小或初始化随机性
- 解决: 增加数据量或使用K折交叉验证
6.2训练误差低但测试误差高
- 原因: 过拟合
- 解决: 添加Dropout层或L2正则化
6.3 预测值偏离实际值很多
- 原因: 数据未标准化或网络结构不合理
- 解决: 检查数据预处理步骤,调整网络深度和宽度
欢迎各位彦祖与热巴畅游本人专栏与技术博客
你的三连是我最大的动力
点击➡️指向的专栏名即可闪现
➡️计算机组成原理****
➡️操作系统
➡️****渗透终极之红队攻击行动********
➡️ 动画可视化数据结构与算法
➡️ 永恒之心蓝队联纵合横防御
➡️****华为高级网络工程师********
➡️****华为高级防火墙防御集成部署********
➡️ 未授权访问漏洞横向渗透利用
➡️****逆向软件破解工程********
➡️****MYSQL REDIS 进阶实操********
➡️****红帽高级工程师
➡️红帽系统管理员********
➡️****HVV 全国各地面试题汇总********
