当前位置: 首页 > news >正文

线性回归原理与进阶

线性回归是机器学习和统计学中的基础工具,能直观呈现变量关系,也是复杂模型的基石,在预测房价、分析股票等场景中应用广泛。

线性回归基础原理

线性关系假设

  • 一元线性回归:y = \beta_0 + \beta_1x + \epsilon,其中y为因变量,x为自变量,\beta_0是截距,\beta_1是斜率,\epsilon是误差项。
  • 多元线性回归:y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \cdots + \beta_nx_n + \epsilonx_1x_n为多个自变量,\beta_1\beta_n是对应系数。

参数估计 - 最小二乘法

最小二乘法旨在最小化残差平方和SSR = \sum_{i=1}^{m} (y_i - \hat{y}_i)^2

一元线性回归参数闭式解:

\hat{\beta}_1 = \frac{\sum_{i=1}^{m} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{m} (x_i - \bar{x})^2}\hat{\beta}_0 = \bar{y} - \hat{\beta}_1\bar{x}

代码实现:

import numpy as npdef linear_regression(x, y):m = len(x)x_mean, y_mean = np.mean(x), np.mean(y)numerator = np.sum((x - x_mean) * (y - y_mean))denominator = np.sum((x - x_mean) **2)beta1 = numerator / denominatorbeta0 = y_mean - beta1 * x_meanreturn beta0, beta1

模型评估指标

  • MSE:\frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}_i)^2
  • RMSE:\sqrt{MSE}
  • MAE:\frac{1}{m} \sum_{i=1}^{m} |y_i - \hat{y}_i|
  • \(R^2\):1 - \frac{\sum_{i=1}^{m} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{m} (y_i - \bar{y})^2}

代码实现:

def calculate_metrics(y_true, y_pred):mse = np.mean((y_true - y_pred)** 2)rmse = np.sqrt(mse)mae = np.mean(np.abs(y_true - y_pred))ss_total = np.sum((y_true - np.mean(y_true)) **2)ss_residual = np.sum((y_true - y_pred)** 2)r2 = 1 - (ss_residual / ss_total)return mse, rmse, mae, r2

线性回归进阶

处理多重共线性

  • 检测:计算自变量相关系数或方差膨胀因子VIF_j = \frac{1}{1 - R_j^2}VIF_j > 10时多重共线性严重)。
  • 解决:删除高度相关变量、主成分分析、正则化回归。

VIF 计算代码:

from sklearn.linear_model import LinearRegressiondef calculate_vif(X):vif = []for i in range(X.shape[1]):X_rest = np.delete(X, i, axis=1)X_i = X[:, i]lr = LinearRegression()lr.fit(X_rest, X_i)r2 = lr.score(X_rest, X_i)vif.append(1 / (1 - r2))return np.array(vif)

正则化回归

  • 岭回归:损失函数含\(L_2\)正则化,L(\beta) = \sum (y_i - \hat{y}_i)^2 + \lambda \sum \beta_j^2,缓解过拟合和多重共线性。
from sklearn.linear_model import Ridgeridge = Ridge(alpha=0.1)
  • Lasso 回归:损失函数含\(L_1\)正则化,L(\beta) = \sum (y_i - \hat{y}_i)^2 + \lambda \sum |\beta_j|,可实现特征选择。
from sklearn.linear_model import Lassolasso = Lasso(alpha=0.01)

模型诊断与改进

  • 残差分析:通过残差图检查线性关系、误差独立性和方差齐性。
  • 过拟合与欠拟合:过拟合可通过增加数据、交叉验证解决;欠拟合可增加模型复杂度、进行特征工程。

残差图绘制代码:

import matplotlib.pyplot as pltlr = LinearRegression()lr.fit(X_train, y_train)y_pred = lr.predict(X_test)residuals = y_test - y_predplt.scatter(y_pred, residuals)plt.axhline(y=0, color='r', linestyle='--')plt.show()

交叉验证代码:

from sklearn.model_selection import cross_val_scorelr = LinearRegression()scores = cross_val_score(lr, X, y, cv=5, scoring='neg_mean_squared_error')mse_scores = -scores

http://www.dtcms.com/a/304664.html

相关文章:

  • MySQL数据库 mysql常用命令
  • pvc怎么扩容
  • 深入解析Java元注解与运行时处理
  • Linux之网络部分-应用层协议 HTTP
  • 【RK3588部署yolo】算法篇
  • StackingClassifier参数详解与示例
  • 博创软件数智通OA平台:高效协同,安全办公新选择
  • 深度学习 目标检测常见指标和yolov1分析
  • Xilinx高性能低延时PCIe-DMA控制器IP,SGDMA,QDMA,RDMA,CDMA,V4L2驱动,视频采集、AD采集
  • ubuntu:运行gcfsd-admin守护进程需要认证,解决方法
  • Python 程序设计讲义(28):字符串的用法——格式化字符串:format()方法
  • python中的 @dataclass
  • Java函数式接口深度解析与应用
  • 机器学习笔记(四)——聚类算法KNN、Kmeans、Dbscan
  • 苏州工作机会:迈为股份子公司宸微半导体设备招聘技术文档工程师
  • 2025年AI大模型产业化技术突破,AI 大模型成本骤降 95%?
  • vulhub 02-Breakout靶场攻略
  • Android系统开发 在Android10版本的Framework中添加系统服务
  • 高级机器学习
  • Android 中 实现折线图自定义控件
  • BGP高级特性之ORF
  • spring 使用三级缓存解决循环依赖详解
  • 09 RK3568 Debian11 ES8388 模拟音频输出
  • 【腾讯云】EdgeOne免费版实现网站加速与安全防护
  • AI定义2025世界人工智能大会,腾讯/微美全息立足浪潮催生开源模型生态产业
  • 飞书 —— 多维表格 —— AI生成
  • 【术语扫盲】MCU与MPU
  • Spring框架中自定义标签的解析过程
  • 关于“高帧率放大了模型对位置噪声的敏感性”的理解
  • Kubernetes 全面解析:从基础设施变革到核心架构详解