如何用MLP(多层感知器)搭建回归模型进行加州房价预测 housing.csv 数据集 示例代码
时间: 2025-07-12 07:38:32 浏览: 13
<think>好的,我现在需要帮用户解决关于使用MLP回归模型预测加州房价的示例代码的问题。用户提到了housing.csv数据集,所以我得先确认数据来源和格式。根据用户提供的引用,数据来自StatLib仓库的California Housing Prices数据集,1990年的统计数据。引用[2]提到使用sklearn自带的加州房价数据,首次运行会下载,建议处理成csv保存。因此,我需要确保代码中正确加载数据,无论是从sklearn直接获取还是从本地csv读取。
接下来,用户需要的是MLP的回归模型示例。MLP通常用神经网络库实现,比如TensorFlow/Keras或PyTorch,但考虑到用户可能希望简洁,使用Keras可能更合适,因为它的API较为友好。我需要导入必要的库,比如pandas、numpy、sklearn的模型选择和预处理工具,以及Keras的模型和层。
数据预处理是关键步骤。首先,需要加载数据。如果使用sklearn的数据集,可以用fetch_california_housing,然后保存为csv,但用户可能已经有了housing.csv,所以代码中应该包含从csv读取的部分作为备选。需要处理特征和标签,划分训练集和测试集,并进行标准化,因为神经网络对输入尺度敏感。
然后是构建MLP模型。这里需要确定层数、神经元数量、激活函数等。通常,回归任务会在输出层使用线性激活函数,隐藏层使用ReLU。需要编译模型,选择优化器和损失函数,比如Adam优化器和均方误差损失。
训练模型时,需要设置合适的epochs和batch_size,可能还要添加验证集来监控过拟合。之后评估模型性能,用测试集计算MSE或RMSE,并做预测的可视化,比如真实值 vs 预测值的散点图。
我还需要检查代码是否符合LaTeX格式要求,数学公式用$...$,独立公式用$$...$$。例如,提到损失函数时,写成均方误差$MSE = \frac{1}{n}\sum_{i=1}^n(y_i-\hat{y}_i)^2$。同时,确保回答结构清晰,分步骤讲解,并引用相关参考文献,如引用[1]和[2]。
用户可能的问题包括数据预处理的细节、模型调参、性能优化等,所以生成的相关问题要覆盖这些方面。例如,如何选择隐藏层和神经元数量,如何处理过拟合,数据标准化的重要性等。
最后,确保代码示例正确,没有语法错误,并建议用户保存数据集为csv,以便后续使用。同时,注意用户可能遇到的路径问题,在读取csv时可能需要调整路径。整个过程中,需要保持回答的中文,并自然融入引用标识。</think>以下是使用MLP(多层感知器)构建加州房价预测模型的示例代码,基于`housing.csv`数据集:
```python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 1. 数据加载与预处理
# 若使用sklearn自带数据集(首次需下载)
# from sklearn.datasets import fetch_california_housing
# housing = fetch_california_housing()
# df = pd.DataFrame(housing.data, columns=housing.feature_names)
# df['MedHouseVal'] = housing.target
# 若从本地csv读取(建议方式[^2])
df = pd.read_csv('housing.csv')
X = df.drop('MedHouseVal', axis=1).values
y = df['MedHouseVal'].values.reshape(-1,1)
# 数据标准化
scaler_X = StandardScaler()
scaler_y = StandardScaler()
X_scaled = scaler_X.fit_transform(X)
y_scaled = scaler_y.fit_transform(y)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_scaled, test_size=0.2, random_state=42)
# 2. 构建MLP模型
model = Sequential([
Dense(64, activation='relu', input_shape=(X_train.shape[1],)),
Dense(32, activation='relu'),
Dense(1) # 回归任务无需激活函数
])
model.compile(optimizer='adam', loss='mse')
# 3. 训练模型
history = model.fit(X_train, y_train,
epochs=100,
batch_size=32,
validation_split=0.2,
verbose=1)
# 4. 模型评估
mse = model.evaluate(X_test, y_test)
print(f'测试集MSE: {mse:.4f}')
# 5. 预测与反标准化
y_pred_scaled = model.predict(X_test)
y_pred = scaler_y.inverse_transform(y_pred_scaled)
y_true = scaler_y.inverse_transform(y_test)
```
$$ RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^n(y_i-\hat{y}_i)^2} $$
阅读全文
相关推荐

















