线性回归--梯度下降实现波士顿房价拟合曲线
时间: 2023-05-26 22:07:31 浏览: 148
首先,我们需要准备数据集。这里我们使用sklearn中的波士顿房价数据集。代码如下:
```python
from sklearn.datasets import load_boston
import numpy as np
data = load_boston()
X = data["data"]
y = data["target"]
```
其中,`X`是13个特征的向量,`y`是相应的房价。下一步是对数据进行归一化处理,保证特征权重的一致性。
```python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(X)
```
接下来,我们构建线性回归模型,使用梯度下降法进行训练。具体实现过程如下:
```python
class LinearRegression:
def __init__(self, alpha=0.01, iterations=1000):
self.alpha = alpha # 学习率
self.iterations = iterations # 迭代次数
def fit(self, X, y):
m, n = X.shape
self.theta = np.zeros(n+1) # 初始化权重
X = np.insert(X, 0, 1, axis=1) # 添加截距项
for i in range(self.iterations):
h = np.dot(X, self.theta) # 计算预测值
loss = h - y # 计算误差
gradient = np.dot(X.T, loss) / m # 计算梯度
self.theta -= self.alpha * gradient # 更新权重
def predict(self, X):
X = np.insert(X, 0, 1, axis=1) # 添加截距项
return np.dot(X, self.theta) # 返回预测值
```
在以上代码中,`fit`方法用来训练模型,`predict`方法用来进行预测。使用该模型对波士顿房价数据进行训练和预测,代码如下:
```python
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
lr = LinearRegression(alpha=0.01, iterations=10000)
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)
from sklearn.metrics import mean_squared_error
print("Mean squared error: %.2f" % mean_squared_error(y_test, y_pred))
```
最终,我们可以得到预测结果的均方误差(Mean squared error)。通过不断调整学习率等超参数,就可以得到更好的模型预测效果。