梯度下降法预测波士顿房价
时间: 2023-06-20 16:07:32 浏览: 66
波士顿房价预测是一个经典的回归问题。梯度下降法是一种常用的优化算法,可以用于训练机器学习模型。下面是使用梯度下降法预测波士顿房价的基本步骤:
1. 数据预处理:对数据进行清洗、归一化等处理,使得数据更易于被模型学习。
2. 定义模型:选择一个适当的模型结构,并定义模型的参数。
3. 定义损失函数:选择一个适当的损失函数来衡量模型的预测结果与真实值之间的差距。
4. 训练模型:使用训练数据集来训练模型,通过梯度下降法不断调整模型参数,使得模型的预测结果更加接近真实值。
5. 模型评估:使用测试数据集来评估模型的预测能力,进一步优化模型参数。
以下是一份使用梯度下降法预测波士顿房价的 Python 代码示例:
```python
import numpy as np
import pandas as pd
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
# 加载波士顿房价数据集
boston = load_boston()
X, y = boston.data, boston.target
# 训练集和测试集的划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据归一化
mean = X_train.mean(axis=0)
std = X_train.std(axis=0)
X_train = (X_train - mean) / std
X_test = (X_test - mean) / std
# 定义模型
def predict(X, w, b):
return np.dot(X, w) + b
# 定义损失函数
def mse_loss(y_true, y_pred):
return np.mean(np.square(y_true - y_pred))
# 定义梯度计算函数
def compute_gradient(X, y_true, y_pred):
n = len(X)
dw = -2/n * np.dot(X.T, y_true - y_pred)
db = -2/n * np.sum(y_true - y_pred)
return dw, db
# 模型训练
lr = 0.01 # 学习率
n_epochs = 1000 # 迭代次数
w = np.random.randn(X_train.shape[1]) # 初始化权重
b = 0 # 初始化偏差
for epoch in range(n_epochs):
y_pred = predict(X_train, w, b)
loss = mse_loss(y_train, y_pred)
dw, db = compute_gradient(X_train, y_train, y_pred)
w -= lr * dw
b -= lr * db
if epoch % 100 == 0:
print(f"Epoch {epoch}, Train loss: {loss:.4f}")
# 模型评估
y_pred = predict(X_test, w, b)
test_loss = mse_loss(y_test, y_pred)
print(f"Test loss: {test_loss:.4f}")
```
这份代码使用了随机梯度下降法(SGD)来更新模型参数,每次迭代都随机选择一个样本来计算梯度。在每个 epoch 结束时,打印出训练集的损失,并使用测试集来评估模型的泛化能力。