生成任意多元数据集,使用numpy实现线性回归模型,代码要求使用向量化数据实现,并写出推导过程
时间: 2024-09-14 15:17:09 浏览: 16
在Python中,我们可以使用NumPy库来创建随机数据集并构建线性回归模型。NumPy非常适合处理数值计算,包括矩阵运算,这对于实现向量化操作非常关键。
首先,让我们导入必要的库:
```python
import numpy as np
from sklearn.model_selection import train_test_split
```
接下来,我们将生成一个简单的二维数据集,包含自变量(X)和因变量(y),假设它们之间存在线性关系:
```python
# 创建随机数据集
np.random.seed(0) # 设置随机种子保证结果可复现
n_samples = 100
slope = 2
intercept = 5
X = np.random.rand(n_samples, 1) # 随机均匀分布
y = slope * X + intercept + np.random.randn(n_samples, 1) # 线性关系加上噪声
# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
现在我们准备创建一个简单的线性回归模型,使用NumPy的dot函数来进行矩阵乘法,实现向量化:
```python
class LinearRegression:
def __init__(self):
self.weights = None
self.bias = None
def fit(self, X, y):
# 将X添加偏置项
X_with_bias = np.c_[X, np.ones((X.shape[0], 1))]
# 使用最小二乘法求解最优权重
self.weights = np.linalg.inv(X_with_bias.T @ X_with_bias) @ X_with_bias.T @ y
self.bias = self.weights[-1] # 最后一个元素是偏置项
def predict(self, X):
# 同样添加偏置项并预测
X_with_bias = np.c_[X, np.ones((X.shape[0], 1))]
return X_with_bias @ self.weights[:-1] + self.bias # 截掉最后的偏置项
model = LinearRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
```
推导过程:
- **最小二乘法**:通过寻找使得误差平方和最小的权重和偏置,即找到一条直线使得训练样本点到这条直线的距离之和最小。
- **加偏置项**:在特征向量中添加一个常数列1,这是因为线性回归模型需要考虑截距项。
- **矩阵乘法**:`X_with_bias.T @ X_with_bias` 计算设计矩阵的转置与自身相乘得到协方差矩阵;`X_with_bias.T @ y` 计算目标变量y与设计矩阵的乘积,用于计算残差平方和。