使用Keras构建回归模型
- 数据集:加州住房数据集
- 模型:MLP
- 框架:Keras
1、导入相关工具包
从sklearn中导入数据集
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import keras
2、加载数据集
# housing_data 是一个包含数据、标签的字典
housing_data = fetch_california_housing()
3、划分训练集和测试集
使用sklearn中的 train_test_split 进行数据划分,默认测试集占比25%。
x_train_all, x_test_all, y_train_all , y_test_all = train_test_split(housing_data["data"], housing_data["target"])
4、数据标准化
使用sklearn中的 StandardScaler 进行数据标准化,由于采用梯度下降法,故标准化可以加速模型收敛
scaler = StandardScaler() # 标准化的对象
x_train_all = scaler.fit_transform(x_train_all) # 对训练集进行拟合,标准化
x_test_all = scaler.transform(x_test_all) # 在测试集上标准化
5、模型构建
由于是回归模型,因此,输出层神经元个数为1,并且不需要激活函数,输出神经元会不断逼近真实标签值,
model = keras.models.Sequential(name="MLP-回归")
model.add(keras.layers.Dense(30, activation="relu", input_shape=(x_train_all.shape[1], )))
model.add(keras.layers.Dense(1))
6、打印模型信息
model.summary()
7、模型编译
采用随机梯度下降法进行优化,损失函数为均方误差
model.compile(optimizer="sgd", loss=keras.losses.mean_squared_error)
8、模型训练
验证集占训练集10%,训练集每轮训练完后,在验证集上进行验证
history = model.fit(x_train_all, y_train_all, epochs= 50, validation_split=0.1)
9、测试集上评估
mse = model.evaluate(x_test_all, y_test_all) # 返回测试集的mse
print(mse)
10、预测:
x_new = x_test_all[:10] # 取测试集前10个样本,进行预测
y_pre = model.predict(x_new)
11、完整代码
# 导入相关工具库
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import keras
# 加载数据集
housing_data = fetch_california_housing()
# 划分训练集和测试集
x_train_all, x_test_all, y_train_all , y_test_all = train_test_split(housing_data["data"], housing_data["target"])
# 数据处理(标准化)
scaler = StandardScaler()
x_train_all = scaler.fit_transform(x_train_all)
x_test_all = scaler.transform(x_test_all)
# 构建模型
model = keras.models.Sequential(name="MLP-回归")
model.add(keras.layers.Dense(30, activation="relu", input_shape=(x_train_all.shape[1], )))
model.add(keras.layers.Dense(1))
# 打印模型结构信息
model.summary()
# 模型编译
model.compile(optimizer="sgd", loss=keras.losses.mean_squared_error)
# 模型训练
history = model.fit(x_train_all, y_train_all, epochs= 50, validation_split=0.1)
# 在测试集上评估
mse = model.evaluate(x_test_all, y_test_all) # 返回测试集的loss和mse
print(mse)
# 预测
x_new = x_test_all[:10]
y_pre = model.predict(x_new)