当前位置:   article > 正文

20210317_23期_集成学习(上)_Task02_sklearn构建完整机器学习模型_用py计算 2 2 2 + 3 2 4 2 + . . . + 9 7 2 9 8 2

用py计算 2 2 2 + 3 2 4 2 + . . . + 9 7 2 9 8 2 + 9 9 2 = ? 1

二、Sklearn构建完整机器学习模型

图1

来源

Datewhle23期__集成学习(上) :
https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearning
作者:李祖贤、薛传雨、赵可、杨毅远、陈琰钰

论坛地址:
http://datawhale.club/t/topic/1574

import pandas as pd
import numpy as np
  • 1
  • 2

2.1 机器学习项目通常步骤

  • 明确项目任务:回归/分类
  • 收集数据集并选择合适的特征。
  • 选择度量模型性能的指标。
  • 选择具体的模型并进行训练以优化模型。
  • 评估模型的性能并调参。

2.2 用Sklearn对机器学习项目的构建

2.2.1 导入数据集及特征选择

  • 载入波士顿房价数据集
from sklearn import datasets
boston = datasets.load_boston()     # 返回类字典的类
X = boston.data
y = boston.target
features = boston.feature_names
boston_data = pd.DataFrame(X,columns=features)
boston_data["Price"] = y
boston_data.head()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

out

       CRIM 	ZN 	   INDUS 	CHAS 	NOX 	RM 	    AGE 	DIS 	RAD 	TAX 	PTRATIO 	B 	LSTAT 	Price
0 	0.00632 	18.0 	2.31 	0.0 	0.538 	6.575 	65.2 	4.0900 	1.0 	296.0 	15.3 	396.90 	4.98 	24.0
1 	0.02731 	0.0 	7.07 	0.0 	0.469 	6.421 	78.9 	4.9671 	2.0 	242.0 	17.8 	396.90 	9.14 	21.6
2 	0.02729 	0.0 	7.07 	0.0 	0.469 	7.185 	61.1 	4.9671 	2.0 	242.0 	17.8 	392.83 	4.03 	34.7
3 	0.03237 	0.0 	2.18 	0.0 	0.458 	6.998 	45.8 	6.0622 	3.0 	222.0 	18.7 	394.63 	2.94 	33.4
4 	0.06905 	0.0 	2.18 	0.0 	0.458 	7.147 	54.2 	6.0622 	3.0 	222.0 	18.7 	396.90 	5.33 	36.2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.2.2 模型性能评价指标

  • 均方误差 MSE (Mean Squared Error)
    均方误差 MSE即预测点与实际点之间距离之差平方和的均值,又被称为 L2范数损失:

    MSE ( y , y ^ ) = 1 n samples ∑ i = 0 n samples − 1 ( y i − y ^ i ) 2 . \text{MSE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples} - 1} (y_i - \hat{y}_i)^2. MSE(y,y^)=nsamples1i=0nsamples1(yiy^i)2.

  • 平均绝对误差 MAE (Mean_absolute_error)
    平均绝对误差 MAE平均绝对误差即预测点与真实点之间距离之差的绝对值的平均值,又被称为 L1范数损失:

    MAE ( y , y ^ ) = 1 n samples ∑ i = 0 n samples − 1 ∣ y i − y ^ i ∣ \text{MAE}(y, \hat{y}) = \frac{1}{n_{\text{samples}}} \sum_{i=0}^{n_{\text{samples}}-1} \left| y_i - \hat{y}_i \right| MAE(y,y^)=nsamples1i=0nsamples1yiy^i

  • 决定系数差 R 2 R^2 R2 (R 方)
    决定系数差 R 2 R^2 R2表示线性回归模型中由自变量 X 解释的响应变量 y 的变化比例。R 方越大,线性回归模型解释的变异越大。
    R 2 ( y , y ^ ) = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2(y, \hat{y}) = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2} R2(y,y^)=1i=1n(yiyˉ)2i=1n(yiy^i)2

  • 可解释方差
    可解释方差可解释方差是(1- 样本值与预测值之差的方差/样本方差)
    e x p l a i n e d _ v a r i a n c e ( y , y ^ ) = 1 − V a r { y − y ^ } V a r { y } explained\_{}variance(y, \hat{y}) = 1 - \frac{Var\{ y - \hat{y}\}}{Var\{y\}} explained_variance(y,y^)=1Var{y}Var{yy^}

2.2.3 模型选择

2.2.3.1 线性回归模型

线性回归是在假设特征满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测:
函数形式:

y ^ = f ( x ) = w 1 x 1 + w 2 x 2 + … + w i x i + b ( 1 ) \hat{y}=f(x)=w_{1} x_{1}+w_{2} x_{2}+\ldots+w_{i} x_{i}+b(1) y^=f(x)=w1x1+w2x2++wixi+b(1)

向量表达式形式:

y ^ = f ( w ) = w T x + b ( 2 ) \hat{y}=f(w) =w^Tx+b(2) y^=f(w)=wTx+b(2)

(1) 最小二乘估计
普通最小二乘法拟合线性模型,本质上解决 :

min ⁡ β ∥ x β − y ∥ 2 2 \min _{\beta}\|x \beta-y\|_{2}^{2} βminxβy22

真实值与线性回归模型最小差距,常用二范数的平方和L(w)来描述这种差距:

  • 范数复习: https://zhuanlan.zhihu.com/p/85305655
    2范 : ∥ w T x i − y i ∥ 2 = ∑ i = 1 n ( w T x i − y i ) 2 \|w^Tx_i-y_i\|_{2}=\sqrt{\sum_{i=1}^{n} (w^Tx_i-y_i)^2} wTxiyi2=i=1n(wTxiyi)2

    L ( w ) = ∑ i = 1 N ∣ ∣ w T x i − y i ∣ ∣ 2 2 L(w) = \sum\limits_{i=1}^{N}||w^Tx_i-y_i||_2^2 L(w)=i=1NwTxiyi22
        = ∑ i = 1 N ( w T x i − y i ) 2 =\sum\limits_{i=1}^{N}(w^Tx_i-y_i)^2 =i=1N(wTxiyi)2
        = ( w T X T − Y T ) ( w T X T − Y T ) T = (w^TX^T-Y^T)(w^TX^T-Y^T)^T =(wTXTYT)(wTXTYT)T
        = ( w T X T − Y T ) ( X w − Y ) =(w^TX^T-Y^T)(Xw-Y) =(wTXTYT)(XwY)  #矩阵转置性质别忘: ( A + B ) T = A T + B T (A+B)^T = A^T+B^T (A+B)T=AT+BT   ( A B ) T = B T A T (AB)^T = B^TA^T (AB)T=BTAT
        = w T X T X w − 2 w T X T Y + Y Y T = w^TX^TXw - 2w^TX^TY+YY^T =wTXTXw2wTXTY+YYT

  • L ( w ) L(w) L(w) 求偏导,并令其等于0:
    ∂ L ( w ) ∂ w = 2 X T X w − 2 X T Y = 0 \frac{\partial L(w)}{\partial w} = 2X^TXw-2X^TY = 0 wL(w)=2XTXw2XTY=0因此:
    w ^ = ( X T X ) − 1 X T Y \\\hat{w} = (X^TX)^{-1}X^TY w^=(XTX)1XTY

(2) 几何解释
在线性代数中,我们知道两个向量a和b相互垂直可以得出 < a , b > = a . b = a T b = 0 <a,b> = a.b = a^Tb = 0 <a,b>=a.b=aTb=0
而平面X的法向量为Y-Xw,与平面X互相垂直,因此: X T ( Y − X w ) = 0 X^T(Y-Xw) = 0 XT(YXw)=0 即: w = ( X T X ) − 1 X T Y w = (X^TX)^{-1}X^TY w=(XTX)1XTY

1.所有样本目标真实值 t i t_i ti,构成一个N维列向量 t = ( t 1 , t 2 . . . t N ) T t=(t_1,t_2...t_N)^T t=(t1,t2...tN)T
2.所有样本的特征数据x构成一个N×M的矩阵 X;矩阵 X 的第 j 个列向量记维 φ j φ_j φj,即 X = ( φ 0 , φ 1 , . . . , φ M − 1 ) X=(φ_0,φ_1,...,φ_M−1) X=(φ0,φ1,...,φM1)
3.假定真实最优参数为 θ ∗ = ( θ 0 , θ 1 , . . . θ M − 1 ) T θ^∗=(θ_0,θ_1,...θ_{M−1})^T θ=(θ0,θ1,...θM1)T,则有 t = X θ ∗ = ( φ 0 , φ 1 , . . . , φ M − 1 ) θ ∗ t=Xθ^∗=(φ_0,φ_1,...,φ_{M−1})θ^∗ t=Xθ=(φ0,φ1,...,φM1)θ
最小二乘法在几何上解释,即寻找一个向量y与向量t之间欧式距离最小。现在的目的即是在S中寻找一个向量y,使得y离向量t的距离最近。最由图中可以看出,离t最近的向量y即是向量t向子空间S的正交投影。
在这里插入图片描述
(3) 概率视角

假设噪声 ϵ ∽ N ( 0 , σ 2 ) , y = f ( w ) + ϵ = w T x + ϵ \epsilon \backsim N(0,\sigma^2),y=f(w)+\epsilon=w^Tx+\epsilon ϵN(0,σ2),y=f(w)+ϵ=wTx+ϵ,因此: y ∣ x i , w   N ( w T x , σ 2 ) y|x_i,w ~ N(w^Tx,\sigma^2) yxi,w N(wTx,σ2)
我们使用极大似然估计MLE对参数w进行估计:
L ( w ) = l o g    P ( Y ∣ X ; w ) L(w) = log\;P(Y|X;w) L(w)=logP(YX;w)
    = l o g    ∏ i = 1 N P ( y i ∣ x i ; w ) = log\;\prod_{i=1}^N P(y_i|x_i;w) =logi=1NP(yixi;w)
    = ∑ i = 1 N l o g    P ( y i ∣ x i ; w ) = \sum\limits_{i=1}^{N} log\; P(y_i|x_i;w) =i=1NlogP(yixi;w)
    = ∑ i = 1 N l o g ( 1 2 π σ e x p ( − ( y i − w T x i ) 2 2 σ 2 ) ) = \sum\limits_{i=1}^{N}log(\frac{1}{\sqrt{2\pi \sigma}}exp(-\frac{(y_i-w^Tx_i)^2}{2\sigma^2})) =i=1Nlog(2πσ 1exp(2σ2(yiwTxi)2))
    = ∑ i = 1 N [ l o g ( 1 2 π σ ) − 1 2 σ 2 ( y i − w T x i ) 2 ] = \sum\limits_{i=1}^{N}[log(\frac{1}{\sqrt{2\pi}\sigma})-\frac{1}{2\sigma^2}(y_i-w^Tx_i)^2] =i=1N[log(2π σ1)2σ21(yiwTxi)2]
a r g m a x w L ( w ) = a r g m i n w [ l ( w ) = ∑ i = 1 N ( y i − w T x i ) 2 ] argmax_w L(w) = argmin_w[l(w) = \sum\limits_{i = 1}^{N}(y_i-w^Tx_i)^2] argmaxwL(w)=argminw[l(w)=i=1N(yiwTxi)2]
因此:线性回归的最小二乘估计<==>噪声 ϵ ∽ N ( 0 , σ 2 ) \epsilon\backsim N(0,\sigma^2) ϵN(0,σ2)的极大似然估计

    • 载入LR模型 → 并将数据代入训练 → 输出系数/评价指标
    from sklearn import linear_model      # 引入线性回归方法
    lin_reg = linear_model.LinearRegression()       # 创建线性回归的类
    lin_reg.fit(X,y)        # 输入特征X和因变量y进行训练
    print("模型系数:",lin_reg.coef_)             # 输出模型的系数
    print("模型得分:",lin_reg.score(X,y))    # 输出模型的决定系数R^2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    2.2.3.2 线性回归推广

    线性模型虽然简单,但对于非线性数据乏力,推广其能使其表达非线性关系.

    • 许多模型都是在线性模型基础上衍生的:
      • 打破线性约束
        • 打破属性上的线性 特征转换(多项式回归)
        • 打破全局线性 线性分类(激活函数是非线性)
        • 打破系数的线性 神经网络,感知机
      • 打破全局性线性样条回归,决策树
      • ** 数据未加工**:PCA
    1. 多项式回归
      标准的线性回归模型:
      y i = w 0 + w 1 x i + ϵ i y_i = w_0 + w_1x_i + \epsilon_i yi=w0+w1xi+ϵi
      经特征变换成多项式函数:
      y i = w 0 + w 1 x i + w 2 x i 2 + . . . + w d x i d + ϵ y_i = w_0 + w_1x_i + w_2x_i^2 + ...+w_dx_i^d + \epsilon yi=w0+w1xi+w2xi2+...+wdxid+ϵ
      其中d一般取3-4, 太大曲线光滑,预测效果不佳.
      多项式回归实例介绍:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html?highlight=poly#sklearn.preprocessing.PolynomialFeatures

    sklearn.preprocessing.PolynomialFeatures(degree=2, *, interaction_only=False, include_bias=True, order='C'):

    • 参数:
      degree:特征转换的阶数。
      interaction_onlyboolean:是否只包含交互项,默认False 。
      include_bias:是否包含截距项,默认True。
      order:str in {‘C’, ‘F’}, default ‘C’,输出数组的顺序。
    from sklearn.preprocessing import PolynomialFeatures
    X = np.arange(6).reshape(3,2)
    X
    
    • 1
    • 2
    • 3
    array([[0, 1],
           [2, 3],
           [4, 5]])
    
    • 1
    • 2
    • 3
    //2次转化  [a^0*b^0,a^1*b^0,b^1*a^0,a^2,ab,b^2]
    poly = PolynomialFeatures(2)
    poly.fit_transform(X)
    
    • 1
    • 2
    • 3
    array([[ 1.,  0.,  1.,  0.,  0.,  1.],
           [ 1.,  2.,  3.,  4.,  6.,  9.],
           [ 1.,  4.,  5., 16., 20., 25.]])
    
    • 1
    • 2
    • 3
    //2次转化,仅保留交叉  [a^0*b^0,a^1*b^0,b^1*a^0,a^2,ab,b^2]
    poly = PolynomialFeatures(interaction_only = True)
    poly.fit_transform(X)
    
    • 1
    • 2
    • 3
    array([[ 1.,  0.,  1.,  0.],
           [ 1.,  2.,  3.,  6.],
           [ 1.,  4.,  5., 20.]])
    
    • 1
    • 2
    • 3
    1. 广义可加模型(GAM)
        广义可加模型GAM实际上是线性模型推广至非线性模型的一个框架,在这个框架中,每一个变量都用一个非线性函数来代替,但是模型本身保持整体可加性。GAM模型不仅仅可以用在线性回归的推广,还可以将线性分类模型进行推广。具体的推广形式是:
      标准的线性回归模型:
      y i = w 0 + w 1 x i + ϵ i y_i = w_0 + w_1x_i + \epsilon_i yi=w0+w1xi+ϵi
      GAM模型框架:
      y i = w 0 + ∑ j = 1 p f j ( x i j ) + ϵ i y_i = w_0 + \sum\limits_{j=1}^{p}f_{j}(x_{ij}) + \epsilon_i yi=w0+j=1pfj(xij)+ϵi
      GAM模型的优点与不足:
      • 优点:简单易操作; 由于模型可加,可像线性回归模型一样以控制变量的形式仅对某个变量推断
      • 缺点: 模型易忽略特征交互作用,比如某两个特征共同影响因变量,不过GAM还是能像线性回归一样加入交互项 x ( i ) × x ( j ) x^{(i)} \times x^{(j)} x(i)×x(j)的形式进行建模
    from pygam import LinearGAM
    gam = LinearGAM().fit(boston_data[boston.feature_names], y)
    gam.summary()
    
    • 1
    • 2
    • 3
    LinearGAM                                                                                                 
    =============================================== ==========================================================
    Distribution:                        NormalDist Effective DoF:                                    103.2423
    Link Function:                     IdentityLink Log Likelihood:                                 -1589.7653
    Number of Samples:                          506 AIC:                                             3388.0152
                                                    AICc:                                            3442.7649
                                                    GCV:                                               13.7683
                                                    Scale:                                              8.8269
                                                    Pseudo R-Squared:                                   0.9168
    ==========================================================================================================
    Feature Function                  Lambda               Rank         EDoF         P > x        Sig. Code   
    ================================= ==================== ============ ============ ============ ============
    s(0)                              [0.6]                20           11.1         2.20e-11     ***         
    s(1)                              [0.6]                20           12.8         8.15e-02     .           
    s(2)                              [0.6]                20           13.5         2.59e-03     **          
    s(3)                              [0.6]                20           3.8          2.76e-01                 
    s(4)                              [0.6]                20           11.4         1.11e-16     ***         
    s(5)                              [0.6]                20           10.1         1.11e-16     ***         
    s(6)                              [0.6]                20           10.4         8.22e-01                 
    s(7)                              [0.6]                20           8.5          4.44e-16     ***         
    s(8)                              [0.6]                20           3.5          5.96e-03     **          
    s(9)                              [0.6]                20           3.4          1.33e-09     ***         
    s(10)                             [0.6]                20           1.8          3.26e-03     **          
    s(11)                             [0.6]                20           6.4          6.25e-02     .           
    s(12)                             [0.6]                20           6.5          1.11e-16     ***         
    intercept                                              1            0.0          2.23e-13     ***         
    ==========================================================================================================
    Significance codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    说实话没太明白这模型用途,

    • 标注一下
    2.2.3.3 回归树

    回归树(regression tree),顾名思义,就是用树模型做回归问题,每一片叶子都输出一个预测值。预测值一般是该片叶子所含训练集元素输出的均值,即 :
    c m = a v e ( y i ∣ x i ∈ l e a f m ) c_{m} = ave(y_i | \bm x_i \in leaf_m) cm=ave(yixileafm)

    基于树的回归方法主要是:
    1.依据分层和分割的方式将特征空间划分为一系列简单的区域;
    2.对某个给定的待预测的自变量,用他所属区域中训练集的平均数或者众数对其进行预测。

    1. 建立回归树的过程大致可以分为以下两步:

    • 将自变量的特征空间(即 x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . , x ( p ) x^{(1)},x^{(2)},x^{(3)},...,x^{(p)} x(1),x(2),x(3),...,x(p))的可能取值构成的集合分割成J个互不重叠的区域 R 1 , R 2 , . . . , R j R_1,R_2,...,R_j R1,R2,...,Rj
    • 对落入区域 R j R_j Rj的每个观测值作相同的预测,预测值等于 R j R_j Rj上训练集的因变量的简单算术平均。
      具体来说,就是:
      a. 选择最优切分特征j以及该特征上的最优点s:
      遍历特征j以及固定j后遍历切分点s,选择使得下式最小的(j,s) m i n j , s [ m i n c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] min_{j,s}[min_{c_1}\sum\limits_{x_i\in R_1(j,s)}(y_i-c_1)^2 + min_{c_2}\sum\limits_{x_i\in R_2(j,s)}(y_i-c_2)^2 ] minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]
      b. 按照(j,s)分裂特征空间: R 1 ( j , s ) = { x ∣ x j ≤ s } 和 R 2 ( j , s ) = { x ∣ x j > s } , c ^ m = 1 N m ∑ x ∈ R m ( j , s ) y i ,    m = 1 , 2 R_1(j,s) = \{x|x^{j} \le s \}和R_2(j,s) = \{x|x^{j} > s \},\hat{c}_m = \frac{1}{N_m}\sum\limits_{x \in R_m(j,s)}y_i,\;m=1,2 R1(j,s)={xxjs}R2(j,s)={xxj>s},c^m=Nm1xRm(j,s)yi,m=1,2
      c. 继续调用步骤1,2直到满足停止条件,就是每个区域的样本数小于等于5。
      d. 将特征空间划分为J个不同的区域,生成回归树: f ( x ) = ∑ m = 1 J c ^ m I ( x ∈ R m ) f(x) = \sum\limits_{m=1}^{J}\hat{c}_mI(x \in R_m) f(x)=m=1Jc^mI(xRm)
      如以下生成的关于运动员在棒球大联盟数据的回归树:

    2. 回归树与线性模型的比较:

    • 区别: 模型形式假定不同
      • 线性回归: f ( x ) = w 0 + ∑ j = 1 p w j x ( j ) f(x) = w_0 + \sum\limits_{j=1}^{p}w_jx^{(j)} f(x)=w0+j=1pwjx(j)
      • 回归树则: f ( x ) = ∑ m = 1 J c ^ m I ( x ∈ R m ) f(x) = \sum\limits_{m=1}^{J}\hat{c}_mI(x \in R_m) f(x)=m=1Jc^mI(xRm)
    • 比较:
      • 特征变量与因变量关系能很好的用线性关系来表达→线性回归预测效果好
      • 如果特征变量与因变量的关系呈现高度复杂的非线性→树方法更优。
    1. 树模型的优缺点
      • 树模型的解释性强,在解释性方面可能比线性回归还要方便。
      • 树模型更接近人的决策方式
      • 树模型可以用图来表示,非专业人士也可以轻松解读。
      • 树模型可以直接做定性的特征而不需要像线性回归一样哑元化
      • 树模型能很好处理缺失值和异常值对异常值不敏感,但是这个对线性模型来说却是致命的。
      • 树模型的预测准确性一般无法达到其他回归模型的水平,但是改进的方法多

    sklearn使用回归树的实例:
    https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html?highlight=tree#sklearn.tree.DecisionTreeRegressor

    sklearn.tree.DecisionTreeRegressor(*, criterion='mse', splitter='best', 
                                       max_depth=None, min_samples_split=2, min_samples_leaf=1, 
                                       min_weight_fraction_leaf=0.0, max_features=None, random_state=None, 
                                       max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None,
                                       presort='deprecated', ccp_alpha=0.0
    • 1
    • 2
    • 3
    • 4
    • 5
    • 参数:(列举几个重要的,常用的,详情请看上面的官网)
      criterion:{“ mse”,“ friedman_mse”,“ mae”},默认=“ mse”。衡量分割标准的函数 。
      splitter:{“best”, “random”}, default=”best”。分割方式。
      max_depth:树的最大深度。
      min_samples_split:拆分内部节点所需的最少样本数,默认是2。
      min_samples_leaf:在叶节点处需要的最小样本数。默认是1。
      min_weight_fraction_leaf:在所有叶节点处(所有输入样本)的权重总和中的最小加权分数。如果未提供sample_weight,则样本的权重相等。默认是0。
    X = boston.data
    y = boston.target
    from sklearn.tree import DecisionTreeRegressor    
    reg_tree = DecisionTreeRegressor(criterion = "mse",min_samples_leaf = 5)
    reg_tree.fit(X,y)
    reg_tree.score(X,y)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    0.9376307599929274
    
    • 1
      2.2.3.4支持向量回归(SVR)

      所有特征需要标准化
      支持向量回归机(Support Vector Machine for Regression)即SVR是SVM在回归问题上的运用,一般用来解决非线性问题。

      • 基本原理:
        n n n个数据的样本 { x i , y i } i = 1 n \left\{ x_i,y_i \right\} _{i=1}^{n} {xi,yi}i=1n中, x i x_i xi y i y_i yi分别代表输入和输出样本。将原来空间的输入样本 x i x_i xi通过非线性映射在 M M M 维的特征空间实现线性回归。
        特征空间中分类超平面或逼近函数的表达式如下:
        f ( x ) = ∑ i = 1 M ω i Φ i ( x ) + b f\left( x \right) =\sum_{i=1}^M{\omega _i}\Phi _i\left( x \right) +b f(x)=i=1MωiΦi(x)+b
        其中, b b b为偏移量。样本经过 Φ \varPhi Φ 变换,可以通过超平面中求解线性回归问题的方式解决原本的非线性回归问题,定义不敏感损失函数如下:
        L ε ( x i , y i , f ) = max ⁡ { 0 , ∣ y i − f ( x i ) ∣ − ε } L_{\varepsilon}\left( x_i,y_i,f \right) =\max \left\{ 0,\left| y_i-f\left( x_i \right) \right|-\varepsilon \right\} Lε(xi,yi,f)=max{0,yif(xi)ε}
        SVR问题核心在于找到最合适的 f ( . ) f(.) f(.)使得 E ( ω ) E(\omega) E(ω)取得最小值:
        E ( ω ) = 0.5 ( ω ⋅ ω ) + C 1 l ∑ i = 1 l L ε ( x i , y i , f ) E\left( \omega \right) =0.5\left( \omega \cdot \omega \right) +C\frac{1}{l}\sum_{i=1}^l{L_{\varepsilon}}\left( x_i,y_i,f \right) E(ω)=0.5(ωω)+Cl1i=1lLε(xi,yi,f)

      其中, ω   =   ( ω 1 , ω 2 , . . . , ω M ) T \omega \ =\ \left( \omega _1,\omega _2,...,\omega _M \right) ^T ω = (ω1,ω2,...,ωM)T是线性权重向量;C为数据样本拟合精度函数和回归模型复杂度的加权计算结果。
      并利用非负松弛变量 ξ i \xi _i ξi ξ i ′ \xi _i' ξi 获得与式(3 - 6)的等价的对偶问题:
      { max ⁡ ∑ i = 1 l y i ( β i ′ − β i ) − ε ∑ i = 1 l β i ′ + β i − 0.5 ∑ i = 1 l ∑ j = 1 l ( β i − β i ′ ) ( β j − β j ′ ) K ( x i , x j )    s.t.    ∑ i = 1 l ( β i − β i ′ ) = 0 , 0 ≤ β i , β i ′ ≤ C / l \left\{

      maxi=1lyi(βiβi)εi=1lβi+βi0.5i=1lj=1l(βiβi)(βjβj)K(xi,xj)s.t.\,\,i=1l(βiβi)=0,0βi,βiC/l
      \right. maxs.t.i=1lyi(βiβi)εi=1lβi+βi0.5i=1lj=1l(βiβi)(βjβj)K(xi,xj)i=1l(βiβi)=0,0βi,βiC/l
      其中, β i \beta_i βi β i ′ \beta_i' βi分别是松弛变量 ξ i \xi _i ξi ξ i ′ \xi _i' ξi 对应的Lagrange乘数, K ( x i , x j ) K\left( x_i,x_j \right) K(xi,xj)为满足Mercer条件的核函数。

      因此,测试样本X所对应的输出可以按下式进行预测:
      f ( x ) = ∑ i = 1 l ( β i − β i ′ ) K ( x , x i ) + b f\left( x \right) =\sum_{i=1}^l{\left( \beta _i-\beta _{i}^{'} \right)}K\left( x,x_i \right) +b f(x)=i=1l(βiβi)K(x,xi)+b

      其中核函数有以下四类:
      1.线性核函数(LINEAR): K ( x , x i )   =   x ⋅ x i K\left( x_{},x_i \right) \ =\ x\cdot x_i K(x,xi) = xxi
      2.高斯径向基核函数(RBF): K ( x , x i ) = exp ⁡ ( − ∣ x − x i ∣ 2 δ 2 ) K\left( x,x_i \right) =\exp \left( -\frac{|x-x_i|^2}{\delta ^2} \right) K(x,xi)=exp(δ2xxi2)
      3.多项式核函数(POLY): k ( x , x i ) = [ ( x ⋅ x i ) + d ] q k\left( x,x_i \right) =\left[ \left( x\cdot x_i \right) +d \right] ^q k(x,xi)=[(xxi)+d]q
      4.神经元的非线性作用核函数(Sigmoid): k ( x , x i ) = [ ( x ⋅ x i ) + d ] q k\left( x,x_i \right) =\left[ \left( x\cdot x_i \right) +d \right] ^q k(x,xi)=[(xxi)+d]q

      sklearn中使用SVR实例:

      sklearn.svm.SVR(*, kernel='rbf', degree=3, gamma='scale',
                       coef0=0.0, tol=0.001, C=1.0, epsilon=0.1,
                        shrinking=True, cache_size=200, verbose=False, 
                        max_iter=-1)
      
      • 1
      • 2
      • 3
      • 4

      https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html?highlight=svr#sklearn.svm.SVR

      • 参数:
        kernel:核函数,{‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}, 默认=’rbf’。
        degree:多项式核函数的阶数。默认 = 3。
        C:正则化参数,默认=1.0。(后面会详细介绍)
        epsilon:SVR模型允许的不计算误差的邻域大小。默认0.1。
      from sklearn.svm import SVR
      from sklearn.preprocessing import StandardScaler     # 标准化数据
      from sklearn.pipeline import make_pipeline   # 使用管道,把预处理和模型形成一个流程
      
      reg_svr = make_pipeline(StandardScaler(), SVR(C=1.0, epsilon=0.2))
      reg_svr.fit(X, y)
      reg_svr.score(X,y)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      0.7024525421955279
      
      • 1

      参考资料

      https://blog.csdn.net/qq_34170700/article/details/106150852 三个评价指标
      https://www.jianshu.com/p/6305f2f8077c 线性回归模型原理与推导
      https://blog.csdn.net/weixin_38292570/article/details/104582403 线性回归方程参数的最小二乘估计
      https://blog.csdn.net/luoshixian099/article/details/50880432 几何解释
      https://zhuanlan.zhihu.com/p/109808497 线性回归拓展及介绍
      https://www.cnblogs.com/wuliytTaotao/p/10724118.html 回归树

      声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/277722
      推荐阅读
      相关标签
        

      闽ICP备14008679号