监督学习-回归

监督学习-回归

回归是监督学习中的一种重要方法,主要用于预测连续型目标变量。常见的回归方法包括线性回归、多项式回归和岭回归等,每种方法有其独特的应用场景和特点。


线性回归

线性回归是最基础的回归方法,假设目标变量与特征之间存在线性关系。其模型形式为:

y = \\beta_0 + \\beta_1 x_1 + \\beta_2 x_2 + \\dots + \\beta_n x_n + \\epsilon

其中,y 是目标变量,x_i 是特征变量,\\beta_i 是回归系数,\\epsilon 是误差项。学习的目标主要是学习公式中的\\beta_i\\epsilon,使其更接近训练数据。

线性回归通过最小化残差平方和(Residual Sum of Squares, RSS)来拟合数据:

\\min_{\\beta} \\sum_{i=1}\^n (y_i - \\hat{y}_i)\^2

其中真实值为 y_i ,模型预测值为

以下是使用 Python 绘制线性回归拟合效果的代码示例:

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 生成数据
X = np.random.rand(100, 1) * 10
y = 2 * X + 3 + np.random.randn(100, 1) * 2

# 拟合模型
model = LinearRegression()
model.fit(X, y)
y_pred = model.predict(X)

# 绘制图形
plt.scatter(X, y, color='blue', label='Data')
plt.plot(X, y_pred, color='red', label='Linear Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()

Lasso回归

Lasso回归(Least Absolute Shrinkage and Selection Operator)是一种线性回归的变体,通过引入L1正则化项实现特征选择和模型复杂度控制。其核心思想是在损失函数中加入回归系数的绝对值之和作为惩罚项,迫使部分系数趋近于零,从而自动筛选重要特征。

数学公式

Lasso回归的优化目标函数为: \\min_{\\beta} \\left( \\frac{1}{2n} \\sum_{i=1}\^{n} (y_i - X_i \\beta)\^2 + \\lambda \\sum_{j=1}\^{p} \|\\beta_j\| \\right) 其中:

  • y_i 为观测值;
  • X_i 为特征向量;
  • \\beta 为回归系数;
  • \\lambda 为正则化强度参数,控制稀疏性。

代码示例(Python)

以下示例使用sklearn库演示Lasso回归的效果,并与普通线性回归对比:

python 复制代码
import numpy as np
from sklearn.linear_model import Lasso, LinearRegression
from sklearn.datasets import make_regression
import matplotlib.pyplot as plt

# 生成模拟数据
X, y = make_regression(n_samples=100, n_features=10, noise=0.5, random_state=42)

# 训练模型
linear = LinearRegression().fit(X, y)
lasso = Lasso(alpha=0.5).fit(X, y)

# 对比系数
plt.figure(figsize=(10, 6))
plt.plot(linear.coef_, 'o', label='Linear Regression')
plt.plot(lasso.coef_, '^', label='Lasso Regression')
plt.xlabel('Feature Index')
plt.ylabel('Coefficient Value')
plt.legend()
plt.title('Coefficient Comparison: Linear vs Lasso')
plt.show()

效果说明

  • 特征选择:Lasso回归的系数图中,部分特征系数被压缩为零(稀疏性),而线性回归的系数通常全为非零。
  • 超参数调优 :通过调整alpha(即公式中的 \\lambda 可控制稀疏程度,较大的alpha会导致更多系数为零。
  • 适用场景:适用于高维数据或存在多重共线性的情况。

多项式回归

多项式回归通过引入特征的高次项来捕捉非线性关系。其模型形式为:

y = \\beta_0 + \\beta_1 x + \\beta_2 x\^2 + \\dots + \\beta_n x\^n + \\epsilon

学习的目标主要是学习公式中的\\beta_i\\epsilon,使其更接近训练数据。

多项式回归可以拟合更复杂的数据模式,但容易过拟合。

以下是多项式回归的代码示例:

python 复制代码
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline

# 生成非线性数据
X = np.random.rand(100, 1) * 10
y = 0.5 * X**2 + 2 * X + 3 + np.random.randn(100, 1) * 2

# 拟合多项式回归(二次)
poly_model = make_pipeline(PolynomialFeatures(degree=2), LinearRegression())
poly_model.fit(X, y)
y_poly_pred = poly_model.predict(X)

# 绘制图形
plt.scatter(X, y, color='blue', label='Data')
plt.plot(X, y_poly_pred, color='green', label='Polynomial Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()

岭回归

岭回归(Ridge Regression)是一种正则化方法,通过引入 L2 惩罚项防止过拟合。其优化目标为:

\\min_{\\beta} \\sum_{i=1}\^n (y_i - \\hat{y}_i)\^2 + \\alpha \\sum_{j=1}\^p \\beta_j\^2

其中,\\alpha 是正则化强度参数。学习的目标主要是学习公式中的\\alpha \\beta,使其更接近训练数据。

以下是岭回归的代码示例:

python 复制代码
from sklearn.linear_model import Ridge

# 生成数据
X = np.random.rand(100, 10) * 10
y = np.dot(X, np.array([1, 2, 3, 0.5, 0, 0, 0, 0, 0, 0])) + 3 + np.random.randn(100) * 2

# 拟合岭回归
ridge_model = Ridge(alpha=1.0)
ridge_model.fit(X, y)
y_ridge_pred = ridge_model.predict(X)

# 绘制系数对比(线性回归 vs 岭回归)
linear_model = LinearRegression()
linear_model.fit(X, y)

plt.figure(figsize=(10, 5))
plt.plot(linear_model.coef_, 'o-', label='Linear Regression')
plt.plot(ridge_model.coef_, 's-', label='Ridge Regression')
plt.xlabel('Coefficient Index')
plt.ylabel('Coefficient Value')
plt.legend()
plt.show()

不同回归方法的特点

  1. 线性回归:简单高效,但对非线性数据拟合能力有限。
  2. Lasso回归:在线性回归基础上加入L1正则化,能自动进行特征选择(部分系数压缩为零),适合高维稀疏数据。
  3. 多项式回归:可以拟合非线性数据,但容易过拟合,尤其在多项式阶数较高时。
  4. 岭回归:通过引入L2正则化减少过拟合风险,适合高维数据或特征间存在多重共线性的情况。

通过代码生成的图形可以直观展示不同回归方法的拟合效果:

  • 线性回归、Lasso回归拟合直线。
  • 多项式回归拟合曲线。
  • 岭回归的系数收缩效应明显。
相关推荐
AI前沿晓猛哥2 小时前
死亡搁浅启动报错msvcp140.dll怎么修复?2026最新安全解决方法
数据挖掘
早睡早起好好code2 小时前
Qwen2.5-VL研究_待完善...
图像处理·人工智能·笔记·深度学习·学习
AI成长日志2 小时前
【datawhale】hello agents开源课程第1章学习记录:初识智能体
学习·开源·github
cjy0001112 小时前
Spring学习——新建module模块
java·学习·spring
-Springer-3 小时前
STM32 学习 —— 个人学习笔记9-1(USART串口协议 & 串口发送及接收数据)
笔记·stm32·学习
_李小白3 小时前
【OSG学习笔记】Day 1: OpenSceneGraph(OSG)安装指南
笔记·学习
_下雨天.3 小时前
LNMP架构学习笔记
笔记·学习·架构
AI猫站长4 小时前
快讯|智谱GLM-5-Turbo实测:面向OpenClaw深度优化,响应提速60%,token消耗减少17.8%
大数据·人工智能·数据挖掘·具身智能·灵心巧手