线性回归学习笔记
一、线性回归简介
1. 核心定义
线性回归是一种通过属性的线性组合进行预测的线性模型,核心目标是找到一条直线(二维)、一个平面(三维)或更高维的超平面,使模型的预测值与真实值之间的误差最小化。
2. 适用场景
适用于回归任务(预测连续型输出,如房价、销售额、温度等),例如通过“房屋大小”预测“房屋价格”,通过“房间数量”“面积”等多特征预测“波士顿房价”。
3. 模型数学形式
(1)单特征线性回归(简单线性回归)
仅含1个输入特征(如房屋大小),模型形式为:
f(x) = w_0 + w_1x
x:输入特征(如房屋大小);
w_0:截距(直线与y轴交点,也可写作b);
w_1:特征权重(直线斜率,反映特征对预测结果的影响程度);
f(x):模型预测值(如预测房价)。
(2)多特征线性回归(多元线性回归)
含d个输入特征(如房间数、面积、楼层等),模型的一般形式为:
f(x) = w_1x_1 + w_2x_2 + ... + w_dx_d + b
x_1, x_2, ..., x_d:d个输入特征的取值;
w_1, w_2, ..., w_d:对应特征的权重;
b:截距;
向量形式(简化表达):f(x) = \boldsymbol{w}^T\boldsymbol{x} + b(\boldsymbol{w}为权重向量,\boldsymbol{x}为特征向量,\boldsymbol{w}^T表示\boldsymbol{w}的转置)。
二、模型求解:最小二乘法
1. 核心思想
线性回归通过最小二乘法求解最优参数(w和b),其本质是最小化“均方误差”——均方误差对应“欧氏距离”,即找到一条直线/超平面,使所有样本到该直线/超平面的欧氏距离之和最小。
2. 误差函数(损失函数)
需最小化的误差函数(均方误差对应的总损失)为:
E(w,b) = \sum_{i=1}^{m} (y_i - f(x_i))^2 = \sum_{i=1}^{m} (y_i - (wx_i + b))^2
m:样本数量;
y_i:第i个样本的真实值;
f(x_i) = wx_i + b:第i个样本的预测值;
E(w,b):所有样本的“残差平方和”(预测值与真实值差值的平方和)。
3. 参数求解过程
求解w和b的过程称为“参数估计”,步骤如下:
1. 求导:对E(w,b)分别关于w和b求偏导数,得到误差随参数变化的趋势;
2. 令导数为0:偏导数为0时,误差函数E(w,b)取得最小值,据此解出最优参数:
最优权重w:w = \frac{\sum_{i=1}^{m} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{m} (x_i - \bar{x})^2}(\bar{x}为特征x的均值,\bar{y}为真实值y的均值);
最优截距b:b = \bar{y} - w\bar{x}。
三、线性回归的评估指标
1. 残差平方和(SSE/RSS)
定义:所有样本预测值与真实值差值的平方和,反映模型预测的总误差。
公式:SSE = \sum_{i=1}^{m} (y_i - \hat{y}_i)^2(\hat{y}_i为第i个样本的预测值);
特点:值越小,模型拟合效果越好;但受样本数量影响(样本越多,SSE可能越大),无法直接横向对比不同数据集的模型。
2. 均方误差(MSE)
定义:SSE的平均值,消除了样本数量的影响,更适合对比不同模型。
公式:MSE = \frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}_i)^2;
特点:值越小,模型拟合效果越好;单位是“真实值单位的平方”(如房价预测中,单位为“元²”),不够直观。
3. 决定系数(R^2)
定义:衡量模型对数据的解释能力,反映“模型能解释的变异占总变异的比例”,是最常用的评估指标。
公式:
R^2 = 1 - \frac{SSE}{SST} = 1 - \frac{\sum_{i=1}^{m} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{m} (y_i - \bar{y})^2}
SST:总平方和(真实值与真实值均值的差值平方和,反映数据本身的总变异);
简化形式:R^2 = 1 - \frac{MSE}{Var(y)}(Var(y)为真实值y的方差)。
特点:
取值范围:(-\infty, 1];
越接近1:模型拟合效果越好(模型能解释大部分数据变异);
等于1:模型完全拟合所有样本;
小于0:模型效果差于“直接用真实值均值预测”(此时模型无意义)。
四、线性回归代码实现(Python sklearn)
1. 核心类
sklearn.linear_model.LinearRegression():用于构建线性回归模型(支持单特征和多特征)。
2. 关键参数
参数 含义与取值
fit_intercept 是否计算模型截距():- True(默认):模型包含截距;- False:模型不包含截距(直线过原点),需确保数据已中心化。
normalize 是否在训练前对数据进行归一化:- False(默认):不归一化;- True:对特征进行归一化(均值为0、标准差为1),仅当fit_intercept=True时生效。
3. 课堂练习:波士顿房价预测
核心步骤(示例思路):
1. 加载数据:导入波士顿房价数据集(或类似房价数据集,含特征如房间数、距离市中心距离等,目标为房价);
2. 数据预处理:处理缺失值、标准化特征(可选,若特征量纲差异大);
3. 划分数据集:将数据分为训练集(用于训练模型)和测试集(用于评估模型);
4. 训练模型:用LinearRegression()拟合训练数据;
5. 模型评估:计算测试集的MSE、R^2等指标,判断模型效果。
示例代码框架:
from sklearn import linear_model
from sklearn.datasets import load_boston # 加载波士顿房价数据集(注意:部分版本需手动安装)
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
1. 加载数据
boston = load_boston()
X = boston.data # 特征(如房间数、面积等)
y = boston.target # 目标(房价)
2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
3. 初始化并训练模型
model = linear_model.LinearRegression(fit_intercept=True, normalize=False)
model.fit(X_train, y_train)
4. 预测与评估
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred) # 计算MSE
r2 = r2_score(y_test, y_pred) # 计算R²
print(f"均方误差(MSE):{mse:.2f}")
print(f"决定系数(R²):{r2:.2f}")
print(f"模型截距(b):{model.intercept_:.2f}")
print(f"特征权重(w):{model.coef_}")