用numpy写梯度下降算法和多元函数线性回归模型预测房价代码
时间: 2024-04-11 14:26:14 浏览: 159
当使用NumPy编写梯度下降算法和多元函数线性回归模型预测房价的代码时,我们需要先定义损失函数和梯度函数,然后进行迭代更新参数。以下是一个示例代码:
```python
import numpy as np
# 定义损失函数
def loss_function(X, y, w):
m = len(y)
predictions = np.dot(X, w)
loss = np.sum((predictions - y) ** 2) / (2 * m)
return loss
# 定义梯度函数
def gradient_function(X, y, w):
m = len(y)
predictions = np.dot(X, w)
gradient = np.dot(X.T, (predictions - y)) / m
return gradient
# 梯度下降算法
def gradient_descent(X, y, learning_rate, num_iterations):
m, n = X.shape
w = np.zeros(n)
losses = []
for i in range(num_iterations):
gradient = gradient_function(X, y, w)
w -= learning_rate * gradient
# 计算损失函数
loss = loss_function(X, y, w)
losses.append(loss)
if (i+1) % 100 == 0:
print(f"Iteration {i+1}, Loss: {loss}")
return w, losses
# 生成训练数据
np.random.seed(0)
X = np.random.rand(100, 3)
w_true = np.array([2, 3, 4])
y = np.dot(X, w_true) + np.random.randn(100)
# 添加偏置项
X = np.concatenate((np.ones((100, 1)), X), axis=1)
# 设置学习率和迭代次数
learning_rate = 0.01
num_iterations = 1000
# 进行梯度下降训练
w_final, losses = gradient_descent(X, y, learning_rate, num_iterations)
# 输出最终参数和损失
print("Final weights:", w_final)
print("Final loss:", losses[-1])
```
在上述代码中,我们首先定义了损失函数 `loss_function` 和梯度函数 `gradient_function`。然后,我们使用 `gradient_descent` 函数进行梯度下降训练,其中包括指定学习率和迭代次数。最后,我们输出最终的参数和损失。
需要注意的是,上述代码中使用了随机生成的训练数据作为示例,实际应用时需要替换为真实的房价数据集。另外,为了进行多元函数线性回归,我们添加了偏置项(全为1的列)到特征矩阵 `X` 中。
阅读全文