TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 使用Keras实现线性回归问题 - 房价预测案例
锋哥原创的TensorFlow2 Python深度学习视频教程:
https://www.bilibili.com/video/BV1X5xVz6E4w/
课程介绍

本课程主要讲解基于TensorFlow2的Python深度学习知识,包括深度学习概述,TensorFlow2框架入门知识,以及卷积神经网络(CNN),循环神经网络(RNN),生成对抗网络(GAN),模型保存与加载等。
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 使用Keras实现线性回归问题 - 房价预测案例
TensorFlow2 Keras主要是解决分类问题的。不过线性问题也同样能做。因为默认没有带线性问题的案例数据集。所以我们把前面scikit-learn自带的房价数据集拿过来。用TensorFlow2 Keras来实现下线性回归问题。
加州房价数据集介绍
-
数据集概况
-
来源:该数据集源自 1990 年的加州人口普查。
-
用途:用于回归模型的练习和测试,目标是预测加州各区域的房屋中位价。
-
样本数量:20,640 条记录。这比波士顿数据集(506条)大得多,能更好地体现机器学习算法的效果。
-
特征数量:8 个数值型特征。这些特征涵盖了人口、地理位置和经济指标。
-
目标变量:
MedHouseVal- 街区群体的房屋中位价,单位是十万美元。
注意:目标变量是分组中位价。这意味着一个街区的所有房屋都被分配了该街区的 median house value。对于任何位于该街区的房屋,目标值都是相同的。
-
特征详细说明
这8个特征提供了预测房价的不同维度信息:
-
MedInc:街区居民的收入中位数。
-
HouseAge:街区内房屋年龄中位数。
-
AveRooms:平均房间数(每户)。
-
AveBedrms:平均卧室数(每户)。
-
Population:街区人口数。
-
AveOccup:平均家庭成员数(每户)。
-
Latitude:街区的纬度。
-
Longitude:街区的经度。
3.目标变量:
-
MedHouseVal:房屋中位价(单位:十万美元)。
我们先安装下scikit-learn:
pip install scikit-learn -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
我们回顾下scikit-learn机器学习的实现,线性回归-正规方程使用 LinearRegression。
from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 1,加载数据
california = fetch_california_housing()
print(california.data, california.data.shape)
print(california.target)
print(california.feature_names)
# 2,数据预处理
X_train, X_test, y_train, y_test = train_test_split(california.data, california.target, test_size=0.2, random_state=20)
scaler = StandardScaler() # 数据标准化:消除不同特征量纲的影响
X_train_scaled = scaler.fit_transform(X_train) # fit计算生成模型,transform通过模型转换数据
X_test_scaled = scaler.transform(X_test) # # 使用训练集的参数转换测试集
# 3,创建和训练线性回归模型(正规方程)
lr_model = LinearRegression() # 创建分类器实例
lr_model.fit(X_train_scaled, y_train) # 训练模型
print('权重系数:', lr_model.coef_)
print('偏置值:', lr_model.intercept_) # 在线性回归模型中,•偏置(截距)•(bias)是模型参数之一,表示当所有特征值为0时,目标变量的期望值。
# 4,模型评估
y_predict = lr_model.predict(X_test_scaled)
print('预测值:', y_predict)
mse = mean_squared_error(y_test, y_predict)
print('正规方程-均方误差:', mse)
我们来用下Tensorflow2 keras多层神经网络实现下:
from sklearn.datasets import fetch_california_housing
import tensorflow as tf
from keras import Input, layers
# 1,加载数据
california = fetch_california_housing()
print(california.data, california.data.shape)
print(california.target)
print(california.feature_names)
X_train = california.data
y_train = california.target
# 2,构建多层神经网络回归模型
model = tf.keras.models.Sequential([
Input(shape=(X_train.shape[1],)),
layers.Dense(64, activation='relu'),
layers.Dense(32, activation='relu'),
layers.Dense(16, activation='relu'),
layers.Dense(1) # 输出层,线性激活
])
# 3,模型训练
model.compile(optimizer='adam', loss='mse', metrics=['mse'])
# 4,模型训练
history = model.fit(X_train, # 输入数据(特征)
y_train, # 目标数据(标签)
epochs=100, # 训练轮数
batch_size=32, # 每个训练批次的样本数量
validation_split=0.2, # 从训练数据中划分验证集的比例
verbose=1 # 日志显示模式(0=不显示,1=进度条,2=简洁显示)
)
print(f"最终MSE: {history.history['mse'][-1]:.4f}")
我们比较发现,用Keras多层神经网络,可以不用数据预处理,model.fit()方法自带可以进行训练和验证比例数据划分训练,同时还自带日志显示,最终比较,用神经网络最终训练的模型,性能还高于scikit-learn线性回归模型。神经网络唯一缺点就是费算力,费机器。
Sequential.fit() 是 TensorFlow/Keras 中最常用的训练方法之一。以下是其主要参数的简单介绍:
model.fit(
x=None,
y=None,
batch_size=None,
epochs=1,
verbose='auto',
callbacks=None,
validation_split=0.0,
validation_data=None,
shuffle=True,
class_weight=None,
sample_weight=None,
initial_epoch=0,
steps_per_epoch=None,
validation_steps=None,
validation_batch_size=None,
validation_freq=1
)
核心参数:
数据相关参数
-
x: 输入数据(特征)
-
y: 目标数据(标签)
-
batch_size: 每个训练批次的样本数量
-
validation_data: 验证数据集(元组 (x_val, y_val))
-
validation_split: 从训练数据中划分验证集的比例
训练过程参数
-
epochs: 训练轮数
-
verbose: 日志显示模式(0=不显示,1=进度条,2=简洁显示)
-
shuffle: 是否在每个epoch前打乱训练数据
-
initial_epoch: 开始训练的epoch序号
验证相关参数
-
validation_freq: 验证频率(每N个epoch验证一次)
-
validation_steps: 每个验证epoch的批次数量
回调与控制
-
callbacks: 回调函数列表(用于早停、模型保存等)
-
steps_per_epoch: 每个训练epoch的批次数量
-
class_weight: 类别权重字典(用于不平衡数据集)
这些参数控制了模型训练的基本行为,包括数据加载、训练周期、验证策略和训练过程监控等关键方面。
参数计算公式:
参数数量 = 输入维度 × 输出维度 + 输出维度
输入Input维度8
第一层:Dense(64)
-
参数 = 64× 8+ 64 = 576
第二层:Dense(32)
-
参数 = 64× 32+ 32= 2080
第三层:Dense(16)
-
参数 = 32× 16+ 16= 528
输出层:Dense(1)
-
参数 = 16× 1 + 1 = 17
更多推荐


所有评论(0)