梯度下降法实现线性回归预测房价
时间: 2023-08-31 22:10:38 浏览: 116
线性回归是一种经典的机器学习算法,用于预测一个连续型的输出值。在预测房价的问题中,我们可以使用线性回归来预测一个房子的价格,根据该房子的一些特征,如面积、房间数量、地理位置等等。
梯度下降法(Gradient Descent)是一种常用的优化算法,可以用来求解线性回归模型中的参数。其基本思想是在每一步中朝着当前位置的负梯度方向移动一定步长,从而逐渐逼近最优解。
下面是一个用梯度下降法实现线性回归预测房价的示例代码:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据集
data = pd.read_csv('housing.csv')
# 特征缩放
data = (data - data.mean()) / data.std()
# 添加偏置列
data.insert(0, 'Ones', 1)
# 转换为 Numpy 数组
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values.reshape(-1, 1)
# 初始化参数
theta = np.zeros((X.shape[1], 1))
# 定义代价函数
def compute_cost(X, y, theta):
m = len(y)
h = X.dot(theta)
J = 1 / (2 * m) * np.sum((h - y) ** 2)
return J
# 定义梯度下降函数
def gradient_descent(X, y, theta, alpha, num_iters):
m = len(y)
J_history = np.zeros(num_iters)
for i in range(num_iters):
h = X.dot(theta)
theta = theta - alpha / m * X.T.dot(h - y)
J_history[i] = compute_cost(X, y, theta)
return theta, J_history
# 设置超参数
alpha = 0.01
num_iters = 1000
# 运行梯度下降算法
theta, J_history = gradient_descent(X, y, theta, alpha, num_iters)
# 绘制代价函数曲线
plt.plot(np.arange(num_iters), J_history)
plt.xlabel('Iterations')
plt.ylabel('Cost')
plt.show()
# 预测房价
X_test = np.array([1, 0.5, 0.3, -0.1, 0.7, -0.2]).reshape(1, -1)
y_pred = X_test.dot(theta)
print('Predicted price:', y_pred[0][0])
```
在这段代码中,我们首先读取了一个房价数据集,并对其进行了特征缩放和偏置处理。然后,我们初始化了模型参数 $\theta$,并定义了代价函数和梯度下降函数。接着,我们设置了一些超参数,如学习率 $\alpha$ 和迭代次数 $num\_iters$,并运行了梯度下降算法,最后绘制了代价函数的曲线。最后,我们使用训练好的模型来预测一个房子的价格。
需要注意的是,这段代码仅仅是一个示例,实际运行时可能需要根据数据集的不同进行一些参数调整。
阅读全文