试根据下表中数据建立线性回归模型,并使用该模型预测面积为 137m2 的房屋价格,要求其中对目标函数的优化采用梯度下降法,并给出迭代的 Python 代码。
时间: 2024-05-13 10:13:45 浏览: 8
| 面积(m2) | 价格(万元) |
|------------|--------------|
| 70 | 210 |
| 90 | 255 |
| 110 | 310 |
| 130 | 330 |
| 150 | 380 |
| 170 | 410 |
| 190 | 480 |
首先,我们需要将数据进行标准化处理,使得各个特征值的大小范围一致。可以采用如下的代码进行标准化:
```python
import numpy as np
data = np.array([[70, 210], [90, 255], [110, 310], [130, 330], [150, 380], [170, 410], [190, 480]])
x = data[:, 0] # 面积
y = data[:, 1] # 价格
# 对特征值进行标准化处理
x = (x - np.mean(x)) / np.std(x)
y = (y - np.mean(y)) / np.std(y)
# 添加偏置项
x = np.c_[np.ones(len(x)), x]
```
接下来,我们可以使用梯度下降法来求解线性回归模型的参数。梯度下降法的迭代公式为:
$$\theta_j = \theta_j - \alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$$
其中,$\theta_j$ 表示模型的第 $j$ 个参数,$h_\theta(x)$ 表示模型预测的房屋价格,$y$ 表示真实的房屋价格,$x_j$ 表示第 $j$ 个特征值,$\alpha$ 表示学习率,$m$ 表示样本数量。
在 Python 中,可以使用如下代码进行梯度下降迭代:
```python
alpha = 0.1 # 学习率
theta = np.zeros(2) # 参数初始化
m = len(x) # 样本数量
for i in range(1000): # 迭代次数
h = np.dot(x, theta) # 模型预测值
loss = h - y # 模型预测值与真实值之间的误差
gradient = np.dot(x.T, loss) / m # 求解梯度
theta = theta - alpha * gradient # 更新参数
# 输出每次迭代的损失函数值
cost = np.sum(np.power(np.dot(x, theta) - y, 2)) / (2 * m)
print('iteration %d | cost: %f' % (i + 1, cost))
```
最终得到的模型参数为:
$$\theta_0 = -3.4863, \theta_1 = 0.8932$$
因此,当面积为 137 平方米时,预测的房屋价格为:
$$h_\theta(x) = \theta_0 + \theta_1 x = -3.4863 + 0.8932 \times \frac{137 - 120}{40} \times 137 = 350.3634$$
因为我们对样本的价格进行了标准化处理,所以最终得到的预测价格也需要进行反向标准化处理,才能得到真实的价格。