监督学习-回归

监督学习-回归

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


线性回归

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

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回归拟合直线。
  • 多项式回归拟合曲线。
  • 岭回归的系数收缩效应明显。
相关推荐
我能坚持多久9 分钟前
C++的Vector学习:从功能探索到底层实现
开发语言·c++·学习
小王毕业啦16 分钟前
1990-2024年 省级-绿色金融指数(+文献)
大数据·人工智能·数据挖掘·数据分析·社科数据·实证分析·经管数据
小王毕业啦26 分钟前
1985.1-2026.1 世界各国经济政策不确定性指数(xlsx)
大数据·人工智能·数据挖掘·数据分析·社科数据·实证数据·经管数据
Jackyzhe26 分钟前
从零学习Kafka:生产者分区机制
分布式·学习·kafka
迷途之人不知返35 分钟前
List的学习
数据结构·c++·学习·list
三克的油1 小时前
YOLOV5数据学习
人工智能·学习·yolo
zhangrelay1 小时前
复盘《用智能大模型复盘课程博客停更案例》
笔记·学习
数据牧羊人的成长笔记1 小时前
分类算法的评价+KMeans聚类与降维算法+决策树与集成学习
人工智能·分类·数据挖掘
sjsjsbbsbsn1 小时前
RAG 基础学习总结
java·数据库·学习
FserSuN1 小时前
Git Worktree 使用学习
git·学习