不使用sklearn库
时间: 2023-06-14 16:05:47 浏览: 86
不使用sklearn推演决策树
好的,让我们来实现一个简单的线性回归模型。假设我们有一个数据集,其中包含了一些房屋的面积和价格信息。我们想要通过这些数据来训练一个线性回归模型,该模型可以根据房屋的面积来预测价格。
我们可以使用梯度下降算法来训练这个模型。下面是代码实现的步骤:
1. 定义模型的参数:我们需要定义一个权重向量w和一个偏置b,它们的初始值可以随机初始化。
2. 定义损失函数:我们可以使用均方误差函数来作为损失函数。
3. 计算梯度:我们需要计算损失函数关于w和b的梯度,以便更新它们的值。
4. 更新参数:我们可以使用梯度下降算法来更新模型的参数。
5. 训练模型:我们可以使用训练数据来训练模型,不断迭代更新参数,直到损失函数的值收敛或达到最大迭代次数。
6. 预测结果:使用训练好的模型来预测新的数据。
下面是代码的实现:
```python
import numpy as np
class LinearRegression:
def __init__(self, lr=0.01, n_iters=1000):
self.lr = lr
self.n_iters = n_iters
self.w = None
self.b = None
def fit(self, X, y):
# 初始化参数
n_samples, n_features = X.shape
self.w = np.zeros(n_features)
self.b = 0
# 梯度下降算法
for _ in range(self.n_iters):
y_pred = np.dot(X, self.w) + self.b
dw = (1 / n_samples) * np.dot(X.T, (y_pred - y))
db = (1 / n_samples) * np.sum(y_pred - y)
self.w -= self.lr * dw
self.b -= self.lr * db
def predict(self, X):
y_pred = np.dot(X, self.w) + self.b
return y_pred
```
下面是如何使用这个模型来训练数据:
```python
import matplotlib.pyplot as plt
# 生成数据集
X = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168], [9.779], [6.182], [7.59], [2.167], [7.042], [10.791], [5.313], [7.997], [3.1]])
y = np.array([1.7, 2.76, 2.09, 3.19, 1.694, 1.573, 3.366, 2.596, 2.53, 1.221, 2.827, 3.465, 1.65, 2.904, 1.3])
# 训练模型
model = LinearRegression(lr=0.01, n_iters=1000)
model.fit(X, y)
# 预测结果
y_pred = model.predict(X)
# 绘制结果
plt.scatter(X, y)
plt.plot(X, y_pred, color='red')
plt.show()
```
这里我们使用了matplotlib库来绘制结果。首先,我们生成了一个包含15个样本的数据集,其中每个样本都包含一个房屋的面积和价格。然后,我们使用这个数据集来训练模型,并使用训练好的模型来预测所有样本的价格。最后,我们使用matplotlib库将训练数据和预测结果可视化。
阅读全文