用TensorFlow2.0将波士顿房价数据集分为训练集,验证集和测试集(6:2:2),进行Tensorflow2.0的数据加载读取、线性回归模型的搭建、线性回归模型的交叉验证、模型保持和新数据预测
时间: 2023-06-10 20:06:09 浏览: 152
以下是用TensorFlow2.0实现波士顿房价数据集分为训练集、验证集和测试集,进行线性回归模型搭建、交叉验证、模型保持和新数据预测的代码:
```python
import tensorflow as tf
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 加载数据集
boston = load_boston()
x, y = boston.data, boston.target
# 数据标准化
scaler = StandardScaler()
x = scaler.fit_transform(x)
# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
x_train, x_val, y_train, y_val = train_test_split(x_train, y_train, test_size=0.25, random_state=42)
# 数据集转换为Tensorflow的Dataset格式
train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
val_dataset = tf.data.Dataset.from_tensor_slices((x_val, y_val))
test_dataset = tf.data.Dataset.from_tensor_slices((x_test, y_test))
# 设置批次大小
batch_size = 32
# 对训练集进行乱序、分批处理
train_dataset = train_dataset.shuffle(buffer_size=len(x_train)).batch(batch_size)
# 对验证集和测试集分批处理
val_dataset = val_dataset.batch(batch_size)
test_dataset = test_dataset.batch(batch_size)
# 搭建线性回归模型
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(1, input_shape=(13,))
])
# 编译模型
model.compile(optimizer=tf.keras.optimizers.Adam(),
loss='mse',
metrics=['mae'])
# 训练模型
history = model.fit(train_dataset,
epochs=100,
validation_data=val_dataset)
# 交叉验证
scores = model.evaluate(test_dataset)
print('Test loss:', scores[0])
print('Test mae:', scores[1])
# 模型保存
model.save('boston.h5')
# 新数据预测
test_data = x_test[:10]
predictions = model.predict(test_data)
print('Predictions:', predictions.flatten())
print('True values:', y_test[:10])
```
其中,通过`train_test_split`函数将原始数据集分为训练集、验证集和测试集。`StandardScaler`用于数据标准化处理。然后,将数据集转换为Tensorflow的`Dataset`格式,并设置批次大小。使用`tf.keras.models.Sequential`搭建线性回归模型,使用Adam优化器,均方误差损失函数和平均绝对误差指标。调用`fit`方法训练模型,并在验证集上进行验证。使用`evaluate`方法进行交叉验证。使用`save`方法保存模型。最后,使用模型对新数据进行预测。
阅读全文