线性回归(Linear Regression)详解
一. 什么是线性回归?
线性回归是机器学习中最基础的监督学习算法之一,用于预测连续型目标变量。其核心思想是:找到自变量(特征)与因变量(目标)之间的线性关系,通过这条关系线来预测未知数据。
例如:
- 用房屋面积(自变量)预测房价(因变量)
- 用学习时长(自变量)预测考试分数(因变量)
- 用多个特征(如面积、卧室数量、位置)预测房价(多元线性回归)
二. 数学原理
2.1 假设函数
线性回归假设自变量与因变量的关系可表示为:
简单线性回归(单特征):
y=wx+b
其中,x 是自变量,y 是预测值,w 是权重(斜率),b 是偏置(截距)。多元线性回归(多特征):
y=w1x1+w2x2+...+wnxn+b
可简化为矩阵形式:y=WTX+b(W 是权重向量,X 是特征矩阵)。
2.2 损失函数
目标是找到最优的 w 和 b,使预测值与真实值的误差最小。常用均方误差(MSE) 作为损失函数:
Loss=n1∑i=1n(yi−y^i)2
其中,yi 是真实值,y^i 是预测值,n 是样本数量。
2.3 求解参数
通过最小化损失函数求解 w 和 b,常用方法:
- 正规方程:直接通过数学公式求解(适用于小数据集)。
- 梯度下降:通过迭代优化,逐步调整参数以降低损失(适用于大数据集)。
三. 线性回归的假设
线性回归的有效性依赖于以下假设:
- 自变量与因变量存在线性关系;
- 误差项(y−y^)之间相互独立;
- 误差项具有同方差性(方差恒定);
- 误差项服从正态分布。
四. 线性回归的优缺点
- 优点:
- 原理简单,解释性强(权重可直接反映特征影响)。
- 训练速度快,适合大规模数据。
- 缺点:
- 只能捕捉线性关系,无法处理非线性数据(需手动特征工程,如多项式转换)。
- 对异常值敏感,可能影响拟合效果。
五.scikit-learn的linear_model.LinearRegression方法
scikit-learn(简称 sklearn)是 Python 中最常用的机器学习库之一,其linear_model.LinearRegression
类提供了高效、易用的线性回归实现。下面详细介绍其核心功能、参数、方法及使用要点。
1. LinearRegression
核心功能
LinearRegression
实现了普通最小二乘法(Ordinary Least Squares, OLS) 线性回归,用于:
- 建模特征与连续目标变量的线性关系
- 支持单特征(简单线性回归)和多特征(多元线性回归)
- 通过最小化预测值与真实值的残差平方和求解参数
2. 核心参数详解
初始化LinearRegression
时可配置的关键参数:
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
fit_intercept |
bool | True | 是否计算模型的偏置项(截距b )。- True :模型包含截距(推荐,除非特征已中心化)- False :假设数据已中心化,不计算截距 |
normalize |
bool | False | 是否在拟合前对特征进行归一化(已过时,建议用StandardScaler 替代)。- True :对特征进行归一化(均值为 0,方差为 1) |
copy_X |
bool | True | 是否复制特征数据(避免修改原始数据) |
n_jobs |
int | None | 并行计算的线程数(用于大规模数据)。 - -1 :使用所有可用 CPU 核心 |
positive |
bool | False | 是否强制权重系数为非负数(适用于物理意义上权重不能为负的场景,如销量预测) |
3. 主要方法
LinearRegression
对象的核心方法:
方法 | 功能 |
---|---|
fit(X, y) |
训练模型,求解权重coef_ 和截距intercept_ 。- X :特征矩阵(形状(n_samples, n_features) )- y :目标变量(形状(n_samples,) ) |
predict(X) |
用训练好的模型预测新数据。 - 返回预测值(形状 (n_samples,) ) |
score(X, y) |
计算模型在X 和y 上的R2分数(决定系数),衡量模型拟合优度。- 范围:(−∞,1],越接近 1 拟合越好 |
get_params(deep=True) |
获取模型当前参数配置 |
set_params(**params) |
修改模型参数(如model.set_params(fit_intercept=False) ) |
4. 重要属性
训练后可访问的模型属性
属性 | 说明 |
---|---|
coef_ |
特征权重数组(形状(n_features,) ),对应公式中的w1,w2,...,wn |
intercept_ |
截距(标量),对应公式中的b |
rank_ |
特征矩阵的秩(用于判断多重共线性) |
singular_ |
特征矩阵的奇异值(用于诊断数据问题) |
5. 关键注意事项
数据预处理:
- 特征量纲差异大时,需先标准化(
StandardScaler
)或归一化,避免量纲影响权重 - 缺失值需先处理(如用
SimpleImputer
填充),否则模型会报错 - 异常值对线性回归影响大,可通过箱线图检测并处理
- 特征量纲差异大时,需先标准化(
多重共线性:
- 当特征间高度相关(如 "面积" 和 "房间数"),会导致权重不稳定
- 可通过方差膨胀因子(VIF)检测,或使用正则化方法(如 Ridge 回归)缓解
适用场景:
- 适合特征与目标存在线性关系的数据
- 不适合非线性关系(此时需用多项式回归或树模型)
与其他线性模型的区别:
LinearRegression
(OLS)无正则化,可能过拟合Ridge
:加入 L2 正则化,缓解过拟合Lasso
:加入 L1 正则化,可实现特征选择(部分权重为 0)