IntegratedLearning_Task02集成学习

本文介绍了机器学习项目的基本步骤,包括数据收集、特征选择、模型选择和评估。以波士顿房价数据集为例,展示了如何使用线性回归、度量指标(如MSE、MAE、R²)以及回归树和SVR。讨论了线性回归、决策树和支持向量回归的优缺点,并提供了相应的Python代码实现。
摘要由CSDN通过智能技术生成

Datawhale 集成学习 Task02 笔记

一个完整的机器学习项目分为以下步骤:

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

数据约定如下:

  • 第i个样本: x i = ( x i 1 , x i 2 , . . . , x i p , y i ) T , i = 1 , 2 , . . . , N x_i=(x_{i1},x_{i2},...,x_{ip},y_i)^T,i=1,2,...,N xi=(xi1,xi2,...,xip,yi)T,i=1,2,...,N
  • 因变量 y = ( y 1 , y 2 , . . . , y N ) T y=(y_1,y_2,...,y_N)^T y=(y1,y2,...,yN)T
  • 第k个特征: x ( k ) = ( x 1 k , x 2 k , . . . , x N k ) T x^{(k)}=(x_{1k},x_{2k},...,x_{Nk})^T x(k)=(x1k,x2k,...,xNk)T
  • 特征矩阵 X = ( x 1 , x 2 , . . . , x N ) T X=(x_1,x_2,...,x_N)^T X=(x1,x2,...,xN)T

构建完整回归项目

采用Boston房价数据集。

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()

各个特征的相关解释:

  • CRIM:各城镇的人均犯罪率
  • ZN:规划地段超过25,000平方英尺的住宅用地比例
  • INDUS:城镇非零售商业用地比例
  • CHAS:是否在查尔斯河边(=1是)
  • NOX:一氧化氮浓度(/千万分之一)
  • RM:每个住宅的平均房间数
  • AGE:1940年以前建造的自住房屋的比例
  • DIS:到波士顿五个就业中心的加权距离
  • RAD:放射状公路的可达性指数
  • TAX:全部价值的房产税率(每1万美元)
  • PTRATIO:按城镇分配的学生与教师比例
  • B:1000(Bk - 0.63)^2其中Bk是每个城镇的黑人比例
  • LSTAT:较低地位人口
  • Price:房价

度量模型性能的指标:

  • MSE均方误差: 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.

    from sklearn.metrics import mean_squared_error
    y_true = [3, -0.5, 2, 7]
    y_pred = [2.5, 0.0, 2, 8]
    mean_squared_error(y_true, y_pred)
    # 0.375
    
  • MAE平均绝对误差: MAE ( y , y ^ ) = 1 n s a m p l e s ∑ i = 0 n s a m p l e s − 1 ∣ y i − y ^ i ∣ \text{MAE}(y, \hat{y}) = \frac 1{n_{samples}}\sum^{n_{samples} - 1}_{i =0}|y_i - \hat{y}_i| MAE(y,y^)=nsamples1i=0nsamples1yiy^i

    from sklearn.metrics import mean_absolute_error
    y_true = [3, -0.5, 2, 7]
    y_pred = [2.5, 0.0, 2, 8]
    mean_absolute_error(y_true, y_pred)
    # 0.5
    
  • R 2 R^2 R2决定系数: 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^n_{i=1}(y_i - \hat{y}_i)^2}{\sum^n_{i=1}(y_i-\hat{y})^2} R2(y,y^)=1i=1n(yiy^)2i=1n(yiy^i)2

    from sklearn.metrics import r2_score
    y_true = [3, -0.5, 2, 7]
    y_pred = [2.5, 0.0, 2, 8]
    r2_score(y_true, y_pred)
    # 0.948...
    
  • 解释方差得分: 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^}

    The best possible score is 1.0, lower values are worse.

    from sklearn.metrics import explained_variance_score
    y_true = [3, -0.5, 2, 7]
    y_pred = [2.5, 0.0, 2, 8]
    explained_variance_score(y_true, y_pred)
    # 0.957...
    
  • 点击查看更多。。。https://scikit-learn.org/stable/modules/model_evaluation.html#regression-metrics

线性回归模型

假设:数据集 D = { ( x 1 , y 1 ) , . . . , ( x N , y N ) } D = \{(x_1,y_1),...,(x_N,y_N) \} D={(x1,y1),...,(xN,yN)} x i ∈ R p , y i ∈ R , i = 1 , 2 , . . . , N x_i \in R^p,y_i \in R,i = 1,2,...,N xiRp,yiR,i=1,2,...,N X = ( x 1 , x 2 , . . . , x N ) T , Y = ( y 1 , y 2 , . . . , y N ) T X = (x_1,x_2,...,x_N)^T,Y=(y_1,y_2,...,y_N)^T X=(x1,x2,...,xN)T,Y=(y1,y2,...,yN)T

则 假设 X 和 Y 之间存在线性关系, y ^ = f ( w ) = w T x \hat{y} = f(w) = w^Tx y^=f(w)=wTx $w \in R^{n}, x \in R^{p} $

有关这部分的详细解释: 白板推到系列

(a) 最小二乘估计:
L ( w ) = ∑ i = 1 N ∣ ∣ w T x i − y i ∣ ∣ 2 = ∑ i = 1 N ( w T x i − y i ) 2 = ( w T X T − Y T ) ( w T X T − Y T ) T = w T X T X w − w T X T Y − Y T X w + Y T Y 采 用 公 式 : ( A B ) T = B T A T ( A + B ) T = A T B T L(w) = \sum \limits _{i=1}^{N}||w^Tx_i - y_i||^2 = \sum \limits _{i=1}^{N}(w^Tx_i-y_i)^2 =(w^TX^T-Y^T)(w^TX^T-Y^T)^T \\ = w^TX^TXw - w^TX^TY - Y^TXw + Y^TY \\ 采用公式: \\ (AB)^T = B^TA^T \\ (A + B)^T = A^TB^T L(w)=i=1NwTxiyi2=i=1N(wTxiyi)2=(wTXTYT)(wTXTYT)T=wTXTXwwTXTYYTXw+YTY(AB)T=BTAT(A+B)T=ATBT

因此需要找到使得 L ( w ) L(w) L(w) 最小时对应的参数 w w w, 即:
KaTeX parse error: Undefined control sequence: \part at position 9: \frac {\̲p̲a̲r̲t̲ ̲L(w)}{\part w} …

即,令KaTeX parse error: Undefined control sequence: \part at position 8: \frac {\̲p̲a̲r̲t̲ ̲L(w)}{\part w} …, 即 w = ( X T X ) − 1 X Y T w = (X^TX)^{-1}XY^T w=(XTX)1XYT

(b) 几何解释:

两向量垂直可得: < a , b > = a . b = a T b = 0 <a, b> = a . b = a^Tb =0 <a,b>=a.b=aTb=0

而平面X的法向量为 Y − X w Y-Xw YXw, 可得 X ( Y − X w ) = 0 X(Y-Xw) = 0 X(YXw)=0 w = ( X T X ) − 1 X T Y w = (X^TX)^{-1}X^TY w=(XTX)1XTY

© 概率视角:

LSE(Least Square Estimate 最小二乘估计)<==> MLE (Maximum Likelihood Estimate 极大似然估计)

ε ~ N ( 0 , σ 2 ) \varepsilon~N(0, \sigma ^2) εN(0,σ2)

y = f ( w ) + ε f ( w ) = w T x y = w X + ε y = f(w) + \varepsilon \\ f(w) = w^Tx \\ y = w^X + \varepsilon y=f(w)+εf(w)=wTxy=wX+ε

y ∣ x i w ~ N ( w T x , ε 2 ) y|x_iw ~N(w^Tx, \varepsilon^2) yxiwN(wTx,ε2)

正态分布 公式: P ( y ∣ x i w ) = 1 2 π σ e ( y − w T x ) 2 2 σ 2 P(y|x_iw) = \frac 1{\sqrt{2\pi}\sigma} e^{\frac {(y-w^Tx)^2}{2\sigma^2}} P(yxiw)=2π σ1e2σ2(ywTx)2

MLE (极大似然估计):

L ( w ) = l n P ( Y ∣ x i w ) = l n ∏ i = 1 N P ( y i ∣ x i w ) = ∑ i = 1 N l n P ( y i ∣ x i w ) = ∑ i = 1 N l n 1 2 π σ + 1 2 σ 2 ( y i − w T x i ) 2 L(w) = lnP(Y|x_iw) = ln\prod \limits _{i=1}^{N}P(y_i|x_iw)=\sum\limits_{i=1}^NlnP(y_i|x_iw)\\ =\sum\limits_{i=1}^N ln \frac{1}{\sqrt{2\pi}\sigma} + \frac {1}{2\sigma^2}(y_i-w^Tx_i)^2 L(w)=lnP(Yxiw)=lni=1NP(yixiw)=i=1NlnP(yixiw)=i=1Nln2π σ1+2σ21(yiwTxi)2

w ^ = a r g m a x w L ( w ) = a r g m a x w − 1 2 σ 2 ( y i − w T x i ) 2 = a r g m i n w ( y i − w T x i ) 2 \hat{w} = argmax_wL(w) \\ = argmax_w - \frac 1{2\sigma^2}(y_i-w^Tx_i)^2\\ = argmin_w (y_i-w^Tx_i)^2 w^=argmaxwL(w)=argmaxw2σ21(yiwTxi)2=argminw(yiwTxi)2

线性回归的推广

(a) 多项式回归:

将标准的线性回归模型:
y i = w 0 + w 1 x i + ϵ i y_i = w_0 + w_1 x_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_1 x_i + w_2 x_i^2 + ... + w_dx_i^d + \epsilon yi=w0+w1xi+w2xi2+...+wdxid+ϵ
对于多项式的阶数d不能取过大,一般不大于3或者4,因为d越大,多项式曲线就越光滑,在X的边界处有异常的波动。

`

from sklearn.preprocessing import PolynomialFeatures
X_arr = np.arange(6).reshape(3, 2)
print("原始X为:\n",X_arr)

poly = PolynomialFeatures(2)
print("2次转化X:\n",poly.fit_transform(X_arr))

poly = PolynomialFeatures(interaction_only=True)
print("2次转化X:\n",poly.fit_transform(X_arr))

(b) 广义可加模型(GAM):

广义可加模型GAM实际上是线性模型推广至非线性模型的一个框架,在这个框架中,每一个变量都用一个非线性函数来代替,但是模型本身保持整体可加性。

GAM框架模型:
KaTeX parse error: Expected group after '_' at position 18: …_i = w_0 + \sum_̲\limits{j=1}^{p…
优点 and 缺点

  • 优点:简单容易操作,能够很自然地推广线性回归模型至非线性模型,使得模型的预测精度有所上升;由于模型本身是可加的,因此GAM还是能像线性回归模型一样把其他因素控制不变的情况下单独对某个变量进行推断,极大地保留了线性回归的易于推断的性质。
  • 缺点:GAM模型会经常忽略一些有意义的交互作用,比如某两个特征共同影响因变量,不过GAM还是能像线性回归一样加入交互项 x ( i ) × x ( j ) x^{(i)} \times x^{(j)} x(i)×x(j) 的形式进行建模;但是GAM模型本质上还是一个可加模型,如果我们能摆脱可加模型形式,可能还会提升模型预测精度。
from pygam import LinearGAM
gam = LinearGAM().fit(boston_data[boston.feature_names], y)
gam.summary()

回归树

基于树的回归方法主要是依据分层和分割的方式将特征空间划分为一系列简单的区域。对某个给定的待预测的自变量,用他所属区域中训练集的平均数或者众数对其预测。由于划分特征空间的分裂规则可以用树的形式进行概括,因此这类方法称为决策树方法。

决策树由结点(node)和有向边(direcdcted edge)组成。

结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点有一个特征或属性,叶结点表示一个类别或者某个值。

建立回归树的过程:

  • 将自变量的特征空间(即 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)

    KaTeX parse error: Expected group after '_' at position 24: …}[min_{c1} \sum_̲\limits{x_i\in …

  • 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. 继续调用步骤a, b 直到满足停止条件, 就是每个区域的样本数小于等于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)

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

线性回归模型的模型形式与树模型的模型形式有着本质的区别,具体而言,线性回归对模型形式做了如下假定: 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)

树模型的优缺点:

  • 树模型的解释性强,在解释性方面可能比线性回归还要方便。
  • 树模型更接近人的决策方式。
  • 树模型可以用图来表示,非专业人士也可以轻松解读。
  • 树模型可以直接做定性的特征而不需要像线性回归一样哑元化。
  • 树模型能很好处理缺失值和异常值,对异常值不敏感,但是这个对线性模型来说却是致命的。
  • 树模型的预测准确性一般无法达到其他回归模型的水平,但是改进的方法很多。
from sklearn.tree import DecisionTreeRegressor    
reg_tree = DecisionTreeRegressor(criterion = "mse",min_samples_leaf = 5)
reg_tree.fit(X,y)
reg_tree.score(X,y)

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。

https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html?highlight=tree#sklearn.tree.DecisionTreeRegressor

支持向量回归 (SVR)

在线性回归的理论中,每个样本点都要计算平方损失,但是SVR却是不一样的。SVR认为:落在 f ( x ) f(x) f(x) ϵ \epsilon ϵ邻域空间中的样本点不需要计算损失,这些都是预测正确的,其余的落在 ϵ \epsilon ϵ邻域空间以外的样本才需要计算损失,因此:
m i n w , b , ξ i , ξ ^ i 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 N ( ξ i , ξ ^ i ) s . t .        f ( x i ) − y i ≤ ϵ + ξ i            y i − f ( x i ) ≤ ϵ + ξ ^ i            ξ i , ξ ^ i ≤ 0 , i = 1 , 2 , . . . , N min_{w,b,\xi_i,\hat{\xi}_i} \frac{1}{2}||w||^2 +C \sum\limits_{i=1}^{N}(\xi_i,\hat{\xi}_i)\\ s.t.\;\;\; f(x_i) - y_i \le \epsilon + \xi_i\\ \;\;\;\;\;y_i - f(x_i) \le \epsilon +\hat{\xi}_i\\ \;\;\;\;\; \xi_i,\hat{\xi}_i \le 0,i = 1,2,...,N minw,b,ξi,ξ^i21w2+Ci=1N(ξi,ξ^i)s.t.f(xi)yiϵ+ξiyif(xi)ϵ+ξ^iξi,ξ^i0,i=1,2,...,N
引入拉格朗日函数:
L ( w , b , α , α ^ , ξ , ξ , μ , μ ^ ) = 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ( ξ i + ξ ^ i ) − ∑ i = 1 N ξ i μ i − ∑ i = 1 N ξ ^ i μ ^ i + ∑ i = 1 N α i ( f ( x i ) − y i − ϵ − ξ i ) + ∑ i = 1 N α ^ i ( y i − f ( x i ) − ϵ − ξ ^ i ) \begin{array}{l} L(w, b, \alpha, \hat{\alpha}, \xi, \xi, \mu, \hat{\mu}) \\ \quad=\frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N}\left(\xi_{i}+\widehat{\xi}_{i}\right)-\sum_{i=1}^{N} \xi_{i} \mu_{i}-\sum_{i=1}^{N} \widehat{\xi}_{i} \widehat{\mu}_{i} \\ \quad+\sum_{i=1}^{N} \alpha_{i}\left(f\left(x_{i}\right)-y_{i}-\epsilon-\xi_{i}\right)+\sum_{i=1}^{N} \widehat{\alpha}_{i}\left(y_{i}-f\left(x_{i}\right)-\epsilon-\widehat{\xi}_{i}\right) \end{array} L(w,b,α,α^,ξ,ξ,μ,μ^)=21w2+Ci=1N(ξi+ξ i)i=1Nξiμii=1Nξ iμ i+i=1Nαi(f(xi)yiϵξi)+i=1Nα i(yif(xi)ϵξ i)
再令 L ( w , b , α , α ^ , ξ , ξ , μ , μ ^ ) L(w, b, \alpha, \hat{\alpha}, \xi, \xi, \mu, \hat{\mu}) L(w,b,α,α^,ξ,ξ,μ,μ^) w , b , ξ , ξ ^ w,b,\xi,\hat{\xi} w,b,ξ,ξ^求偏导等于0,得: w = ∑ i = 1 N ( α ^ i − α i ) x i w=\sum_{i=1}^{N}\left(\widehat{\alpha}_{i}-\alpha_{i}\right) x_{i} w=i=1N(α iαi)xi
上述过程中需满足KKT条件,即要求:
{ α i ( f ( x i ) − y i − ϵ − ξ i ) = 0 α i ^ ( y i − f ( x i ) − ϵ − ξ ^ i ) = 0 α i α ^ i = 0 , ξ i ξ ^ i = 0 ( C − α i ) ξ i = 0 , ( C − α ^ i ) ξ ^ i = 0 \left\{\begin{array}{c} \alpha_{i}\left(f\left(x_{i}\right)-y_{i}-\epsilon-\xi_{i}\right)=0 \\ \hat{\alpha_{i}}\left(y_{i}-f\left(x_{i}\right)-\epsilon-\hat{\xi}_{i}\right)=0 \\ \alpha_{i} \widehat{\alpha}_{i}=0, \xi_{i} \hat{\xi}_{i}=0 \\ \left(C-\alpha_{i}\right) \xi_{i}=0,\left(C-\widehat{\alpha}_{i}\right) \hat{\xi}_{i}=0 \end{array}\right. αi(f(xi)yiϵξi)=0αi^(yif(xi)ϵξ^i)=0αiα i=0,ξiξ^i=0(Cαi)ξi=0,(Cα i)ξ^i=0
SVR的解形如: f ( x ) = ∑ i = 1 N ( α ^ i − α i ) x i T x + b f(x)=\sum_{i=1}^{N}\left(\widehat{\alpha}_{i}-\alpha_{i}\right) x_{i}^{T} x+b f(x)=i=1N(α iαi)xiTx+b

t)-\epsilon-\hat{\xi}{i}\right)=0 \
\alpha
{i} \widehat{\alpha}{i}=0, \xi{i} \hat{\xi}{i}=0 \
\left(C-\alpha
{i}\right) \xi_{i}=0,\left(C-\widehat{\alpha}{i}\right) \hat{\xi}{i}=0
\end{array}\right.
$$
SVR的解形如: f ( x ) = ∑ i = 1 N ( α ^ i − α i ) x i T x + b f(x)=\sum_{i=1}^{N}\left(\widehat{\alpha}_{i}-\alpha_{i}\right) x_{i}^{T} x+b f(x)=i=1N(α iαi)xiTx+b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

involute__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值