机器学习之线性回归

一、线性回归基本概念

1. 定义

线性回归通过线性方程(一次函数)来描述一个或多个自变量(X)与因变量(y)之间的关系:

y = β₀ + β₁X₁ + β₂X₂ + ... + βₙXₙ + ε

其中:

  • y:因变量(目标变量)

  • X₁, X₂,..., Xₙ:自变量(特征)

  • β₀:截距项(偏置)

  • β₁, β₂,..., βₙ:回归系数(权重)

  • ε:误差项(随机扰动)

2. 类型

  • 简单线性回归:只有一个自变量

    y = β₀ + β₁X + ε
  • 多元线性回归:有多个自变量

    y = β₀ + β₁X₁ + β₂X₂ + ... + βₙXₙ + ε

二、模型假设

线性回归的有效性依赖于以下经典假设:

  1. 线性关系:自变量与因变量存在线性关系

  2. 误差项独立性:误差项之间相互独立(无自相关)

  3. 误差项同方差性:误差项的方差恒定

  4. 误差项正态分布:误差项服从均值为0的正态分布

  5. 无多重共线性:自变量之间没有高度相关性

  6. 无内生性:自变量与误差项不相关

三、参数估计方法

1. 最小二乘法(Ordinary Least Squares, OLS)

最常用的参数估计方法,目标是使残差平方和(RSS)最小化:

RSS = Σ(yᵢ - ŷᵢ)² = Σ(yᵢ - (β₀ + β₁X₁ + ... + βₙXₙ))²

求解过程

  1. 将问题表示为矩阵形式:

    y = Xβ + ε
  2. 最小化目标函数:

    argmin(||y - Xβ||²)
  3. 求解正规方程(Normal Equation)得到解析解:

    β = (XᵀX)⁻¹Xᵀy

2. 梯度下降法(Gradient Descent)

当特征维度很高(XᵀX计算代价大)时使用迭代方法:

# 伪代码
初始化 β
while 未收敛:
    计算梯度: ∇β = -Xᵀ(y - Xβ)
    更新参数: β = β - α∇β  # α为学习率

四、模型评估指标

1. 回归评估指标

  • 均方误差(MSE)

    MSE = (1/n)Σ(yᵢ - ŷᵢ)²
  • 均方根误差(RMSE)

    RMSE = √MSE
  • 平均绝对误差(MAE)

    MAE = (1/n)Σ|yᵢ - ŷᵢ|
  • R²决定系数

    R² = 1 - RSS/TSS = 1 - Σ(yᵢ-ŷᵢ)²/Σ(yᵢ-ȳ)²

    (取值范围[0,1],越接近1说明模型解释力越强)

2. 统计检验

  • t检验:检验单个系数是否显著不为0

  • F检验:检验所有系数是否联合显著

  • DW检验:检验残差自相关(Durbin-Watson)

五、线性回归的Python实现

1. 使用NumPy手动实现

import numpy as np

class LinearRegression:
    def __init__(self):
        self.coef_ = None  # 系数(β₁...βₙ)
        self.intercept_ = None  # 截距(β₀)
    
    def fit(self, X, y):
        # 添加截距项
        X = np.insert(X, 0, 1, axis=1)
        
        # 计算参数: β = (XᵀX)⁻¹Xᵀy
        XTX = np.dot(X.T, X)
        XTX_inv = np.linalg.inv(XTX)
        XTy = np.dot(X.T, y)
        beta = np.dot(XTX_inv, XTy)
        
        self.intercept_ = beta[0]
        self.coef_ = beta[1:]
    
    def predict(self, X):
        return self.intercept_ + np.dot(X, self.coef_)

# 使用示例
if __name__ == "__main__":
    # 示例数据
    X = np.array([[1], [2], [3], [4], [5]])
    y = np.array([2, 4, 5, 4, 5])
    
    # 训练模型
    lr = LinearRegression()
    lr.fit(X, y)
    
    # 预测
    print("Coefficients:", lr.coef_)
    print("Intercept:", lr.intercept_)
    print("Prediction for X=6:", lr.predict(np.array([[6]])))

2. 使用scikit-learn实现

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_diabetes

# 加载数据
data = load_diabetes()
X, y = data.data, data.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建并训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估
print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)
print("MSE:", mean_squared_error(y_test, y_pred))
print("R²:", r2_score(y_test, y_pred))

六、线性回归的优化与扩展

1. 正则化方法

  • 岭回归(Ridge Regression):L2正则化

    argmin(||y - Xβ||² + α||β||²)
  • Lasso回归:L1正则化

    argmin(||y - Xβ||² + α||β||₁)

    (具有特征选择能力)

  • 弹性网络(Elastic Net):L1和L2正则化结合

    argmin(||y - Xβ||² + α₁||β||₁ + α₂||β||²)

2. 多项式回归

通过添加特征的高次项来拟合非线性关系:

y = β₀ + β₁X + β₂X² + ... + βₙXⁿ

实现示例:

from sklearn.preprocessing import PolynomialFeatures

# 将特征转换为多项式特征
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)

# 使用线性回归拟合
model = LinearRegression()
model.fit(X_poly, y)

3. 鲁棒回归

对异常值不敏感的回归方法:

  • Huber回归

  • RANSAC回归

七、线性回归的局限性

  1. 线性假设:只能捕捉线性关系,无法处理复杂非线性模式

  2. 对异常值敏感:异常值会显著影响模型参数

  3. 多重共线性问题:当特征高度相关时,估计不可靠

  4. 需要完整数据:不能自动处理缺失值

  5. 高维限制:当特征数量多于样本数量时(XᵀX不可逆)

八、实际应用注意事项

  1. 数据预处理

    • 特征标准化/归一化(特别是使用正则化时)

    • 处理缺失值

    • 处理分类变量(独热编码等)

  2. 特征工程

    • 添加交互项

    • 创建多项式特征

    • 特征选择(减少多重共线性)

  3. 模型诊断

    • 检查残差图(应随机分布)

    • 检查Q-Q图(检验正态性)

    • 检查方差膨胀因子(VIF)检测多重共线性

  4. 变量转换

    • 对数转换处理非线性关系

    • Box-Cox转换处理非正态分布

九、线性回归的应用场景

  1. 经济学:预测GDP、物价指数等

  2. 金融:股票价格预测、风险评估

  3. 市场营销:销售预测、广告效果分析

  4. 医学:疾病风险预测、药物反应分析

  5. 工程:质量控制、工艺优化

  6. 社会科学:人口增长预测、教育成效分析

十、线性回归与其他算法的关系

  1. 与逻辑回归:逻辑回归是线性回归加上sigmoid函数,用于分类问题

  2. 与神经网络:单层神经网络等价于线性回归

  3. 与SVM:线性SVM可以看作是一种特殊形式的线性回归

  4. 与决策树:决策树可以捕捉线性回归无法处理的复杂非线性关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值