精华内容
下载资源
问答
  • 以二分因变量为例,讨论了中介变量或 ( ) 因变量为类别变量的中介分析 方法的发展过程 ( 即尺度统一的过程 ),建议通过检验 Za×Zb 的显著性来判断中介效应的显著性。用二个实际例子演示如何进行类 别变量的中介...
  • 容忍度(Trlerance):容忍度是每个自变量作为因变量对其他自变量进行回归建模时得到的残差比例,大小用1减得到的决定系数来表示。容忍度的值介于01之间,如果值越小,说明这个自变量与其他自变量间越可能存在共...

    一、如何检验共线性

    • 容忍度(Trlerance):容忍度是每个自变量作为因变量对其他自变量进行回归建模时得到的残差比例,大小用1减得到的决定系数来表示。容忍度的值介于0和1之间,如果值越小,说明这个自变量与其他自变量间越可能存在共线性问题。
    • 方差膨胀因子(Variance Inflation Factor,VIF):VIF是容忍度的倒数,值越大则共线性问题越明显,通常以10作为判断边界。当VIF<10,不存在多重共线性;当10≤VIF<100,存在较强的多重共线性;当VIF≥100,存在严重多重共线性。
    • 特征值(Eigenvalue):实际上就是对自变量进行主成分分析,如果多个维度的特征值等于0,则可能有比较严重的共线性。
    • 除此之外,还可以使用相关系数辅助判断,当相关系数R>0.8时就表示可能存在较强的相关性。

    二、解决共线性的5种常用方法

    要完全解决共线性问题是不可能的,我们只能解决其中严重的共线性问题,而非全部共线性问题。

    1、增大样本量

    通过增加样本量,来消除由于数据不足而出现的偶然共线性现象。

    2、岭回归法(Ridge Regression)和LASSO回归(LASSO Regression)

    岭回归分析是一种专用于多元线性回归模型共线性问题的有偏估计回归方法,实质上是一种改良的最小二乘估计法。它通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价来获得更实际和可靠性更强的回归系数。因此岭回归在存在较强共线性的回归应用中较为常用。

    1)标准线性回归

    我们先来回顾一下标准线性回归:

    给定一组数据其中包括特征矩阵X=\begin{pmatrix} 1& x_{11}& x_{12} & ... &x_{1n} \\ 1& x_{21}& x_{22} & ... &x_{2n} \\ . & . & . & ...& .\\ 1& x_{n1}& x_{n2} & ... &x_{nn} \end{pmatrix} , 目标变量向量y=\begin{pmatrix} y_{1}\\ y_{2}\\ .\\ y_{n} \end{pmatrix},其中X第一列为截距项,我们做线性回归是为了得到一个最优回归系数向量w使得当我们给定一个X的行向量(1,x_{11,x_{12},...,x_{1n})能够通过y=Xw预测y的值。其中w=\begin{pmatrix} w_{1}\\ w_{2}\\ .\\ w_{n} \end{pmatrix}

    最小二乘法获取回归系数

    在标准线性回归中我们需要找到是误差最小的w, 即预测的y值与真实的y值之间的差值。

    f(w)=\sum ^{n}_{i=1}(y_{i}-x_{i}^{T}w)^{2}

    使用矩阵表示将会是的求解和程序更为简单:

    f(w)=(y-Xw)^{T}(y-Xw)=y^{T}y-y^{T}Xw-w^{T}X^{T}y+w^{T}X^{T}Xw

    f(w)w求导可得:

    \frac{\partial f(w)}{\partial w}=-X^{T}y-X^{T}y+2X^{T}Xw

    【注意】

    矩阵求导性质:

    1)、\frac{\partial Ax}{\partial x}=A^{T}

    2)、\frac{\partial x^{T}A}{\partial x}=A

    使其等于0,便可得到:

    0=-X^{T}y-X^{T}y+2X^{T}Xw

    求得:\widehat{w}=(X^{T}X)^{-1}X^{T}y

    标准线性回归的Python实现

    def std_linreg(X, Y):
        xTx = np.dot(X.T,X)
        if np.linalg.det(xTx) == 0:    #求横列式
            print('xTx is a singular matrix')   #奇异矩阵
            return
        return np.dot(np.linalg.inv(xTx),np.dot(X.T,Y))

    2)岭回归(L2正则化)

    如果存在较强的共线性,即X中各列向量之间存在较强的相关性,会导致\left | X^{T}X \right |\approx 0,从而引起(X^{T}X)^{-1}对角线上的 值很大。并且不一样的样本也会导致参数估计值\widehat{w}变化非常大。即参数估计量的方差也增大,对参数的估计会不准确。这个时候我们需要在代价函数f(w)=\sum ^{n}_{i=1}(y_{i}-x_{i}^{T}w)^{2}上添加一个惩罚项 \lambda \sum ^{n}_{i=1}w_{i}^{2},称为L2正则化。

    正则化代价函数:f(w)=\sum ^{n}_{i=1}(y_{i}-x_{i}^{T}w)^{2}+\lambda \sum ^{n}_{i=1}w_{i}^{2}\lambda为岭系数。

    我们希望\sum ^{n}_{i=1}(y_{i}-x_{i}^{T}w)^{2}尽量小,其越小,则拟合程度越高(易过拟合),模型越复杂,进而w_{i}参数越多,如下图所示:

     w_{i}参数越多(或者越大),则\lambda \sum ^{n}_{i=1}w_{i}^{2}越大。两者互相牵制,直到两者找到一个平衡点,这也是岭回归能够实现筛选变量,处理具有多重共线性数据的原理。

    根据拉格朗日乘子法相关概念,可将上式转换为:

    min\,\, \, \, f(w)=\sum ^{n}_{i=1}(y_{i}-x_{i}^{T}w)^{2}

    \\ s.t\, \, \, \, \sum ^{n}_{i=1}w_{i}^{2}\leq t,其中t为某个阈值。

    关于拉格朗日乘子法详细解析请见【如何理解拉格朗日乘子法? 

    以两个自变量为例, 残差平方和可以表示为w_{1}w_{2}的一个二次函数,是一个在三维空间中的抛物面,可以用等值线来表示。而限制条件w_{1}^{2}+w_{2}^{2}\leq t, 相当于在二维平面的一个圆。这个时候等值线与圆相切的点便是在约束条件下的最优点,如下图所示,

    可以得出:

    • 当岭系数\lambda =0时,得到的解是最小二乘解
    • 当岭系数\lambda趋向更大时,岭回归系数w_{i}趋向于0,约束项t很小

    使用矩阵对正则化代价函数求解:

    f(w)=(y-Xw)^{T}(y-Xw)+\lambda w^{T}w=y^{T}y-y^{T}Xw-w^{T}X^{T}y+w^{T}X^{T}Xw+\lambda w^{T}w

    f(w)w求导可得:

    \frac{\partial f(w)}{\partial w}=-X^{T}y-X^{T}y+2X^{T}Xw+\lambda w

    使其等于0,便可得到:

    0=-X^{T}y-X^{T}y+2X^{T}Xw+\lambda w

    求得:\widehat{w}=(X^{T}X+\lambda E)^{-1}X^{T}y(其中E表示单位矩阵)

    岭回归的python实现方式,我们事先设定岭系数\lambda=1:

    def ridge_regression(X,Y, lam=1.0):
        XTX = np.dot(X.T,X)
        m, _ = XTX.shape
        I = np.matrix(np.eye(m))   #np.eye():构建对角矩阵,默认对角1,即单位矩阵    
        return np.dot(np.linalg.inv(XTX + lam*I),np.dot(X.T,Y))

     岭系数的一般选择原则

    • 各回归系数的岭估计基本稳定

    • 用最小二乘法估计时符号不合理的回归系数,其岭估计的符号将变得合理

    • 回归系数没有不合乎经济意义的绝对值

    • 残差平方和增加不太多

     岭系数的一般选择方法

    • 岭迹法

    岭估计\widehat{w}=(X^{T}X+\lambda E)^{-1}X^{T}y的分量\widehat{w}_{i}(\lambda )作为\lambda的函数,当k在(0,\infty] 之间变化时,在平面直角坐标系中\lambda -\widehat{w}_{i}(\lambda )所描绘的图像称为岭迹曲线,我们可以根据岭迹曲线的变化形状来确定适当的\lambda。常用的岭迹曲线及其显示出的相关特点如下:

    在图1中,\widehat{w}_{i}(0)>0,并且比较大。这时可以将x_{j}看做是对y有重要影响的因素。但\widehat{w}_{i}(\lambda )的图形不稳定,当\lambda从零开始略增加时,\widehat{w}_{i}(\lambda )显著地下降,而且迅速趋于零,从岭系数选择的原则看,x_{j}y不起作用。

     与图1相反的情况如图2所示,\widehat{w}_{i}(0)>0,但很接近零,这时x_{j}y的作用不大,但是随着\lambda略增加,\widehat{w}_{i}(\lambda )骤然变为负值,从岭系数选择的原则看,x_{j}y有显著的影响。

    在图3中,\widehat{w}_{i}(0)>0,说明x_{j} 还比较显著,但当\lambda增加时,\widehat{w}_{i}(\lambda )迅速下降,且稳定为负值,这时x_{j} 是对y有重要影响的显著因素,从岭回归分析的角度看, x_{j}y有负影响的因素。

    在图4中,\widehat{w}_{1}(\lambda )\widehat{w}_{2}(\lambda )都很不稳定,但其和却大体稳定。这种情况往往发生在自变量x_{1}x_{2}的相关性很大的场合,即在x_{1}x_{2}之间存在多重共线性的情形,从选择自变量的角度,两者只保存一个就够了。这种情况可以解释某些回归系数估计的符号不合理的情形,从实际观点看,\widehat{w}_{1}\widehat{w}_{2}不应有相反符号。

    从全局看,岭迹分析可用来估计在某一具体问题中最小二乘估计是否适用,把所有回归系数的岭迹都绘制在一张图上,如果这些曲线比较稳定,如图5所示,利用最小二乘估计会有一定的把握。 

    岭迹法缺陷

    岭迹法确定k随缺少严格的令人信服的理论依据,存在着一定的主观人为性。

    • 交叉验证法

    python实现岭回归及岭回归交叉验证 

    import numpy as np
    from sklearn.linear_model import Ridge,RidgeCV   # Ridge岭回归,RidgeCV带有广义交叉验证的岭回归
    
    #导入数据,切分自变量、因变量
    data=np.loadtxt('data5.txt',delimiter='\t')   #读取数据文件
    x=data[:,:-1]
    y=data[:,-1]
    
    
    #岭回归(λ=1)
    model_ridge=Ridge(alpha=1.0)   #建立岭回归模型对象,需要手动指定岭系数λ值
    model_ridge.fit(x,y)
    model_ridge.coef_   #自变量的系数
    model_ridge.intercept_   #截距
    
    print('_________')
    
    #岭回归_交叉验证
    model_ridgecv=RidgeCV() 
    model_ridgecv.fit(x,y)
    model_ridgecv.coef_   #自变量的系数
    model_ridgecv.intercept_   #截距
    model_ridgecv.alpha_   #最佳的λ值,只有在使用RidgeCV算法时才有效

    输出:

    Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
          normalize=False, random_state=None, solver='auto', tol=0.001)
    
    array([ 8.50164360e+01, -1.18330186e-03,  9.80792921e-04, -8.54201056e-04,
            2.10489064e-05,  2.20180449e-04, -3.00990875e-06, -9.30084240e-06,
           -2.84498824e-08])
    
    -7443.986528680895
    
    _________
    
    RidgeCV(alphas=array([ 0.1,  1. , 10. ]), cv=None, fit_intercept=True,
            gcv_mode=None, normalize=False, scoring=None, store_cv_values=False)
    
    array([ 8.51015136e+01, -1.17980885e-03,  9.76130177e-04, -8.54548358e-04,
            3.87041364e-05,  2.21156282e-04,  3.15137208e-04,  4.12017107e-06,
            2.59373337e-06])
    
    -7985.757414143803
    
    0.1

     从结果中我们可以看出,当我们指定\lambda =1时,可能并不是最佳的解,通过交叉验证,最佳的解应该是\lambda =0.1时。

    3)LASSO回归(L1正则化)

    LASSO是在岭回归的基础上发展的。通过构造一个一阶惩罚函数获得一个精炼的模型,通过最终确定一些指标(变量)的系数为0(岭回归估计系数等于0的机会微乎其微,造成筛选变量困难),解释性很强。LASSO回归和岭回归一样是有偏估计。

    LASSO代价函数:

    f(w)=\sum ^{n}_{i=1}(y_{i}-x_{i}^{T}w)^{2}+\lambda \sum ^{n}_{i=1}\left | w_{i} \right |

    根据拉格朗日乘子法相关概念,可将上式转换为:

    min\,\, \, \, f(w)=\sum ^{n}_{i=1}(y_{i}-x_{i}^{T}w)^{2}

    \\ s.t\, \, \, \, \sum ^{n}_{i=1}\left | w_{i} \right |\leq t,其中t为某个阈值。

    关于LASS回归下的w_{i}的求解,这边就不详细介绍了,感兴趣可自行查阅相关资料。

    与岭回归的不同在于,此约束条件使用了绝对值的一阶惩罚函数代替了平方和的二阶函数。虽然只是形式稍有不同,但是得到的结果却又很大差别。在LASSO中,当\lambda很小的时候,一些系数会随着变为0而岭回归却很难使得某个系数恰好缩减为0. 我们可以通过几何解释看到LASSO与岭回归之间的不同。

    同样以两个变量为例,标准线性回归的正则化代价函数还是可以用二维平面的等值线表示,而约束条件则与岭回归的圆不同,LASSO的约束条件可以用方形表示,如下图:

    相比圆,方形的顶点更容易与抛物面相交,顶点就意味着对应的很多系数为0,而岭回归中的圆上的任意一点都很容易与抛物面相交很难得到正好等于0的系数。这也就意味着,lasso起到了很好的筛选变量的作用。 

    python实现LASSO回归及LASSO回归交叉验证 

    import numpy as np
    from sklearn.linear_model import Lasso,LassoCV,LassoLarsCV   # Lasso回归,LassoCV交叉验证实现alpha的选取,LassoLarsCV基于最小角回归交叉验证实现alpha的选取
    
    
    #导入数据,切分自变量、因变量
    data=np.loadtxt('data5.txt',delimiter='\t')   #读取数据文件
    x=data[:,:-1]
    y=data[:,-1]
    
    #lasso回归(λ=1)
    model_lasso=Lasso(alpha=1.0)   #建立岭回归模型对象,需要手动指定岭系数λ值
    model_lasso.fit(x,y)
    model_lasso.coef_   #自变量的系数
    model_lasso.intercept_   #截距
    
    print('_________')
    
    #lasso回归_交叉验证
    model_lassocv=LassoCV() 
    model_lassocv.fit(x,y)
    model_lassocv.coef_   #自变量的系数
    model_lassocv.intercept_   #截距
    model_lassocv.alpha_   #最佳的λ值,只有在使用LassoCV算法时才有效
    
    print('_________')
    
    #基于最小角回归交叉验证实现alpha的选取
    model_lassolarscv=LassoLarsCV()
    model_lassolarscv.fit(x,y)
    model_lassolarscv.coef_   #自变量的系数
    model_lassolarscv.intercept_   #截距
    model_lassolarscv.alpha_   #最佳的λ值,只有在使用LassoLarsCV算法时才有效
    

    输出:

    Lasso(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=1000,
          normalize=False, positive=False, precompute=False, random_state=None,
          selection='cyclic', tol=0.0001, warm_start=False)
    
    array([ 8.39990495e+01, -1.18556429e-03,  1.04475437e-03, -8.53005974e-04,
            2.14916969e-05,  2.14699618e-04, -3.00015988e-06, -9.21929788e-06,
            7.79318985e-08])
    
    -7342.861374586478
    _________
    
    LassoCV(alphas=None, copy_X=True, cv=None, eps=0.001, fit_intercept=True,
            max_iter=1000, n_alphas=100, n_jobs=None, normalize=False,
            positive=False, precompute='auto', random_state=None,
            selection='cyclic', tol=0.0001, verbose=False)
    
    array([ 0.00000000e+00, -0.00000000e+00,  3.49200306e-03, -0.00000000e+00,
            1.48547450e-04, -5.47897248e-05, -9.37424204e-07, -1.01533886e-05,
            4.78920457e-07])
    
    1017.6227734339094
    
    20715.847329354765
    _________
    
    LassoLarsCV(copy_X=True, cv=None, eps=2.220446049250313e-16, fit_intercept=True,
                max_iter=500, max_n_alphas=1000, n_jobs=None, normalize=True,
                positive=False, precompute='auto', verbose=False)
    
    array([8.36747660e+01, 0.00000000e+00, 2.11454616e-04, 0.00000000e+00,
           0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
           0.00000000e+00])
    
    -7307.10167123643
    
    0.054387650333886345

     LassoCV和LassoLarsCV都是对Lasso回归的优化。

    综述

    L2(岭回归)代价函数:f(w)=\sum ^{n}_{i=1}(y_{i}-x_{i}^{T}w)^{2}+\lambda \sum ^{n}_{i=1}w_{i}^{2}

    L1(LASSO回归)代价函数:f(w)=\sum ^{n}_{i=1}(y_{i}-x_{i}^{T}w)^{2}+\lambda \sum ^{n}_{i=1}\left | w_{i} \right |

    观测以上的公式,我们可以总结一个通式:

    f(w)=\sum ^{n}_{i=1}(y_{i}-x_{i}^{T}w)^{2}+\lambda \sum ^{n}_{i=1}\left | w_{i} \right |^{q}

    通过控制q,我们可以得到不同的公式,以下为q为不同值时的惩罚因子的分布:

    3、逐步回归法(Stepwise Regression)

    逐步回归分析,首先要建立因变量y与自变量x之间的总回归方程,再对总的方程及每—个自变量进行假设检验。当总的方程不显著时,表明该多元回归方程线性关系不成立;而当某—个自变量对y影响不显著时,应该把它剔除,重新建立不包含该因子的多元回归方程。筛选出有显著影响的因子作为自变量,并建立“最优”回归方程。

    4、主成分回归(Principal Components Regression)

    通过主成分分析,将原始参与建模的变量转换为少数几个主成分,每个主成分是原变量的线性组合,然后基于主成分做回归分析,这样也可以在不丢失重要数据特征的前提下避开共线性问题。

    import numpy as np
    from sklearn.decomposition import PCA
    from sklearn.linear_model import LinearRegression
    
    
    #导入数据,切分自变量、因变量
    data=np.loadtxt('data5.txt',delimiter='\t')   #读取数据文件
    x=data[:,:-1]
    y=data[:,-1]
    
    #训练pca模型
    model_pca=PCA()
    data_pca=model_pca.fit_transform(x)
    ratio_cs=np.cumsum(model_pca.explained_variance_ratio_)  #主成分方差占比的累积值
    
    rule_index=np.where(ratio_cs>0.8)
    index=rule_index[0][0]   #获取第一次大于0.8的索引值
    data_pca_result=data_pca[:,:index+1]   #提前主成分
    
    model_linear=LinearRegression()  #建立线性回归模型对象
    model_linear.fit(data_pca_result,y)  #输入主成分数据和预测变量y训练模型
    
    model_linear.coef_ #斜率
    model_linear.intercept_   #截距

    输出:

    LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
    
    array([1.26262171e-05])
    
    1058.52726

     满足自变量方差大于0.8的主成分为第一个主成分,假设其为x_{1},那么方程可以写为:

    y=0.000012626171x_{1}+1058.52726

    【注意】

    此时的x_{1}跟岭回归的x_{1}含义不同:岭回归的x_{1}是原始数据中的第一个变量,而PCA过后的x_{1}是第一个主成分——原始数据各个自变量的一个线性组合。

    5、手动剔除

    直接结合人工经验,对参与回归模型计算的自变量进行删减。

     

     

     

    展开全文
  • 利用R进行多元线性回归分析

    千次阅读 2018-03-07 20:15:12
    利用R进行多元线性回归分析对于一个因变量y,n个自变量x1,...,xn,要如何判断y与这n个自变量之间是否存在线性关系呢?肯定是要利用他们的数据集,假设数据集中有m个样本,那么,每个样本都分别对应着一个因变量和一...

    利用R进行多元线性回归分析

    对于一个因变量y,n个自变量x1,...,xn,要如何判断y与这n个自变量之间是否存在线性关系呢?

    肯定是要利用他们的数据集,假设数据集中有m个样本,那么,每个样本都分别对应着一个因变量和一个n维的自变量;

    m个样本,就对应着一个m维的列向量Y,一个m×n维的矩阵X

    Y是X的每一列X1,...,Xn的函数


    那么,Y与X1,...,Xn之间到底是什么关系呢?是满足Y=a1*X1+...+an*Xn这样的线性关系还是Y=f(X1,...,Xn)这样的非线性关系呢?

    为了解决这个问题,可以首先利用多元线性回归

    展开全文
  • 线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。 特点:只有一个自变量的情况称为单变量回归,大于一个自变量情况的叫做多元回归 h(w...

    线性回归

    欠拟合与过拟合

    对线性回归做改进得到了岭回归算法

    逻辑回归,是一个分类算法

    模型保存与加载(不用重复训练)

    无监督学习(以Kmeans为例)

    如何判断一个问题是不是回归问题?
    看目标值是不是连续的数据

    什么是线性回归?
    应用场景:房价预测
    线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。
    特点:只有一个自变量的情况称为单变量回归,大于一个自变量情况的叫做多元回归
    h(w)是目标值
    在这里插入图片描述在这里插入图片描述广义的线性模型
    非线性关系 (参数是一次的,自变量不是一次的),即满足参数是一次的也可以叫线性模型,但已经不是线性关系
    在这里插入图片描述
    线性关系一定是线性模型,线性模型不一定是线性关系

    线性回归的损失和优化原理
    求模型参数,使得模型预测准确
    初始化时先随意给定参数值,输入一组特征值得到的目标值与真实的目标值之间有一定的误差,如果能够通过一种方法将这种误差不断地减少,最终接近于0,则意味着模型参数比较准确,通过这种方法不断的迭代更新权重和偏置,使得预测值和真实值之间中的差距不断地减小,损失接近于0时的参数即是我们要求的参数

    如何衡量预测值与真实值之间的差距?
    损失函数(目标函数、成本函数、cost)

    在这里插入图片描述损失函数
    在这里插入图片描述如何去减少这个损失,使我们预测的更加准确些?既然存在了这个损失,我们一直说机器学习有自动学习的功能,在线性回归这里更是能够体现。这里可以通过一些优化方法去优化(其实是数学当中的求导功能)回归的总损失!!!

    优化方法

    正规方程(直接求解w)
    在这里插入图片描述
    在这里插入图片描述

    梯度下降(先随便给一组权重和偏置,不断试错,改进)

    梯度下降

    在这里插入图片描述
    理解:α为学习速率,需要手动指定(超参数),α旁边的整体表示方向沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新W值
    使用:面对训练数据规模十分庞大的任务 ,能够找到较好的结果

    线性回归API

    LinearRegression用的是正规方程,SGDRegressor用的是梯度下降
    sklearn.linear_model.LinearRegression(fit_intercept=True)
    通过正规方程优化
    fit_intercept:是否计算偏置
    LinearRegression.coef_:回归系数
    LinearRegression.intercept_:偏置

    sklearn.linear_model.SGDRegressor(loss=“squared_loss”, fit_intercept=True, learning_rate =‘invscaling’, eta0=0.01)
    SGDRegressor类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型。
    loss:损失类型
    loss=”squared_loss”: 普通最小二乘法
    fit_intercept:是否计算偏置
    learning_rate : string, optional
    学习率填充
    ‘constant’: eta = eta0
    ‘optimal’: eta = 1.0 / (alpha * (t + t0)) [default]
    ‘invscaling’: eta = eta0 / pow(t, power_t)
    power_t=0.25:存在父类当中
    对于一个常数值的学习率来说,可以使用learning_rate=’constant’ ,并使用eta0来指定学习率。
    SGDRegressor.coef_:回归系数
    SGDRegressor.intercept_:偏置
    sklearn提供给我们两种实现的API, 可以根据选择使用

    波士顿房价预测

    1:获取数据集
    2:划分数据集
    3:特征工程(无量纲化处理–标准化)(比如工资基数较大,而菜价基数较小)
    4:预估器流程
    5:模型评估

    代码

    from sklearn.datasets import load_boston
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import LinearRegression,SGDRegressor
    def Linear1():
       """
       正规模型的优化方法对波士顿房价进行预测
       """
       #1获取数据集
       boston=load_boston()
       #2划分数据集
       x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,random_state=22)
       #特征值boston.data,目标值boston.target,比较梯度下降和正规方程的效果random_state保持一致
       #3标准化(导包 standardscaler)
       transfer=StandardScaler()
       x_train=transfer.fit_transform(x_train)
       x_test=transfer.transform(x_test)
       #4预估器(导入正规方程)
       estimator=LinearRegression()
       estimator.fit(x_train,y_train)#导入训练集的目标值和特征值
       #5得出模型
       print("正规方程权重系数为:\n",estimator.coef_)
       print("正规方程偏置为:\n",estimator.intercept_)
       #6模型评估
       
       return None
    
    def Linear2():
       """
       梯度下降的优化方法对波士顿房价进行预测
       """
       #1获取数据集
       boston=load_boston()
       #2划分数据集
       x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,random_state=22)
       #特征值boston.data,目标值boston.target,比较梯度下降和正规方程的效果random_state保持一致
       #3标准化(导包 standardscaler)
       transfer=StandardScaler()
       x_train=transfer.fit_transform(x_train)
       x_test=transfer.transform(x_test)
       #4预估器(导入正规方程)
       estimator=SGDRegressor()
       estimator.fit(x_train,y_train)#导入训练集的目标值和特征值
       #5得出模型
       print("梯度下降权重系数为:\n",estimator.coef_)
       print("梯度下降偏置为:\n",estimator.intercept_)
       #6模型评估
       
       return None
    
    if __name__=="__main__":
        #正规模型的优化方法对波士顿房价进行预测
        Linear1()
        #梯度下降的优化方法对波士顿房价进行预测
        Linear2()
    

    结果

    正规方程权重系数为:
     [-0.63330277  1.14524456 -0.05645213  0.74282329 -1.95823403  2.70614818
     -0.07544614 -3.29771933  2.49437742 -1.85578218 -1.7518438   0.8816005
     -3.92011059]
    正规方程偏置为:
     22.62137203166228
    
    梯度下降权重系数为:
     [-0.27240108  0.53696638 -0.64692989  0.87562506 -0.69858322  3.18344024
     -0.33745058 -2.17735583  0.75957936 -0.40659529 -1.50892306  0.89870367
     -3.50268629]
    梯度下降偏置为:
     [22.12876303]
    
    

    分析
    特征有多少个,权重系数w就有多少个

    boston=load_boston()
    print("特征数量:\n",boston.data.shape)
    

    可以看出,有13个特征,506个样本

    特征数量:
     (506, 13)
    

    在这里插入图片描述

    如何衡量线性回归的结果好不好?

    引入模型评估方法
    回归当中的数据大小不一致,是否会导致结果影响较大。所以需要做标准化处理。同时我们对目标值也需要做标准化处理。

    回归性能评估
    均方误差(Mean Squared Error)MSE)评价机制:
    在这里插入图片描述
    在这里插入图片描述

    哪一个模型的均方误差小一点,模型效果就好一点

    代码

    from sklearn.metrics import mean_squared_error
     #6模型评估
       y_predict=estimator.predict(x_test)
       print("预测房价:\n", y_predict)
       error=mean_squared_error(y_test,y_predict)
       print("正规方程均方误差为:\n",error)
    
       #6模型评估
       y_predict=estimator.predict(x_test)
       print("预测房价:\n", y_predict)
       error=mean_squared_error(y_test,y_predict)
       print("梯度下降均方误差为:\n",error)
    

    结果

    预测房价:
     [28.23494214 31.51307591 21.11158648 32.66626323 20.00183117 19.06699551
     21.0961119  19.61374904 19.61770489 32.88592905 20.9786404  27.52841267
     15.54828312 19.78740662 36.89507874 18.81564352  9.34846191 18.49591496
     30.67162831 24.30515001 19.06869647 34.10872969 29.82133504 17.52652164
     34.90809099 26.5518049  34.71029597 27.42733357 19.096319   14.92856162
     30.86006302 15.8783044  37.1757242   7.80943257 16.23745554 17.17366271
      7.46619503 20.00428873 40.58796715 28.93648294 25.25640752 17.73215197
     38.74782311  6.87753104 21.79892653 25.2879307  20.43140241 20.47297067
     17.25472052 26.14086662  8.47995047 27.51138229 30.58418801 16.57906517
      9.35431527 35.54126306 32.29698317 21.81396457 17.60000884 22.07940501
     23.49673392 24.10792657 20.13898247 38.52731389 24.58425972 19.7678374
     13.90105731  6.77759905 42.04821253 21.92454718 16.8868124  22.58439325
     40.75850574 21.40493055 36.89550591 27.19933607 20.98475235 20.35089273
     25.35827725 22.19234062 31.13660054 20.39576992 23.99395511 31.54664956
     26.74584297 20.89907127 29.08389387 21.98344006 26.29122253 20.1757307
     25.49308523 24.08473351 19.89049624 16.50220723 15.21335458 18.38992582
     24.83578855 16.59840245 20.88232963 26.7138003  20.75135414 17.87670216
     24.2990126  23.37979066 21.6475525  36.8205059  15.86479489 21.42514368
     32.81282808 33.74331087 20.62139404 26.88700445 22.65319133 17.34888735
     21.67595777 21.65498295 27.66634446 25.05030923 23.74424639 14.65940118
     15.19817822  3.8188746  29.18611337 20.67170992 22.3295488  28.01966146
     28.59358258]
    正规方程均方误差为:
     20.630254348291196
    
    预测房价:
     [27.66363909 30.49605946 20.95212955 31.84830371 20.54695367 18.96940144
     20.647372   19.70065943 19.97196352 31.56739401 20.53653039 25.92409931
     15.00764958 19.6163356  36.28808969 17.4009497  10.80826804 18.60592578
     30.67807547 23.87223308 18.82377759 33.25273579 28.73477636 16.70800683
     33.78446402 24.96350295 32.75360641 27.1845698  18.70117788 17.28903503
     30.07125697 13.17309411 36.56491466 10.41494325 16.56369805 15.51692283
      8.30950345 18.99288915 39.87860832 29.59914769 24.9473262  17.88039965
     39.64957022  6.15908773 20.41712832 23.93321894 21.58719131 20.38976212
     16.35923708 25.97132246  9.56900185 26.14900408 30.16878227 16.57076506
      9.77272199 34.39086185 29.3070208  23.53890718 17.46863613 22.26607107
     22.69026935 22.80244266 20.57906729 37.0564931  26.04335979 19.02383128
     14.45938636  6.3252042  42.21488931 21.33219516 15.13415664 23.42336256
     40.45217331 21.71933353 36.04711631 26.06433739 23.23983732 19.75727425
     25.2602618  25.3647395  30.89442697 19.82334049 23.69792172 30.70169127
     26.56353482 20.53170354 27.64801732 22.85960142 26.11892901 17.34321509
     23.62207936 23.06598961 19.82742576 20.31273894 15.55853688 17.70325571
     23.44432176 16.47933851 19.64172366 26.22651448 20.06747491 18.11691913
     23.09297162 22.2318224  18.90330218 34.97252773 16.25720071 22.65535604
     31.69104792 32.04080276 20.08719511 23.97494715 24.63175838 17.57208693
     21.37694427 21.89842812 27.36225204 25.45620312 22.77565468 13.59313459
     15.87183349  3.05849551 28.08711015 20.44178896 21.68575954 27.39708198
     26.73797763]
    梯度下降均方误差为:
     21.716025149651543
    

    分析
    可以看出,如果按照默认参数设置的话,正规方程相比于梯度下降,均方误差是要小一点的

    调参
    在这里插入图片描述constant表示训练过程中学习率不变(默认是0.01,且在训练过程中会变小)

    在这里插入图片描述

    梯度下降优化器

    GD
    梯度下降(Gradient Descent),原始的梯度下降法需要计算所有样本的值才能够得出梯度,计算量大,所以后面才有会一系列的改进。
    5.2 SGD
    随机梯度下降(Stochastic gradient descent)是一个优化方法。它在一次迭代时只考虑一个训练样本。
    SGD的优点是:
    高效
    容易实现
    SGD的缺点是:
    SGD需要许多超参数:比如正则项参数、迭代数。
    SGD对于特征标准化是敏感的。

    5.3 SAG
    随机平均梯度法(Stochasitc Average Gradient),由于收敛的速度太慢,有人提出SAG等基于梯度下降的算法
    Scikit-learn:SGDRegressor、岭回归、逻辑回归等当中都会有SAG优化

    展开全文
  • 决策树

    2019-09-27 06:05:59
    明确自变量和因变量 确定信息度量的方式 确定终止条件 选择特征 得到当前待处理子集 计算所有特征信息度量 得到当前最佳分类特征 创建分支 根据选中特征将当前记录分成不同分支,分支个数取决于算法 是否终止 ...

    如何构建决策树

    1. 准备工作:
      1. 明确自变量和因变量
      2. 确定信息度量的方式
      3. 确定终止条件
    2. 选择特征
      1. 得到当前待处理子集
      2. 计算所有特征信息度量
      3. 得到当前最佳分类特征
    3. 创建分支
      • 根据选中特征将当前记录分成不同分支,分支个数取决于算法
    4. 是否终止
      • 判断是否满足终止条件
    5. 生成结果
      • 判断是否需要剪枝

    案例

    根据部分电脑购买记录,对购买者建模。该模型可以基于客户的一些信息预测他是否会购买电脑。

    记录标识 人群群体 收入层次 是否单身 信用等级 是否购买电脑
    1 青年 一般
    2 青年 良好
    3 中年 一般
    4 老年 一般
    5 老年 一般
    6 老年 良好
    7 中年 良好
    8 青年 一般
    9 青年 一般
    10 老年 一般
    11 青年 良好
    12 中年 良好
    13 中年 一般
    14 老年 良好

    准备工作

    1. 观察数据,明确自变量和因变量
      • 自变量:人群群体、收入层次、是否单身、信用等级
      • 因变量:是否购买电脑
    2. 明确信息度量方式:信息增益
      • 基尼系数
    3. 明确分支终止条件
      • 纯度
      • 记录条数
      • 循环次数



      构建一棵决策树
    1531067-20190221153039897-1061029007.png

    1531067-20190221153129426-991555641.png

    1531067-20190221153205075-330325940.png
    观察各自的分支,再根据情况选择是否还需要再次挑选特征进行区分,最终的结果如下。
    1531067-20190221153221318-896523015.png

    各类决策树算法的对比

    1531067-20190221153326400-506727661.png

    转载于:https://www.cnblogs.com/shayue/p/10412914.html

    展开全文
  • 回归

    2020-02-28 20:41:00
    自变量叫特征,把因变量叫标注,只是这个标注是连续值,而不是离散值,如果多个变量间的关系用线性关系去考量,那就是线性回归;若果多个变量间用多项式关系去考量,那就是多项式回归。类似的,可以由多种回归方法...
  • 决策树的对比

    2021-06-01 21:26:06
    决策树的演化:ID3->C4.5->CART 下面用图表,直观地对比下这三种决策树 1 如何选择要划分的特征 ...输入自变量 目标因变量 剪枝 预剪枝后剪枝 不同的后剪枝方式 https://blog.csdn.net/wei
  • 回归诊断

    2021-05-14 16:31:09
    不一定,因为有的数据可能并不是线性关系的,对于一元回归问题,我们或许可以通过画图观察自变量和因变量是否可以用线性模型刻画。但是,对于多元回归模型,试图通过画图的方式来判断线性关系是不可行的。那么,一般...
  • 在主函数中输入n值,并作为实参,在调用时传送给s 函数的形参量n( 注意,本例的形参变量和实参变量的标识符都为n, 但这是两个不同的量,各自的作用域不同)。 在主函数中用printf 语句输出一次n值,这个n值是实参n的...
  • c# 加密解密相关代码

    热门讨论 2011-09-06 11:04:59
    心法领悟572:如何判断是否为数字? 开发程序时,经常需要判断输入的字符串是否为数字,如判断输入的电话号码、货币金额邮编等。在程 序中判断是否为数字的方法有很多种,可以使用正则表达式、int.Parse 方法...
  • 机器学习-逻辑回归

    2020-02-10 12:11:23
    逻辑回归 ...逻辑回归使用基础函数(Sigmoid函数)通过估算概率来测量因变量(我们想要预测的标签)一个或者多个自变量之间的关系。 作出预测 这些概率值必须转换为二进制数,以便实际中进行预测。...
  • 第2章 变量和数据存储 2. 1 变量存储在内存(memory)中的什么地方? 2. 2 变量必须初始化吗? 2. 3 什么是页抖动(pagethrashing)? 2. 4 什么是const指针? 2. 5 什么时候应该使用register修饰符?它真的有用吗? ...
  • php高级开发教程说明

    2008-11-27 11:39:22
    点,这些方案一般分为两类:简短的变量和函数名及谈话式的变量和函数名(描述变量类型和 目的的更长的名字)。 某个电话目录可能是这个样子的,如表1 - 1所示。 第1章认开发思想部分3 下载 表1-1 电话目录 姓名地址...
  • 面试题12 如何解决共享组件而导致的应用程序之间的冲突 面试题13 .NET程序的开发运行基本环境是什么 面试题14 解决方案下的一个项目是否就代表一个程序集 面试题15 .NET的应用程序域是什么 2.3 部署与维护 面试...
  • 第2章 数据、变量和计算 29 2.1 C++程序结构 29 2.1.1 main()函数 36 2.1.2 程序语句 36 2.1.3 空白 38 2.1.4 语句块 38 2.1.5 自动生成的控制台程序 39 2.2 定义变量 40 2.2.1 命名变量 40 2.2.2 声明变量...
  • 第2章 数据、变量和计算 31 2.1 C++程序结构 31 2.1.1 程序注释 36 2.1.2 #include指令——头文件 37 2.1.3 命名空间和using声明 37 2.1.4 main()函数 38 2.1.5 程序语句 38 2.1.6 空白 40 2.1.7 ...
  • 4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈。 5.什么是平衡二叉树? 左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。 6.堆栈溢出...
  • 3.3.htm 演示同名局部变量和全局变量的调用情况 3.4htm 引用数值型数据的例子 3.5.htm 数组使用的小例子 3.6.htm 一个字符串型转换为逻辑型数据的例子 3.7.htm 使用...
  • 3.3.htm 演示同名局部变量和全局变量的调用情况 3.4htm 引用数值型数据的例子 3.5.htm 数组使用的小例子 3.6.htm 一个字符串型转换为逻辑型数据的例子 3.7.htm 使用toLowerCase...

空空如也

空空如也

1 2 3 4
收藏数 66
精华内容 26
关键字:

如何判断自变量和因变量