Datawhale集成学习学习笔记——Task02回归

机器学习

机器学习的一个重要的目标就是利用数学模型来理解数据,发现数据中的规律,用作数据的分析和预测。

数据通常由一组向量组成,这组向量中的每个向量都是一个样本,我们用 x i x_i xi来表示一个样本,其中 i = 1 , 2 , 3 , . . . , N i=1,2,3,...,N i=1,2,3,...,N,共N个样本,每个样本 x i = ( x i 1 , x i 2 , . . . , x i p , y i ) x_i=(x_{i1},x_{i2},...,x_{ip},y_i) xi=(xi1,xi2,...,xip,yi)共p+1个维度,前p个维度的每个维度我们称为一个特征,最后一个维度 y i y_i yi我们称为因变量(响应变量)。特征用来描述影响因变量的因素。通常在一个数据表dataframe里面,一行表示一个样本 x i x_i xi,一列表示一个特征。

  • 根据数据是否有因变量,机器学习的任务可分为:

    在这里插入图片描述

    • 有监督学习:给定某些特征去估计因变量,即因变量存在的时候,我们称这个机器学习任务为有监督学习。如:我们使用房间面积,房屋所在地区,环境等级等因素去预测某个地区的房价。
    • 无监督学习:给定某些特征但不给定因变量,建模的目的是学习数据本身的结构和关系。如:我们给定某电商用户的基本信息和消费记录,通过观察数据中的哪些类型的用户彼此间的行为和属性类似,形成一个客群。注意,我们本身并不知道哪个用户属于哪个客群,即没有给定因变量。
  • 根据因变量的是否连续,有监督学习又分为

    • 回归: 连续变量
    • 分类: 离散变量

为了更好地叙述后面的内容,我们对数据的形式作出如下约定:

  • 第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

  • 例子

使用sklearn构建完整的机器学习项目流程

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

基本的回归模型

回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(特征)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。通常使用曲线/直线来拟合数据点,目标是使曲线到数据点的距离差异最小。

  • 选择度量模型性能的指标。
    • Sklearn函数
    • 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
    • MAE平均绝对误差: 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 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
    • 解释方差得分: 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^}
  • 选择具体的模型并进行训练以优化模型。
    • 线性回归模型

      • 假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解损失函数最小时的参数w :
        假设:数据集 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

        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
        
      • 最小二乘估计

        • 衡量真实值 y i y_i yi与线性回归模型的预测值 w T x i w^Tx_i wTxi之间的差距, 使用二范数的平方和L(w)来描述这种差距: L ( w ) = ∑ i = 1 N ∣ ∣ w T x i − y i ∣ ∣ 2 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 − 2 w T X T Y + Y Y T L(w) = \sum\limits_{i=1}^{N}||w^Tx_i-y_i|| _2^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 - 2w^TX^TY+YY^T L(w)=i=1NwTxiyi22=i=1N(wTxiyi)2=(wTXTYT)(wTXTYT)T=wTXTXw2wTXTY+YYT
        • 需要找到使得L(w)最小时对应的参数w, 即: w ^ = a r g m i n    L ( w ) \hat{w} = argmin\;L(w) w^=argminL(w)
        • 求解最小化 L ( w ) L(w) L(w)问题, 使用求导, 即 ∂ 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
      • 几何解释

        两个向量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
        在这里插入图片描述

      • 概率视角

        • 假设噪声 ϵ ∽ 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 o g    ∏ i = 1 N P ( y i ∣ x i ; w ) = ∑ i = 1 N l o g    P ( y i ∣ x i ; w ) = ∑ i = 1 N l o g ( 1 2 π σ e x p ( − ( y i − w T x i ) 2 2 σ 2 ) ) = ∑ i = 1 N [ l o g ( 1 2 π σ ) − 1 2 σ 2 ( y i − w T x i ) 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 ] L(w) = log\;P(Y|X;w) = log\;\prod_{i=1}^N P(y_i|x_i;w) = \sum\limits_{i=1}^{N} log\; P(y_i|x_i;w)\\ = \sum\limits_{i=1}^{N}log(\frac{1}{\sqrt{2\pi \sigma}}exp(-\frac{(y_i-w^Tx_i)^2}{2\sigma^2})) = \sum\limits_{i=1}^{N}[log(\frac{1}{\sqrt{2\pi}\sigma})-\frac{1}{2\sigma^2}(y_i-w^Tx_i)^2] \\ argmax_w L(w) = argmin_w[l(w) = \sum\limits_{i = 1}^{N}(y_i-w^Tx_i)^2]\\ L(w)=logP(YX;w)=logi=1NP(yixi;w)=i=1NlogP(yixi;w)=i=1Nlog(2πσ 1exp(2σ2(yiwTxi)2))=i=1N[log(2π σ1)2σ21(yiwTxi)2]argmaxwL(w)=argminw[l(w)=i=1N(yiwTxi)2]

          线性回归的最小二乘估计<==>噪声 ϵ ∽ N ( 0 , σ 2 ) \epsilon\backsim N(0,\sigma^2) ϵN(0,σ2)的极大似然估计

    • 线性模型推广

      • 多项式回归

        将标准的线性回归模型: 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,因为d越大,多项式曲线就会越光滑,在X的边界处有异常的波动。(图中的边界处的4阶多项式拟合曲线的置信区间(虚线表示置信区间)明显增大,预测效果的稳定性下降。)
        在这里插入图片描述

        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))
        
      • 广义可加模型(GAM)

        广义可加模型GAM实际上是线性模型推广至非线性模型的一个框架,在这个框架中,每一个变量都用一个非线性函数来代替,但是模型本身保持整体可加性。GAM模型不仅仅可以用在线性回归的推广,还可以将线性分类模型进行推广。

        • 标准的线性回归模型: y i = w 0 + w 1 x i 1 + . . . + w p x i p + ϵ i y_i = w_0 + w_1x_{i1} +...+w_px_{ip} + \epsilon_i yi=w0+w1xi1+...+wpxip+ϵ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还是能像线性回归模型一样把其他因素控制不变的情况下单独对某个变量进行推断,极大地保留了线性回归的易于推断的性质。
          • 缺点: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()
      
    • 回归树

      • 回归树和线性回归区别及联系

        • 线性回归对模型形式做了如下假定: 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)
        • 那问题来了,哪种模型更优呢?这个要视具体情况而言,如果特征变量与因变量的关系能很好的用线性关系来表达,那么线性回归通常有着不错的预测效果,拟合效果则优于不能揭示线性结构的回归树。反之,如果特征变量与因变量的关系呈现高度复杂的非线性,那么树方法比传统方法更优。
          在这里插入图片描述
      • 树模型的优缺点:

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

      • 约束优化

        m i n f ( x ) s . t .        g i ( x ) ≤ 0 ,    i = 1 , 2 , . . . , m            h j ( x ) = 0 ,    j = 1 , 2 , . . . , l min f(x) \\ s.t.\;\;\;g_i(x) \le 0,\; i=1,2,...,m\\ \;\;\;\;\; h_j(x) = 0,\; j=1,2,...,l minf(x)s.t.gi(x)0,i=1,2,...,mhj(x)=0,j=1,2,...,l

        假设 x ∗ x^* x为满足以上条件的局部最优解, p = f ( x ∗ ) p^ = f(x^*) p=f(x),目的就是要找到 x ∗ x^* x p ∗ p^* p,满足不等式和等式约束的x集合成为可行域,记作S

      • KTT条件(最优解的一阶必要条件)

        m i n f ( x ) s . t .    g 1 ( x ) ≤ 0 ,    x ∈ R n        g 2 ( x ) ≤ 0        g 3 ( x ) ≤ 0 minf(x)\\ s.t.\;g_1(x) \le 0,\;x \in R^n\\ \;\;\;g_2(x) \le 0\\ \;\;\;g_3(x) \le 0 minf(x)s.t.g1(x)0,xRng2(x)0g3(x)0

        其中 x ∗ x^* x为我们的最优解

        在这里插入图片描述

        ∗ − ∇ f ( x ∗ ) ∗ *-\nabla f(x^*)* f(x)可以由 ∇ g 1 ( x ∗ ) \nabla g_1(x^*) g1(x) ∇ g 2 ( x ∗ ) \nabla g_2(x^*) g2(x)线性表出,因此有: − ∇ f ( x ∗ ) = λ 1 ∇ g 1 ( x ∗ ) + λ 2 ∇ g 2 ( x ∗ ) -\nabla f(x^*) = \lambda_1 \nabla g_1(x^*) + \lambda_2 \nabla g_2(x^*) f(x)=λ1g1(x)+λ2g2(x),其中 λ 1 , λ 2 ≥ 0 \lambda_1,\lambda_2 \ge 0 λ1,λ20,即: ∇ f ( x ∗ ) + λ 1 ∇ g 1 ( x ∗ ) + λ 2 ∇ g 2 ( x ∗ ) = 0 ,        其 中 λ 1 , λ 2 ≥ 0 \nabla f(x^*) + \lambda_1 \nabla g_1(x^*) + \lambda_2 \nabla g_2(x^*) = 0,\;\;\;其中\lambda_1,\lambda_2 \ge 0 f(x)+λ1g1(x)+λ2g2(x)=0,λ1,λ20

        把没有起作用的约束 g 3 ( x ) g_3(x) g3(x)也放到式子里面去,目的也就是为了书写方便,即要求:

        ∇ f ( x ∗ ) + λ 1 ∇ g 1 ( x ∗ ) + λ 2 ∇ g 2 ( x ∗ ) + λ 3 ∇ g 3 ( x ∗ ) = 0 ,        其 中 λ 1 , λ 2 ≥ 0 , λ 3 = 0 \nabla f(x^*) + \lambda_1 \nabla g_1(x^*) + \lambda_2 \nabla g_2(x^*) + \lambda_3 \nabla g_3(x^*)= 0,\;\;\;其中\lambda_1,\lambda_2 \ge 0,\lambda_3 = 0 f(x)+λ1g1(x)+λ2g2(x)+λ3g3(x)=0,λ1,λ20,λ3=0

        由于点 x ∗ x^* x位于方程 g 1 ( x ) = 0 g_1(x)=0 g1(x)=0 g 2 ( x ) = 0 g_2(x)=0 g2(x)=0上,因此: λ 1 g 1 ( x ∗ ) = 0 , λ 2 g 2 ( x ∗ ) = 0 , λ 3 g 3 ( x ∗ ) = 0 \lambda_1 g_1(x^*) = 0,\lambda_2 g_2(x^*) = 0 , \lambda_3 g_3(x^*)= 0 λ1g1(x)=0,λ2g2(x)=0,λ3g3(x)=0

        因此,KKT条件就是:假设 x ∗ x^* x为最优化问题§的局部最优解,且 x ∗ x^* x 在某个适当的条件下 ,有:

        ∇ f ( x ∗ ) + ∑ i = 1 m λ i ∇ g ( x ∗ ) + ∑ j = 1 l μ j ∇ h j ( x ∗ ) = 0 ( 对 偶 条 件 ) λ i ≥ 0 ,    i = 1 , 2 , . . . , m ( 对 偶 条 件 ) g i ( x ∗ ) ≤ 0 ( 原 问 题 条 件 ) h j ( x ∗ ) = 0 ( 原 问 题 条 件 ) λ i g ( x ∗ ) = 0 ( 互 补 松 弛 定 理 ) \nabla f(x^*) + \sum\limits_{i=1}^{m}\lambda_i \nabla g(x^*) + \sum\limits_{j=1}^{l}\mu_j \nabla h_j(x^*) = 0(对偶条件)\\ \lambda_i \ge 0,\;i = 1,2,...,m(对偶条件)\\ g_i(x^*) \le 0(原问题条件)\\ h_j(x^*) = 0(原问题条件)\\ \lambda_i g(x^*) = 0(互补松弛定理) f(x)+i=1mλig(x)+j=1lμjhj(x)=0()λi0,i=1,2,...,m()gi(x)0()hj(x)=0()λig(x)=0()

      • 对偶理论:

        • 为什么要引入对偶问题呢?
          • 是因为原问题与对偶问题就像是一个问题两个角度去看,如利润最大与成本最低等。有时侯原问题上难以解决,但是在对偶问题上就会变得很简单。再者,任何一个原问题在变成对偶问题后都会变成一个凸优化的问题
      • 支持向量回归

        在线性回归的理论中,每个样本点都要计算平方损失,但是SVR却是不一样的。SVR认为:落在 f ( x ) f(x) f(x) ϵ \epsilon ϵ邻域空间中的样本点不需要计算损失,这些都是预测正确的,其余的落在 ϵ \epsilon ϵ邻域空间以外的样本才需要计算损失,因此:

        在这里插入图片描述

        """                     
        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)                 
           - 参数:                   
           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)
        

作业

在这里插入图片描述

  • 请详细阐述线性回归模型的最小二乘法表达

    • 最小二乘法是勒让德(A.M.Legendre)于1805年在其著作《计算彗星轨道的新方法》中提出的。它的主要思想就是求解未知参数,使得理论值与观测值之差(即误差、或者说残差)的平方和达到最小。
    • 衡量真实值 y i y_i yi与线性回归模型的预测值 w T x i w^Tx_i wTxi之间的差距, 使用二范数的平方和L(w)来描述这种差距: L ( w ) = ∑ i = 1 N ∣ ∣ w T x i − y i ∣ ∣ 2 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 − 2 w T X T Y + Y Y T L(w) = \sum\limits_{i=1}^{N}||w^Tx_i-y_i|| _2^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 - 2w^TX^TY+YY^T L(w)=i=1NwTxiyi22=i=1N(wTxiyi)2=(wTXTYT)(wTXTYT)T=wTXTXw2wTXTY+YYT
    • 需要找到使得L(w)最小时对应的参数w, 即: w ^ = a r g m i n    L ( w ) \hat{w} = argmin\;L(w) w^=argminL(w)
    • 求解最小化 L ( w ) L(w) L(w)问题, 使用求导, 即 ∂ 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
  • 在线性回归模型中, 极大似然估计与最小二乘估计有什么联系与区别

    • 线性回归的最小二乘估计<==>噪声 ϵ ∽ N ( 0 , σ 2 ) \epsilon\backsim N(0,\sigma^2) ϵN(0,σ2)的极大似然估计
  • 为什么多项式回归在实际问题中的表现经常不是很好

    对于多项式的阶数d不能取过大,一般不大于3或者4,因为d越大,多项式曲线就会越光滑,在X的边界处有异常的波动。(图中的边界处的4阶多项式拟合曲线的置信区间(虚线表示置信区间)明显增大,预测效果的稳定性下降。)

  • 决策树模型与线性模型之间的联系与差别

    • 回归树和线性回归区别及联系
      • 线性回归对模型形式做了如下假定: 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)
      • 那问题来了,哪种模型更优呢?这个要视具体情况而言,如果特征变量与因变量的关系能很好的用线性关系来表达,那么线性回归通常有着不错的预测效果,拟合效果则优于不能揭示线性结构的回归树。反之,如果特征变量与因变量的关系呈现高度复杂的非线性,那么树方法比传统方法更优。
  • 什么是KKT条件

    • 见上文
  • 为什么要引入原问题的对偶问题

    • 这是因为原问题与对偶问题就像是一个问题两个角度去看,如利润最大与成本最低等。有时侯原问题上难以解决,但是在对偶问题上就会变得很简单。再者,任何一个原问题在变成对偶问题后都会变成一个凸优化的问题,而凸优化问题在求解过程较为简单。
  • 使用CH1机器学习数学基础所学的内容, 找到一个具体的数据集, 使用线性回归模型拟合模型, 要求不能使用sklearn, 只能使用python与numpy

    import numpy as np
    import random
    import matplotlib.pyplot as plt  
    
    #生成数据集
    x = []
    y = []
    for i in range(50):
        x.append(i)
        a = np.random.normal(0, 1, None)
        if np.random.random()>0.5:
            y.append(i + a)
        else:
            y.append(i - a)
    
    xMat = np.mat(x).T; yMat = np.mat(y).T
    def standRegres(xMat,yMat):
        xTx = xMat.T*xMat
        ws = xTx.I * (xMat.T*yMat)       #求 w=(x.T*x).I*x.T*y
        return ws
    
    ws = standRegres(xMat,yMat)
    print(ws)
    plt.figure()
    plt.scatter(x,y,c = 'k')
    plt.plot(x,xMat*ws,'r')
    plt.xlabel('x') 
    plt.ylabel('y')
    plt.show()
    

在这里插入图片描述

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值