神经网络图波士顿房价预测
时间: 2024-12-28 10:24:03 浏览: 17
### 实现波士顿房价预测模型
#### 数据集描述
波士顿房价数据是一个经典的机器学习数据集,用于回归分析。该数据集包含了506条记录,每条记录代表波士顿不同郊区的房屋特征及其对应的中位数价格。
#### 准备工作
为了完成此项目,需安装并配置如下工具和库:
- Jupyter Notebook作为主要开发环境[^1]
- Python版本应为3.6或以上[^1]
- TensorFlow框架版本2.4被推荐使用以构建神经网络模型
#### 加载与预处理数据
首先加载必要的Python包,并获取波士顿房价的数据集。由于原版波士顿房价数据集中存在一些伦理争议以及不再更新维护等问题,在实际操作时建议采用其他替代数据源如`sklearn.datasets`中的`load_boston()`函数(注意:在较新的scikit-learn版本中可能已被移除),或者寻找相似性质的新数据集来代替。
```python
import numpy as np
from sklearn.model_selection import train_test_split
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.optimizers import Adam
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
try:
from sklearn.datasets import load_boston
except ImportError:
print("当前Scikit-Learn版本不支持load_boston()")
boston = load_boston()
X = boston.data
y = boston.target.reshape(-1, 1)
# 对输入特征进行标准化处理
scaler_X = StandardScaler().fit(X)
X_scaled = scaler_X.transform(X)
# 将标签也做相同变换(如果必要的话),这里仅对特征做了标准化
scaler_y = StandardScaler().fit(y)
y_scaled = scaler_y.transform(y)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
X_scaled, y_scaled, test_size=0.2, random_state=42)
```
#### 构建神经网络架构
定义一个多层感知机(Multilayer Perceptron, MLP)结构来进行回归任务。这个简单的MLP由几个全连接层组成,其中加入了Dropout防止过拟合现象的发生。
```python
model = Sequential([
Dense(units=64, activation='relu', input_shape=(X_train.shape[1],)),
Dropout(rate=0.2),
Dense(units=32, activation='relu'),
Dropout(rate=0.2),
Dense(units=1) # 输出单个连续值表示预测的价格
])
optimizer = Adam(lr=0.001)
model.compile(optimizer=optimizer,
loss='mse') # 使用均方误差损失函数适合解决回归问题
```
#### 训练模型
设置好超参数之后就可以开始训练过程了。考虑到计算资源的有效利用,可以考虑应用K折交叉验证方法提高泛化能力。不过下面给出的是最基础的方式——直接在整个训练集上迭代优化权重直到收敛为止。
```python
history = model.fit(X_train, y_train,
epochs=100,
batch_size=8,
validation_data=(X_test, y_test))
```
#### 测试性能评估
当训练完成后,可以通过多种方式衡量最终得到的模型好坏程度。比如查看loss曲线变化趋势;也可以通过计算MSE等指标直观感受差距大小。
```python
predictions = model.predict(X_test).flatten()
# 反向转换回原始尺度下的真实值范围以便比较
predicted_prices = scaler_y.inverse_transform(predictions.reshape(-1, 1)).flatten()
actual_prices = scaler_y.inverse_transform(y_test).flatten()
print(f'Mean Squared Error: {mean_squared_error(actual_prices, predicted_prices)}')
```
#### 结果可视化
最后一步是对实验成果做出图形化的展示,这有助于更清晰地理解模型的表现情况。
```python
import matplotlib.pyplot as plt
plt.scatter(actual_prices, predicted_prices)
plt.xlabel('Actual Prices')
plt.ylabel('Predicted Prices')
plt.title('True vs Predicted House Prices')
plt.show()
```
阅读全文