分别基于最小二乘法和梯度下降法实现书上小花数量预测的线性回归算法(实现书上代码3-1
时间: 2024-03-08 08:48:28 浏览: 21
好的,我来为您解答。
首先,最小二乘法和梯度下降法都是线性回归算法的常见求解方法之一。它们的目标都是最小化预测值与真实值之间的平均误差,即最小化损失函数。下面我将分别给出两种方法的实现过程。
1. 最小二乘法实现线性回归
最小二乘法是一种基于最小化残差平方和的线性回归算法,它的数学推导可以参考统计学习方法中的第三章。在这里,我们直接给出最小二乘法的实现代码。
```python
import numpy as np
class LinearRegression:
def __init__(self):
self.w = None
def fit(self, X, y):
X = np.hstack((np.ones((X.shape[0], 1)), X))
self.w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
def predict(self, X):
X = np.hstack((np.ones((X.shape[0], 1)), X))
return X.dot(self.w)
```
在上述代码中,fit方法中的X为输入数据,y为对应的真实值。在实现中,我们将X的第一列加上了全为1的一列,以便于计算截距项。然后,我们直接调用numpy的线性代数库求解w的最优解。最后,predict方法用于对新的数据进行预测,其中同样需要将输入数据的第一列加上全为1的一列。
2. 梯度下降法实现线性回归
梯度下降法是一种基于不断迭代更新权重的方法,通过最小化损失函数来求解线性回归的最优解。其数学推导可以参考统计学习方法中的第四章。下面是梯度下降法的实现代码。
```python
import numpy as np
class LinearRegression:
def __init__(self, lr=0.01, max_iter=1000):
self.lr = lr
self.max_iter = max_iter
self.w = None
def fit(self, X, y):
X = np.hstack((np.ones((X.shape[0], 1)), X))
self.w = np.zeros(X.shape[1])
for i in range(self.max_iter):
grad = X.T.dot(X.dot(self.w) - y) / X.shape[0]
self.w -= self.lr * grad
def predict(self, X):
X = np.hstack((np.ones((X.shape[0], 1)), X))
return X.dot(self.w)
```
在上述代码中,fit方法中的lr为学习率,max_iter为最大迭代次数,X为输入数据,y为对应的真实值。在实现中,我们同样将X的第一列加上了全为1的一列,以便于计算截距项。然后,我们通过不断迭代更新权重w来最小化损失函数,其中grad为损失函数对权重的梯度。最后,predict方法用于对新的数据进行预测,其中同样需要将输入数据的第一列加上全为1的一列。
至此,我已经为您分别基于最小二乘法和梯度下降法实现了书上小花数量预测的线性回归算法。如有疑问,欢迎继续追问。