机器学习笔记二-回归

回归是统计学和机器学习中的一种基本方法,用于建模变量之间的关系,特别是用一个或多个自变量(输入变量)来预测一个因变量(输出变量)的值。回归分析广泛应用于预测、趋势分析和关联研究中。根据目标和数据的性质,可以使用不同类型的回归方法。

1. 回归的基本概念

  • 自变量(Independent Variable): 也称为预测变量、解释变量,是模型中的输入变量,用于预测或解释因变量的变化。
  • 因变量(Dependent Variable): 也称为响应变量,是模型中的输出变量,是自变量的函数,并且我们试图对其进行预测或解释。
  • 回归系数(Regression Coefficients): 表示自变量对因变量的影响程度。在简单线性回归中,回归系数就是斜率。

2. 常见的回归类型

2.1 线性回归(Linear Regression):
  • 简单线性回归 : 只有一个自变量和一个因变量,回归方程为 y = β 0 + β 1 x + ϵ y = \beta_0 + \beta_1 x + \epsilon y=β0+β1x+ϵ,其中 β 0 \beta_0 β0 是截距, β 1 \beta_1 β1 是斜率, ϵ \epsilon ϵ 是误差项。

    python 复制代码
    from sklearn.linear_model import LinearRegression
    
    model = LinearRegression()
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
  • 多元线性回归 : 包含多个自变量,回归方程为 y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n + ϵ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n + \epsilon y=β0+β1x1+β2x2+⋯+βnxn+ϵ。

    python 复制代码
    model = LinearRegression()
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
  • 优点:

    • 简单易解释。
    • 在自变量和因变量呈线性关系时效果较好。
  • 缺点:

    • 假设自变量和因变量之间是线性关系,可能不适合复杂数据。
    • 对多重共线性敏感。
2.2 岭回归(Ridge Regression):
  • 在线性回归的基础上引入了 ( L2 ) 正则化项,防止模型过拟合。回归方程为 y = β 0 + ∑ i = 1 n β i x i + λ ∑ i = 1 n β i 2 y = \beta_0 + \sum_{i=1}^{n}\beta_i x_i + \lambda \sum_{i=1}^{n}\beta_i^2 y=β0+∑i=1nβixi+λ∑i=1nβi2。

    python 复制代码
    from sklearn.linear_model import Ridge
    
    ridge = Ridge(alpha=1.0)
    ridge.fit(X_train, y_train)
    y_pred = ridge.predict(X_test)
  • 优点:

    • 减少过拟合,提高模型的泛化能力。
  • 缺点:

    • 仍然假设线性关系。
2.3 Lasso回归(Lasso Regression):
  • 引入 ( L1 ) 正则化项,会导致部分回归系数缩小到零,从而实现特征选择。回归方程为 y = β 0 + ∑ i = 1 n β i x i + λ ∑ i = 1 n ∣ β i ∣ y = \beta_0 + \sum_{i=1}^{n}\beta_i x_i + \lambda \sum_{i=1}^{n}|\beta_i| y=β0+∑i=1nβixi+λ∑i=1n∣βi∣。

    python 复制代码
    from sklearn.linear_model import Lasso
    
    lasso = Lasso(alpha=0.1)
    lasso.fit(X_train, y_train)
    y_pred = lasso.predict(X_test)
  • 优点:

    • 自动进行特征选择,简化模型。
  • 缺点:

    • 可能导致特征过多时过度简化。
2.4 弹性网回归(Elastic Net Regression):
  • 结合了 Ridge 和 Lasso 的优点,同时引入 ( L1 ) 和 ( L2 ) 正则化项。回归方程为 y = β 0 + ∑ i = 1 n β i x i + λ 1 ∑ i = 1 n ∣ β i ∣ + λ 2 ∑ i = 1 n β i 2 y = \beta_0 + \sum_{i=1}^{n}\beta_i x_i + \lambda_1 \sum_{i=1}^{n}|\beta_i| + \lambda_2 \sum_{i=1}^{n}\beta_i^2 y=β0+∑i=1nβixi+λ1∑i=1n∣βi∣+λ2∑i=1nβi2。

    python 复制代码
    from sklearn.linear_model import ElasticNet
    
    elastic = ElasticNet(alpha=1.0, l1_ratio=0.5)
    elastic.fit(X_train, y_train)
    y_pred = elastic.predict(X_test)
  • 优点:

    • 结合了 Ridge 和 Lasso 的特性,平衡了特征选择和防止过拟合。
  • 缺点:

    • 需要调参。
2.5 多项式回归(Polynomial Regression):
  • 适用于非线性数据,通过引入多项式特征,使模型可以拟合更复杂的曲线。回归方程为 y = β 0 + β 1 x + β 2 x 2 + ⋯ + β n x n y = \beta_0 + \beta_1 x + \beta_2 x^2 + \cdots + \beta_n x^n y=β0+β1x+β2x2+⋯+βnxn。

    python 复制代码
    from sklearn.preprocessing import PolynomialFeatures
    
    poly = PolynomialFeatures(degree=2)
    X_poly = poly.fit_transform(X)
    model = LinearRegression()
    model.fit(X_poly, y)
    y_pred = model.predict(poly.transform(X_test))
  • 优点:

    • 可以拟合更复杂的关系。
  • 缺点:

    • 容易过拟合,需要仔细选择多项式的阶数。
2.6 逻辑回归(Logistic Regression):
  • 尽管名为回归,但逻辑回归是用于二分类问题的。它使用 sigmoid 函数将线性回归的输出映射到 0 和 1 之间,表示某类的概率。

    python 复制代码
    from sklearn.linear_model import LogisticRegression
    
    model = LogisticRegression()
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
  • 优点:

    • 简单且有效。
    • 可以解释模型输出为概率值。
  • 缺点:

    • 只能处理二分类问题,且假设自变量与因变量的关系是线性可分的。
2.7 决策树回归(Decision Tree Regression):
  • 基于决策树的模型,通过递归划分特征空间,将复杂的决策问题分解为一系列简单的决策。适用于处理非线性关系。

    python 复制代码
    from sklearn.tree import DecisionTreeRegressor
    
    model = DecisionTreeRegressor()
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
  • 优点:

    • 不需要特征缩放。
    • 能处理非线性数据。
  • 缺点:

    • 容易过拟合,需要剪枝或限制树的深度。
2.8 随机森林回归(Random Forest Regression):
  • 集成多个决策树的结果,减少过拟合,提升模型的泛化能力。

    python 复制代码
    from sklearn.ensemble import RandomForestRegressor
    
    model = RandomForestRegressor(n_estimators=100)
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
  • 优点:

    • 强大的泛化能力。
    • 处理高维数据和缺失值的能力强。
  • 缺点:

    • 相对黑箱,不易解释。

3. 回归模型的评价指标

  • 均方误差(MSE) : MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2 MSE=n1∑i=1n(yi−y^i)2,用来衡量模型预测值与实际值之间的误差。
  • 均方根误差(RMSE) : RMSE = MSE \text{RMSE} = \sqrt{\text{MSE}} RMSE=MSE ,它是 MSE 的平方根,更直观地反映误差的大小。
  • 平均绝对误差(MAE) : MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat{y}_i| MAE=n1∑i=1n∣yi−y^i∣,它比 MSE 对异常值不敏感。
  • R 2 R^2 R2 决定系数 : 表示模型解释数据方差的比例, R 2 R^2 R2 越接近 1,模型的拟合效果越好。
python 复制代码
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

4. 回归模型的应用

  • boston房价预测
相关推荐
月夕花晨37421 分钟前
C++学习笔记(24)
c++·笔记·学习
nfgo28 分钟前
机器学习VS深度学习
机器学习
CodingPioneer1 小时前
RK3588人工智能学习笔记-WSL中使用RKNN-ToolKit2
人工智能·笔记·学习
Trouvaille ~1 小时前
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
python·机器学习·数学建模·数据分析·numpy·科学计算·大数据处理
TAICHIFEI2 小时前
1. YOLOv10: Real-Time End-to-End Object Detection
人工智能·笔记·yolo·目标检测·目标跟踪
stm32发烧友2 小时前
基于人工智能的自动驾驶系统项目教学指南
人工智能·机器学习·自动驾驶
机械心2 小时前
最优化理论与自动驾驶(十):纯跟踪算法原理、公式及代码演示
人工智能·机器学习·自动驾驶
新知图书3 小时前
Rust的常量
算法·机器学习·rust
向阳逐梦3 小时前
ROS 编程入门的介绍
人工智能·算法·机器学习
DKPT3 小时前
数据结构之排序的基本概念
java·数据结构·笔记·学习·算法