大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解。回归分析是统计学和机器学习中的一种重要方法,用于研究因变量和自变量之间的关系。在机器学习中,回归算法被广泛应用于预测分析、趋势分析等领域。本文将介绍sklearn机器学习库中的一些常用回归算法,包括线性回归、Lasso回归、岭回归、多任务岭回归、核岭回归以及SVM-SVR模型。我们将分别介绍这些算法的数学原理和公式,并配套完整可运行代码。
 
文章目录
 
 
 
sklearn机器学习中的回归介绍与代码详解
1. 线性回归
线性回归是最简单的回归算法,它假设因变量和自变量之间存在线性关系。线性回归的目标是找到一条直线,使得所有数据点到这条直线的距离之和最小。这个目标可以通过最小二乘法来实现。
线性回归的数学原理
线性回归的模型可以表示为:
  
      
       
        
        
          y 
         
        
          = 
         
         
         
           β 
          
         
           0 
          
         
        
          + 
         
         
         
           β 
          
         
           1 
          
         
         
         
           x 
          
         
           1 
          
         
        
          + 
         
         
         
           β 
          
         
           2 
          
         
         
         
           x 
          
         
           2 
          
         
        
          + 
         
        
          ⋯ 
         
        
          + 
         
         
         
           β 
          
         
           n 
          
         
         
         
           x 
          
         
           n 
          
         
        
          + 
         
        
          ε 
         
        
       
         y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \cdots + \beta_nx_n + \varepsilon 
        
       
     y=β0+β1x1+β2x2+⋯+βnxn+ε
 其中, 
     
      
       
       
         y 
        
       
      
        y 
       
      
    y是因变量, 
     
      
       
        
        
          x 
         
        
          1 
         
        
       
         , 
        
        
        
          x 
         
        
          2 
         
        
       
         , 
        
       
         … 
        
       
         , 
        
        
        
          x 
         
        
          n 
         
        
       
      
        x_1, x_2, \ldots, x_n 
       
      
    x1,x2,…,xn是自变量, 
     
      
       
        
        
          β 
         
        
          0 
         
        
       
         , 
        
        
        
          β 
         
        
          1 
         
        
       
         , 
        
       
         … 
        
       
         , 
        
        
        
          β 
         
        
          n 
         
        
       
      
        \beta_0, \beta_1, \ldots, \beta_n 
       
      
    β0,β1,…,βn是模型参数, 
     
      
       
       
         ε 
        
       
      
        \varepsilon 
       
      
    ε是误差项。
 最小二乘法的目标是最小化误差平方和:
  
      
       
        
        
          J 
         
        
          ( 
         
        
          β 
         
        
          ) 
         
        
          = 
         
         
         
           ∑ 
          
          
          
            i 
           
          
            = 
           
          
            1 
           
          
         
           m 
          
         
        
          ( 
         
         
         
           y 
          
         
           i 
          
         
        
          − 
         
         
          
          
            y 
           
          
            ^ 
           
          
         
           i 
          
         
         
         
           ) 
          
         
           2 
          
         
        
          = 
         
         
         
           ∑ 
          
          
          
            i 
           
          
            = 
           
          
            1 
           
          
         
           m 
          
         
        
          ( 
         
         
         
           y 
          
         
           i 
          
         
        
          − 
         
        
          ( 
         
         
         
           β 
          
         
           0 
          
         
        
          + 
         
         
         
           β 
          
         
           1 
          
         
         
         
           x 
          
          
          
            i 
           
          
            1 
           
          
         
        
          + 
         
         
         
           β 
          
         
           2 
          
         
         
         
           x 
          
          
          
            i 
           
          
            2 
           
          
         
        
          + 
         
        
          ⋯ 
         
        
          + 
         
         
         
           β 
          
         
           n 
          
         
         
         
           x 
          
          
          
            i 
           
          
            n 
           
          
         
        
          ) 
         
         
         
           ) 
          
         
           2 
          
         
        
       
         J(\beta) = \sum_{i=1}^{m}(y_i - \hat{y}_i)^2 = \sum_{i=1}^{m}(y_i - (\beta_0 + \beta_1x_{i1} + \beta_2x_{i2} + \cdots + \beta_nx_{in}))^2 
        
       
     J(β)=i=1∑m(yi−y^i)2=i=1∑m(yi−(β0+β1xi1+β2xi2+⋯+βnxin))2
 其中, 
     
      
       
       
         m 
        
       
      
        m 
       
      
    m是样本数量, 
     
      
       
        
        
          y 
         
        
          i 
         
        
       
      
        y_i 
       
      
    yi是第 
     
      
       
       
         i 
        
       
      
        i 
       
      
    i个样本的因变量值, 
     
      
       
        
         
         
           y 
          
         
           ^ 
          
         
        
          i 
         
        
       
      
        \hat{y}_i 
       
      
    y^i是第 
     
      
       
       
         i 
        
       
      
        i 
       
      
    i个样本的预测值。
线性回归的代码实现
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np
# 生成模拟数据
np.random.seed(0)
X = np.random.rand(100, 1)
y = 2 * X[:, 0] + 1 + np.random.randn(100) * 0.05
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 创建线性回归模型
model = LinearRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, y_pred)
print("Mean squared error: ", mse)
2. Lasso回归和岭回归
Lasso回归和岭回归是两种常用的正则化线性回归算法。它们在普通线性回归的基础上加入了正则化项,以避免过拟合问题。
Lasso回归和岭回归的数学原理
Lasso回归的模型可以表示为:
  
      
       
        
        
          J 
         
        
          ( 
         
        
          β 
         
        
          ) 
         
        
          = 
         
         
         
           ∑ 
          
          
          
            i 
           
          
            = 
           
          
            1 
           
          
         
           m 
          
         
        
          ( 
         
         
         
           y 
          
         
           i 
          
         
        
          − 
         
        
          ( 
         
         
         
           β 
          
         
           0 
          
         
        
          + 
         
         
         
           β 
          
         
           1 
          
         
         
         
           x 
          
          
          
            i 
           
          
            1 
           
          
         
        
          + 
         
         
         
           β 
          
         
           2 
          
         
         
         
           x 
          
          
          
            i 
           
          
            2 
           
          
         
        
          + 
         
        
          ⋯ 
         
        
          + 
         
         
         
           β 
          
         
           n 
          
         
         
         
           x 
          
          
          
            i 
           
          
            n 
           
          
         
        
          ) 
         
         
         
           ) 
          
         
           2 
          
         
        
          + 
         
        
          α 
         
         
         
           ∑ 
          
          
          
            j 
           
          
            = 
           
          
            1 
           
          
         
           n 
          
         
        
          ∣ 
         
         
         
           β 
          
         
           j 
          
         
        
          ∣ 
         
        
       
         J(\beta) = \sum_{i=1}^{m}(y_i - (\beta_0 + \beta_1x_{i1} + \beta_2x_{i2} + \cdots + \beta_nx_{in}))^2 + \alpha \sum_{j=1}^{n}|\beta_j| 
        
       
     J(β)=i=1∑m(yi−(β0+β1xi1+β2xi2+⋯+βnxin))2+αj=1∑n∣βj∣
 岭回归的模型可以表示为:
  
      
       
        
        
          J 
         
        
          ( 
         
        
          β 
         
        
          ) 
         
        
          = 
         
         
         
           ∑ 
          
          
          
            i 
           
          
            = 
           
          
            1 
           
          
         
           m 
          
         
        
          ( 
         
         
         
           y 
          
         
           i 
          
         
        
          − 
         
        
          ( 
         
         
         
           β 
          
         
           0 
          
         
        
          + 
         
         
         
           β 
          
         
           1 
          
         
         
         
           x 
          
          
          
            i 
           
          
            1 
           
          
         
        
          + 
         
         
         
           β 
          
         
           2 
          
         
         
         
           x 
          
          
          
            i 
           
          
            2 
           
          
         
        
          + 
         
        
          ⋯ 
         
        
          + 
         
         
         
           β 
          
         
           n 
          
         
         
         
           x 
          
          
          
            i 
           
          
            n 
           
          
         
        
          ) 
         
         
         
           ) 
          
         
           2 
          
         
        
          + 
         
        
          α 
         
         
         
           ∑ 
          
          
          
            j 
           
          
            = 
           
          
            1 
           
          
         
           n 
          
         
         
         
           β 
          
         
           j 
          
         
           2 
          
         
        
       
         J(\beta) = \sum_{i=1}^{m}(y_i - (\beta_0 + \beta_1x_{i1} + \beta_2x_{i2} + \cdots + \beta_nx_{in}))^2 + \alpha \sum_{j=1}^{n}\beta_j^2 
        
       
     J(β)=i=1∑m(yi−(β0+β1xi1+β2xi2+⋯+βnxin))2+αj=1∑nβj2
 其中, 
     
      
       
       
         α 
        
       
      
        \alpha 
       
      
    α是正则化参数。
 
Lasso回归和岭回归的代码实现
from sklearn.linear_model import Lasso, Ridge
# 创建Lasso回归模型
lasso_model = Lasso(alpha=0.1)
# 创建岭回归模型
ridge_model = Ridge(alpha=0.1)
# 训练模型
lasso_model.fit(X_train, y_train)
ridge_model.fit(X_train, y_train)
# 预测
lasso_pred = lasso_model.predict(X_test)
ridge_pred = ridge_model.predict(X_test)
# 评估模型
lasso_mse = mean_squared_error(y_test, lasso_pred)
ridge_mse = mean_squared_error(y_test, ridge_pred)
print("Lasso mean squared error: ", lasso_mse)
print("Ridge mean squared error: ", ridge_mse)
3. 多任务岭回归
多任务岭回归是岭回归的扩展,用于同时解决多个回归问题。这些问题通常是相关的,因此共享相同的特征空间,但有不同的目标值。
多任务岭回归的数学原理
多任务岭回归的目标是最小化以下目标函数:
  
      
       
        
        
          J 
         
        
          ( 
         
        
          B 
         
        
          ) 
         
        
          = 
         
         
         
           1 
          
          
          
            2 
           
          
            n 
           
          
         
         
         
           ∑ 
          
          
          
            i 
           
          
            = 
           
          
            1 
           
          
         
           n 
          
         
         
          
          
            ∥ 
           
           
           
             y 
            
           
             i 
            
           
          
            − 
           
           
           
             X 
            
           
             i 
            
           
          
            B 
           
          
            ∥ 
           
          
         
           2 
          
         
           2 
          
         
        
          + 
         
         
         
           α 
          
         
           2 
          
         
         
         
           ∑ 
          
          
          
            j 
           
          
            = 
           
          
            1 
           
          
         
           k 
          
         
         
          
          
            ∥ 
           
           
           
             B 
            
           
             j 
            
           
          
            ∥ 
           
          
         
           2 
          
         
           2 
          
         
        
       
         J(\mathbf{B}) = \frac{1}{2n} \sum_{i=1}^{n} \left\| \mathbf{y}_i - \mathbf{X}_i \mathbf{B} \right\|^2_2 + \frac{\alpha}{2} \sum_{j=1}^{k} \left\| \mathbf{B}_j \right\|^2_2 
        
       
     J(B)=2n1i=1∑n∥yi−XiB∥22+2αj=1∑k∥Bj∥22
 其中, 
     
      
       
       
         B 
        
       
      
        \mathbf{B} 
       
      
    B是一个 
     
      
       
       
         p 
        
       
         × 
        
       
         k 
        
       
      
        p \times k 
       
      
    p×k的系数矩阵, 
     
      
       
       
         p 
        
       
      
        p 
       
      
    p是特征数量, 
     
      
       
       
         k 
        
       
      
        k 
       
      
    k是任务数量, 
     
      
       
        
        
          y 
         
        
          i 
         
        
       
      
        \mathbf{y}_i 
       
      
    yi是第 
     
      
       
       
         i 
        
       
      
        i 
       
      
    i个任务的因变量向量, 
     
      
       
        
        
          X 
         
        
          i 
         
        
       
      
        \mathbf{X}_i 
       
      
    Xi是第 
     
      
       
       
         i 
        
       
      
        i 
       
      
    i个任务的自变量矩阵, 
     
      
       
       
         α 
        
       
      
        \alpha 
       
      
    α是正则化参数。
多任务岭回归的代码实现
from sklearn.linear_model import MultiTaskLasso
# 假设我们有两个任务回归任务
X = np.random.rand(100, 10)
y = np.random.rand(100, 2)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 创建多任务岭回归模型
multi_task_lasso = MultiTaskLasso(alpha=0.1)
# 训练模型
multi_task_lasso.fit(X_train, y_train)
# 预测
multi_task_pred = multi_task_lasso.predict(X_test)
# 评估模型
multi_task_mse = mean_squared_error(y_test, multi_task_pred)
print("Multi Task Lasso mean squared error: ", multi_task_mse)
4. 核岭回归
核岭回归是非线性回归方法,它使用核技巧将数据映射到高维空间,然后维空间中进行线性回归。
核岭回归的数学原理
核岭回归的目标函数为表示为:
  
      
       
        
        
          J 
         
        
          ( 
         
        
          w 
         
        
          ) 
         
        
          = 
         
         
         
           1 
          
          
          
            2 
           
          
            n 
           
          
         
         
          
          
            ∥ 
           
          
            K 
           
          
            w 
           
          
            − 
           
          
            y 
           
          
            ∥ 
           
          
         
           2 
          
         
           2 
          
         
        
          + 
         
         
         
           α 
          
         
           2 
          
         
         
         
           w 
          
         
           T 
          
         
        
          w 
         
        
       
         J(\mathbf{w}) = \frac{1}{2n} \left\| \mathbf{K} \mathbf{w} - \mathbf{y} \right\|^2_2 + \frac{\alpha}{2} \mathbf{w}^T \mathbf{w} 
        
       
     J(w)=2n1∥Kw−y∥22+2αwTw
 其中, 
     
      
       
       
         K 
        
       
      
        \mathbf{K} 
       
      
    K是核矩阵, 
     
      
       
       
         w 
        
       
      
        \mathbf{w} 
       
      
    w是权重向量, 
     
      
       
       
         y 
        
       
      
        \mathbf{y} 
       
      
    y是因变量向量, 
     
      
       
       
         α 
        
       
      
        \alpha 
       
      
    α是正则化参数。
核岭回归的代码实现
from sklearn.kernel_ridge import KernelRidge
# 创建核岭回归模型
kernel_ridge = KernelRidge(kernel='rbf', alpha=1.0)
# 训练模型
kernel_ridge.fit(X_train, y_train.ravel())
# 预测
kernel_ridge_pred = kernel_ridge.predict(X_test)
# 评估模型
kernel_ridge_mse = mean_squared_error(y_test, kernel_ridge_pred)
print("Kernel Ridge mean squared error: ", kernel_ridge_mse)
5. SVM-SVR模型
支持向量回归(SVR)是支持向量机(SVM)在回归问题上的应用。SVR的目标是找到一个最优的超平面,使得所有数据点到这个超平面的距离之和最小。
SVM-SVR模型的数学原理
SVR的目标函数可以表示为:
  
      
       
        
         
          
          
            min 
           
          
             
           
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
            , 
           
          
            ξ 
           
          
            , 
           
           
           
             ξ 
            
           
             ∗ 
            
           
          
         
         
         
           1 
          
         
           2 
          
         
         
          
          
            ∥ 
           
          
            w 
           
          
            ∥ 
           
          
         
           2 
          
         
        
          + 
         
        
          C 
         
         
         
           ∑ 
          
          
          
            i 
           
          
            = 
           
          
            1 
           
          
         
           n 
          
         
        
          ( 
         
         
         
           ξ 
          
         
           i 
          
         
        
          + 
         
         
         
           ξ 
          
         
           i 
          
         
           ∗ 
          
         
        
          ) 
         
        
       
         \min_{\mathbf{w}, b, \xi, \xi^*} \frac{1}{2} \left\| \mathbf{w} \right\|^2 + C \sum_{i=1}^{n} (\xi_i + \xi_i^*) 
        
       
     w,b,ξ,ξ∗min21∥w∥2+Ci=1∑n(ξi+ξi∗)
 约束条件为:
  
      
       
        
         
          
           
            
             
             
               y 
              
             
               i 
              
             
            
              − 
             
             
             
               w 
              
             
               T 
              
             
            
              ϕ 
             
            
              ( 
             
             
             
               x 
              
             
               i 
              
             
            
              ) 
             
            
              − 
             
            
              b 
             
            
           
          
          
           
            
             
            
              ≤ 
             
            
              ε 
             
            
              + 
             
             
             
               ξ 
              
             
               i 
              
             
            
           
          
         
         
          
           
            
             
             
               w 
              
             
               T 
              
             
            
              ϕ 
             
            
              ( 
             
             
             
               x 
              
             
               i 
              
             
            
              ) 
             
            
              + 
             
            
              b 
             
            
              − 
             
             
             
               y 
              
             
               i 
              
             
            
           
          
          
           
            
             
            
              ≤ 
             
            
              ε 
             
            
              + 
             
             
             
               ξ 
              
             
               i 
              
             
               ∗ 
              
             
            
           
          
         
         
          
           
            
             
             
               ξ 
              
             
               i 
              
             
            
              , 
             
             
             
               ξ 
              
             
               i 
              
             
               ∗ 
              
             
            
           
          
          
           
            
             
            
              ≥ 
             
            
              0 
             
            
           
          
         
        
       
         \begin{align*} y_i - \mathbf{w}^T \phi(\mathbf{x}_i) - b &\leq \varepsilon + \xi_i \\ \mathbf{w}^T \phi(\mathbf{x}_i) + b - y_i &\leq \varepsilon + \xi_i^* \\ \xi_i, \xi_i^* &\geq 0 \end{align*} 
        
       
     yi−wTϕ(xi)−bwTϕ(xi)+b−yiξi,ξi∗≤ε+ξi≤ε+ξi∗≥0
 其中, 
     
      
       
       
         w 
        
       
      
        \mathbf{w} 
       
      
    w是权重向量, 
     
      
       
       
         b 
        
       
      
        b 
       
      
    b是偏置项, 
     
      
       
       
         ϕ 
        
       
         ( 
        
        
        
          x 
         
        
          i 
         
        
       
         ) 
        
       
      
        \phi(\mathbf{x}_i) 
       
      
    ϕ(xi)是将输入向量映射到高维空间的函数, 
     
      
       
       
         ξ 
        
       
      
        \xi 
       
      
    ξ和 
     
      
       
        
        
          ξ 
         
        
          ∗ 
         
        
       
      
        \xi^* 
       
      
    ξ∗是松弛变量, 
     
      
       
       
         C 
        
       
      
        C 
       
      
    C是惩罚参数, 
     
      
       
       
         ε 
        
       
      
        \varepsilon 
       
      
    ε是容忍误差。
SVM-SVR模型的代码实现
from sklearn.svm import SVR
# 创建SVR模型
svr = SVR(kernel='rbf', C=1.0, epsilon=0.1)
# 训练模型
svr.fit(X_train, y_train.ravel())
# 预测
svr_pred = svr.predict(X_test)
# 评估模型
svr_mse = mean_squared_error(y_test, svr_pred)
print("SVR mean squared error: ", svr_mse)
总结
本文给大家展示了线性回归、Lasso回归、岭回归、多任务岭回归、核岭回归以及SVM-SVR模型在sklearn库中的实现。每个模型都包括了模型的创建、训练、预测和评估过程。在实际应用中,您需要根据具体问题选择合适的模型,并通过调整模型参数来优化模型性能。
 sklearn库为各种回归算法提供了方便的接口,使得在Python中进行回归分析变得简单高效。通过理解和实践这些算法,您可以更好地解决实际问题,并在机器学习领域取得更好的成果。










