一、线性回归概述
线性回归是一种预测数值型数据的监督学习算法。它假设目标变量(因变量)与一个或多个自变量之间存在线性关系。线性回归模型通过寻找最佳拟合线(在多维空间中为超平面),来预测目标变量的值。
二、线性回归模型的基本形式
线性回归模型的一般形式为:
y=w1x1+w2x2+⋯+wnxn+b
其中,y 是因变量,x1,x2,⋯,xn 是自变量,w1,w2,⋯,wn 是对应自变量的权重系数(也称为回归系数),b 是常数项(也称为截距)。为了简化表达,可以将上式写成向量形式:
y=w⊤x+b
其中,w=(w1,w2,⋯,wn) 是权重向量,x=(x1,x2,⋯,xn) 是自变量向量。
三、损失函数
在线性回归中,损失函数用于衡量模型预测值与实际值之间的差异。最常用的损失函数是均方误差(MSE, Mean Squared Error):
其中,N 是样本数量,yi 是第 i 个样本的实际值,y^i 是第 i 个样本的预测值。
四、参数估计
为了找到最佳的 ω 和 b,使得损失函数最小,我们可以采用多种方法,如最小二乘法、梯度下降法等。
- 最小二乘法:通过求解正规方程来直接找到最优解。
- 梯度下降法:通过迭代的方式,逐步调整 ω 和 b 的值,以最小化损失函数。
五、模型训练与评估
- 模型训练:
- 初始化 ω 和 b(随机或特定值)。
- 使用训练数据,通过梯度下降等方法更新 ω 和 b。
- 重复上述步骤,直到满足停止条件(如损失函数值小于某个阈值,或迭代次数达到上限)。
- 模型评估:
- 使用测试集数据评估模型的性能。
- 计算测试集上的损失函数值,如MSE。
- 还可以计算其他指标,如R-squared等
六、线性回归的优缺点
优点:
- 模型简单,易于理解和实现。
- 可解释性强,权重系数直接反映了自变量对因变量的影响程度。
- 计算速度快,特别是对于小规模和中等规模的数据集。
缺点:
- 对非线性关系的建模能力较弱。
- 对异常值敏感,容易受到极端值的影响。
- 在特征之间存在多重共线性时,模型的稳定性可能会受到影响。
七、Python实现
在Python中,我们可以使用NumPy和Matplotlib库来实现线性回归模型。以下是一个简单的示例:
import numpy as np | |
import matplotlib.pyplot as plt | |
# 示例数据 | |
x_data = [1.0, 2.0, 3.0] | |
y_data = [2.0, 4.0, 6.0] | |
# 定义线性模型 | |
def forward(x, w, b): | |
return w * x + b | |
# 定义损失函数 | |
def loss(x, y, w, b): | |
y_pred = forward(x, w, b) | |
return ((y_pred - y) ** 2).mean() | |
# 穷举法寻找最优w和b(这里仅对w进行穷举,b可以设为0简化问题) | |
w_list = [] | |
mse_list = [] | |
for w in np.arange(0.0, 4.1, 0.1): | |
mse = 0 | |
for x_val, y_val in zip(x_data, y_data): | |
y_pred = forward(x_val, w, 0) # 假设b=0 | |
mse += loss(x_val, y_val, w, 0) | |
mse /= len(x_data) | |
w_list.append(w) | |
mse_list.append(mse) | |
# 绘制损失函数图 | |
plt.plot(w_list, mse_list) | |
plt.ylabel('Loss') | |
plt.xlabel('w') | |
plt.show() |