精华内容
下载资源
问答
  • 我在为一套7个预测变量,1个响应变量,400个采样的数据建立模型。很奇怪,有一个变量在包含所有预测变量多元线性统计模型中统计不显著,但是在只包含自己的简单线性模型中统计显著。如何抉择?
  • 多元线性回归

    千次阅读 2015-10-07 11:45:51
    2>多元线性回归 1. 在求解回归方程的时候我们经常会一个一个的去试验,那些结果才是方程最终满足的,下面要介绍的就是,如何利用方法来调最优。 2. 应该选择那些变量? RSS(残差平和)与R^2(相关系数平方)选择...

    这里写图片描述
    2>多元线性回归
    1. 在求解回归方程的时候我们经常会一个一个的去试验,那些结果才是方程最终满足的,下面要介绍的就是,如何利用方法来调最优。
    2. 应该选择那些变量?
    RSS(残差平和)与R^2(相关系数平方)选择法:遍历 所有可能的组合,选出使RSS最小,R^2最大的模型。
    3. AIC准则
    赤池信息量准则 (Akaike Information Criterion ( AIC ))是衡量统计模型拟合优良性的一种标准,常用与最大似然估计。AIC定量的定义了测试模型,但是如果所有的模型都不能很好的表示测试数据,AIC也有一种无力感。AIC计算了给定模型和真实模型之间的KL值。
    AIC的值越小,说明拟合的越好。
    3>逐步回归
    R软件提供了较为方便的”逐步回归”计算函数step(),它是以AIC信息统计量为准则,通过选择最小的AIC信息统计量,来达到删除或增加变量的目的。
    step() 函数的使用格式:
    step(object, scope, scale = 0,
    direction = c(“both”, “backward”, “forward”),
    trace = 1, keep = NULL, steps = 1000, k = 2, …)
    object: 回归模型
    scope: 是确定逐步搜索的区域。
    scale:用于AIC统计量。
    direction: 确定逐步搜索的方向。
    forward(向前引入法): 从意愿开始,逐步向后面增加变量,直到使指标值达到最优为止。
    Backforward(向后剔除法):把所有的变量都拟合到回归线上,然后逐步删除某个变量,最后使指标达到最优为止。
    both(逐步筛选法): 综合上述两种方法。
    例子:
    这里写图片描述
    这里写图片描述
    从上面可以看出,拟合的非常差,下面用step()来调优。
    这里写图片描述
    这里写图片描述
    当然,也可以

    s1=step(lm.sol,direction=”backward”)效果是一样的。
    从事的AIC那一栏可以看出,剔除X3会使得AIC=24.97,会使得它下降。
    这里写图片描述
    这里写图片描述
    星太少啦,继续拟合,但是用何方法呢?
    在R软件中。还有两个函数可以用来作逐步回归,这两个函数式add1()和drop1(),它们的使用格式为:
    add1(object, scope, …)
    drop1(object, scope, …)
    object是拟合模型构成的对象,scope是模型考虑增加或去掉项构的公式。
    这里写图片描述
    从上面可以看到,去掉X4的话,AIC从24.974,上升到25.420,是增加最小的,与此同时,RSS的值上升也是最小的,因此去除X4.
    这里写图片描述
    此时,各方面都非常高,终于调到最优啦。
    综上:
    回归方程为:这里写图片描述

    展开全文
  • 多元线性回归:这是一种线性回归的形式,当有两个或多个预测因子时使用。 我们将看到多个输入变量如何共同影响输出变量,同时还将了解计算与简单LR模型的不同之处。我们还将使用Python构建一个回归模型。 最后,我们...

    线性回归是最流行和讨论最多的模型之一,它无疑是深入机器学习(ML)的入门之路。这种简单、直接的建模方法值得学习,这是进入ML的第一步。

    在继续讨论之前,让我们回顾一下线性回归可以大致分为两类。

    简单线性回归:当只有一个输入变量时,它是线性回归最简单的形式。

    多元线性回归:这是一种线性回归的形式,当有两个或多个预测因子时使用。

    我们将看到多个输入变量如何共同影响输出变量,同时还将了解计算与简单LR模型的不同之处。我们还将使用Python构建一个回归模型。

    最后,我们将深入学习线性回归,学习共线性、假设检验、特征选择等内容。

    现在有人可能会想,我们也可以用简单的线性回归来分别研究我们对所有自变量的输出。

    为什么需要线性回归

    从多个输入变量预测结果。但是,真的是这样吗?

    考虑到这一点,假设你要估算你想买的房子的价格。你知道建筑面积,房子的年代,离你工作地点的距离,这个地方的犯罪率等等。

    现在,这些因素中的一些将会对房价产生积极的影响。例如,面积越大,价格越高。另一方面,工作场所的距离和犯罪率等因素会对你对房子的估计产生负面影响。

    简单线性回归的缺点:当我们只对一个结果感兴趣时,运行单独的简单线性回归会导致不同的结果。除此之外,可能还有一个输入变量本身与其他一些预测器相关或依赖于其他一些预测器。这可能会导致错误的预测和不满意的结果。

    这就是多元线性回归发挥作用的地方。

    数学公式

    这里,Y是输出变量,X项是相应的输入变量。注意,这个方程只是简单线性回归的延伸,和每个指标都有相应的斜率系数(β)。

    β的第一个参数(βo)是拦截常数和Y的值是在缺乏预测(我。e当所有X项都为0时),它在给定的回归问题中可能有意义,也可能有意义,也可能没有意义。它通常在回归的直线/平面上提供一个相关的推动。

    可视化数据

    我们将使用南加州大学马歇尔商学院网站上的广告数据。你可以在这里下载。

    http://faculty.marshall.usc.edu/gareth-james/ISL/data.html

    广告数据集包括产品在200个不同市场的销售情况,以及三种不同媒体(电视、广播和报纸)的广告预算。它是这样的

    第一行数据显示,电视、广播和报纸的广告预算分别为230.1k美元、37.8k美元和69.2k美元,相应的销售量为22.1k(或22.1万)。

    在简单的线性回归中,我们可以看到在不使用其他两种媒体的情况下,每一种广告媒体是如何影响销售的。然而,在实践中,这三者可能会共同影响净销售额。我们没有考虑这些媒体对销售的综合影响。

    多元线性回归通过在一个表达式中考虑所有变量来解决这个问题。因此,我们的线性回归模型现在可以表示为:

    发现这些常数的值(β)是什么回归模型通过最小化误差函数,拟合最好的行或超平面(根据输入变量的数量)。这是通过最小化残差平方和( Residual Sum of Squares)来实现的,残差平方和是通过将实际结果和预测结果之间的差异平方得到的。

    普通最小二乘法

    因为这种方法求最小平方和,所以也称为普通最小二乘法(OLS)。在Python中,有两种主要的方法来实现OLS算法。

    SciKit Learn:只需从Sklearn包中导入线性回归模块并将模型与数据匹配即可。这个方法非常简单,您可以在下面看到如何使用它。

    from sklearn.linear_model import LinearRegressionmodel = LinearRegression()
    model.fit(data.drop('sales', axis=1), data.sales)
    

    StatsModels:另一种方法是使用StatsModels包来实现OLS。Statsmodels是一个Python包,允许对数据执行各种统计测试。我们将在这里使用它,以便您可以了解这个很棒的Python库,因为它将在后面的部分中对我们有帮助。

    建立模型并解释系数

    # Importing required libraries
    import pandas as pd
    import statsmodels.formula.api as sm# Loading data - You can give the complete path to your data here
    ad = pd.read_csv("Advertising.csv")# Fitting the OLS on data
    model = sm.ols('sales ~ TV + radio + newspaper', ad).fit()
    print(model.params)
    

    输出

    Intercept    2.938889
    TV           0.045765
    radio        0.188530
    newspaper   -0.001037
    

    Scikit Learn运行回归模型是最简单的方式,并且可以使用模型找到上面的参数。coef_ & model.intercept_。

    现在我们有了这些值,如何解释它们呢?

    1. 如果我们确定电视和报纸的预算,那么增加1000美元的广播预算将导致销售增加189个单位(0.189*1000)。

    2. 同样地,通过固定广播和报纸,我们推断电视预算每增加1000美元,产品大约增加46个单位。

    3. 然而,对于报纸预算来说,由于系数几乎可以忽略不计(接近于零),很明显报纸并没有影响销售。事实上,它在0的负的一边(-0.001),如果幅度足够大,可能意味着这个代理是导致销售下降。但我们不能以如此微不足道的价值做出这种推断。

    如果我们仅使用报纸预算与销售进行简单的线性回归,我们将观察到系数值约为0.055,这与我们上面看到的相比是非常显著的。为什么会这样呢?

    共线性

    ad.corr()
    

    让我们用热图把这些数字形象化。

    import matplotlib.pyplot as plt
    %matplotlib inline> plt.imshow(ad.corr(), cmap=plt.cm.GnBu,        interpolation='nearest',data=True)
    > plt.colorbar()
    > tick_marks = [i for i in range(len(ad.columns))]
    > plt.xticks(tick_marks, data.columns, rotation=45)
    > plt.yticks(tick_marks, data.columns, rotation=45)
    

    这里黑色的方块表示相关性很强(接近于1),而较亮的方块表示相关性较弱(接近于0)。这就是为什么所有的对角线都是深蓝色的,因为一个变量与它自己是完全相关的。

    值得注意的是报纸和广播的相关性是0。35。这表明报纸和广播预算之间的关系是公平的。因此,可以推断出→当产品的广播预算增加时,在报纸上的花费也有增加的趋势。

    这称为共线性,指的是两个或多个输入变量是线性相关的情况。

    因此,尽管多元回归模型对报纸的销售没有影响,但是由于这种多重共线性和其他输入变量的缺失,简单回归模型仍然对报纸的销售有影响。

    我们理解了线性回归,我们建立了模型,甚至解释了结果。到目前为止我们学的是线性回归的基础。然而,在处理实际问题时,我们通常会超越这一点,统计分析我们的模型,并在需要时进行必要的更改。

    预测因子的假设检验

    在运行多元线性回归时应该回答的一个基本问题是,至少有一个预测器在预测输出时是否有用。

    我们发现,电视、广播和报纸这三个预测因子与销售额之间存在不同程度的线性关系。但是,如果这种关系只是偶然发生的,并且没有因为任何预测因素而对销售产生实际影响呢?

    该模型只能给我们数字,以在响应变量和预测因子之间建立足够紧密的线性关系。然而,它无法证明这些关系的可信性。

    我们从统计数据中获得帮助,并做一些被称为假设检验的事情。我们首先建立一个零假设和一个相应的备择假设。

    因为我们的目标是找到至少一个预测器在预测输出时是否有用,所以我们在某种程度上希望至少有一个系数(不是截距)是非零的,这不仅仅是由于随机的机会,而是由于实际原因。为此,我们首先形成一个零假设:所有系数都等于零。

    多元线性回归的一般零假设

    广告数据的零假设

    因此,备择假设是:至少有一个系数不为零。通过发现有力的统计证据来拒绝原假设,从而证明了这一点

    假设检验采用F-statistic进行。这个统计数据的公式包含残差平方和(RSS)和总平方和(TSS),我们不需要担心这一点,因为Statsmodels包会处理这个问题。我们在上面拟合的OLS模型的总结包含了所有这些统计数据的总结,可以用这行简单的代码得到:

    print(model.summary2())
    

    如果F-statistic的值等于或非常接近1,那么结果是支持零假设的,我们不能拒绝它。

    但是我们可以看到,F-statistic比1大很多倍,因此为零假设(所有系数都为零)提供了有力的证据。因此,我们拒绝原假设,并相信至少有一个预测器在预测输出时是有用的。

    注意,当预测因子§的数量很大,或者p大于数据样本的数量(n)时,f统计量是不合适的。

    因此,我们可以说,在这三家广告代理商中,至少有一家在预测销售额方面是有用的。

    但是哪一个或哪两个是重要的呢?它们都重要吗?为了找到这一点,我们将执行特征选择或变量选择。一种方法是尝试所有可能的组合。

    • Only TV
    • Only radio
    • Only newspaper
    • TV & radio
    • TV & newspaper
    • radio & newspaper
    • TV, radio & newspaper

    在这里,尝试所有7种组合仍然是可行的,但是如果有更多的预测因子,组合的数量将呈指数增长。例如,通过在我们的案例研究中再增加一个预测因子,总组合数将变为15。想象一下有一打预测器。因此,我们需要更有效的方法来执行特性选择。

    特征选择

    做特征选择的两种最流行的方法是:

    正向选择:我们从一个没有任何预测器的模型开始,只使用截距项。然后,我们对每个预测器执行简单的线性回归,以找到最佳执行器(最低RSS)。然后我们添加另一个变量,并再次通过计算最低的RSS(残差平方和)来检查最佳的2变量组合。然后选择最佳的3变量组合,以此类推。当满足某种停止规则时,停止该方法。

    逆向选择:我们从模型中的所有变量开始,然后删除统计意义最小的变量(更大的p值:检查上面的模型摘要,找到变量的p值)。重复此操作,直到达到停止规则为止。例如,我们可以在模型分数没有进一步提高的时候停止。

    在这篇文章中,我将介绍向前选择方法。首先,让我们了解如何选择或拒绝添加的变量。

    我们要使用2种方法来评估我们的新模型:RSS和R²。

    我们已经熟悉RSS,它是残差平方和,通过将实际输出和预测结果之间的差平方来计算。它应该是模型表现良好的最小值。R²方差的程度的测量数据是用模型来解释。

    数学上,它是实际结果和预测结果之间相关性的平方。R²接近1表明模型是好的和解释方差数据。接近于零的值表示模型很差。

    # Defining a function to evaluate a model
    def evaluateModel(model):
        print("RSS = ", ((ad.sales - model.predict())**2).sum())
        print("R2 = ", model.rsquared)
    

    让我们首先使用单个预测器逐个评估模型,从TV开始。

    # For TV
    model_TV = sm.ols('sales ~ TV', ad).fit()
    evaluateModel(model_TV)
    

    RSS = 2102.5305831313512
    R^2 = 0.611875050850071

    # For radio
    model_radio = sm.ols('sales ~ radio', ad).fit()
    evaluateModel(model_radio)
    

    RSS = 3618.479549025088
    R^2 = 0.33203245544529525

    # For newspaper
    model_newspaper = sm.ols('sales ~ newspaper', ad).fit()
    evaluateModel(model_newspaper)
    

    RSS = 5134.804544111939
    R^2 = 0.05212044544430516

    我们观察到model_TV, RSS和R²最小值是最在所有的模型。因此,我们选择model_TV作为向前基础模型。现在,我们将逐个添加广播和报纸,并检查新值。

    # For TV & radio
    model_TV_radio = sm.ols('sales ~ TV + radio', ad).fit()
    evaluateModel(model_TV_radio)
    

    RSS = 556.9139800676184
    R^2 = 0.8971942610828957

    正如我们所看到的,我们的价值观有了巨大的进步。RSS下降和R²进一步增加,model_TV相比。这是个好兆头。现在我们来看看电视和报纸。

    # For TV & newspaper
    model_TV_radio = sm.ols('sales ~ TV + newspaper', ad).fit()
    evaluateModel(model_TV_newspaper)
    

    RSS = 1918.5618118968275
    R^2 = 0.6458354938293271

    报纸的加入也提高了报纸的价值,但不如广播的价值高。因此,在这一步,我们将继续电视和广播模型,并将观察当我们添加报纸到这个模型的差异

    # For TV, radio & newspaper
    model_all = sm.ols('sales ~ TV + radio + newspaper', ad).fit()
    evaluateModel(model_all)
    

    RSS = 556.8252629021872
    R^2 = 0.8972106381789522

    这些值没有任何显著的改进。因此,有必要不添加报纸,并最终确定模型与电视和广播作为选定的功能。所以我们最终的模型可以表示为:

    在3D图形中绘制变量TV、radio和sales,我们可以可视化我们的模型如何将回归平面与数据匹配。

    希望看完这篇文章后你会对多元线性回归有一个新的理解

    展开全文
  • 多元线性回归:训练数据中特征数量是多个 y=W1X1+W2X2+W3X3+…+b 或表示为:y=Wx+b(W:w1,w2,w3…组成的向量的转置) 模型训练为的就是确定参数W的取值: 但是,当测试数据中,特征数量比样本数还多的多的时候,可能...

    线性回归



    一元线性回归:训练数据中特征是单个,但特征值可以是多个 y=wx+b (w: 是单个值)
    多元线性回归:训练数据中特征数量是多个 y=W1X1+W2X2+W3X3+…+b 或表示为:y=Wx+b(W:w1,w2,w3…组成的向量的转置)

    模型训练为的就是确定参数W的取值
    但是,当测试数据中,特征数量比样本数还多的多的时候,可能产生多组解(解线性方程组的时候,因变量过多,则有可能解出多组解),多组解如何选择呢?取决余算法的归纳偏好,所有就有了正则化。

    正则化项:L1范数和L2范数

    损失函数:均方误差的最小值时+正则化项 => 进而可以降低过拟合的风险
    L1 L2都可以降低过拟合风险,但L1有个额外的优点:更容易获得稀疏解,就是求得的W向量中会有更少的非零值

    补充:范数
    范数是具有“长度”概念的函数。在向量空间内,为所有的向量的赋予非零的增长度或者大小。不同的范数,所求的向量的长度或者大小是不同的。
    举个例子,2维空间中,向量(3,4)的长度是5,那么5就是这个向量的一个范数的值,更确切的说,是欧式范数或者L2范数的值。

    特别的,L0范数:指向量中非零元素的个数。无穷范数:指向量中所有元素的最大绝对值。

    L0范数是指向量中非0的元素的个数。(L0范数很难优化求解)
    L1范数是指向量中各个元素绝对值之和
    L2范数是指向量各元素的平方和然后求平方根
    L1范数可以进行特征选择,即让特征的系数变为0.
    L2范数可以防止过拟合,提升模型的泛化能力,有助于处理 condition number不好下的矩阵(数据变化很小矩阵求解后结果变化很大)
    (核心:L2对大数,对outlier离群点更敏感!)
    下降速度:最小化权值参数L1比L2变化的快
    模型空间的限制:L1会产生稀疏 L2不会。
    L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。

    L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。现在我们来分析下这个价值一个亿的问题:为什么L1范数会使权值稀疏?有人可能会这样给你回答“它是L0范数的最优凸近似”。实际上,还存在一个更美的回答:任何的规则化算子,如果他在Wi=0的地方不可微,并且可以分解为一个“求和”的形式,那么这个规则化算子就可以实现稀疏。这说是这么说,W的L1范数是绝对值,|w|在w=0处是不可微,但这还是不够直观。这里因为我们需要和L2范数进行对比分析。所以关于L1范数的直观理解,请待会看看第二节。

    对了,上面还有一个问题:既然L0可以实现稀疏,为什么不用L0,而要用L1呢?个人理解一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。所以大家才把目光和万千宠爱转于L1范数。

    OK,来个一句话总结:L1范数和L0范数可以实现稀疏,L1因具有比L0更好的优化求解特性而被广泛应用。

    有了稀疏解有什么好处呢?

    它表示了你训练时的所有特征并没有都用到你得到的模型中,仅有W(表示:向量)对应的非零值的特征才出现在最终模型中 =》这就起到了特征选择的作用(也就降低了过拟合的风险)

    Reference

    1. https://www.cnblogs.com/soyo/p/7838496.html
    2. https://blog.csdn.net/rocling/article/details/90290576
    展开全文
  • 线性回归是最流行和讨论最多的模型之一,它无疑是深入...多元线性回归:这是一种线性回归的形式,当有两个或多个预测因子时使用。我们将看到多个输入变量如何共同影响输出变量,同时还将了解计算与简单LR模型的不同...

    67c584ce196b4187914352ffe39cfab2

    线性回归是最流行和讨论最多的模型之一,它无疑是深入机器学习(ML)的入门之路。这种简单、直接的建模方法值得学习,这是进入ML的第一步。

    在继续讨论之前,让我们回顾一下线性回归可以大致分为两类。

    简单线性回归:当只有一个输入变量时,它是线性回归最简单的形式。

    多元线性回归:这是一种线性回归的形式,当有两个或多个预测因子时使用。

    我们将看到多个输入变量如何共同影响输出变量,同时还将了解计算与简单LR模型的不同之处。我们还将使用Python构建一个回归模型。

    最后,我们将深入学习线性回归,学习共线性、假设检验、特征选择等内容。

    现在有人可能会想,我们也可以用简单的线性回归来分别研究我们对所有自变量的输出。

    为什么需要线性回归

    从多个输入变量预测结果。但是,真的是这样吗?

    考虑到这一点,假设你要估算你想买的房子的价格。你知道建筑面积,房子的年代,离你工作地点的距离,这个地方的犯罪率等等。

    现在,这些因素中的一些将会对房价产生积极的影响。例如,面积越大,价格越高。另一方面,工作场所的距离和犯罪率等因素会对你对房子的估计产生负面影响。

    简单线性回归的缺点:当我们只对一个结果感兴趣时,运行单独的简单线性回归会导致不同的结果。除此之外,可能还有一个输入变量本身与其他一些预测器相关或依赖于其他一些预测器。这可能会导致错误的预测和不满意的结果。

    这就是多元线性回归发挥作用的地方。

    数学公式

    b09562ed557942ca85a48bc1d6c38fc6

    这里,Y是输出变量,X项是相应的输入变量。注意,这个方程只是简单线性回归的延伸,和每个指标都有相应的斜率系数(β)。

    β的第一个参数(βo)是拦截常数和Y的值是在缺乏预测(我。e当所有X项都为0时),它在给定的回归问题中可能有意义,也可能有意义,也可能没有意义。它通常在回归的直线/平面上提供一个相关的推动。

    可视化数据

    我们将使用南加州大学马歇尔商学院网站上的广告数据。你可以在这里下载。

    http://faculty.marshall.usc.edu/gareth-james/ISL/data.html

    广告数据集包括产品在200个不同市场的销售情况,以及三种不同媒体(电视、广播和报纸)的广告预算。它是这样的

    cbdf7710084046afaa77cdb1e651e695

    第一行数据显示,电视、广播和报纸的广告预算分别为230.1k美元、37.8k美元和69.2k美元,相应的销售量为22.1k(或22.1万)。

    在简单的线性回归中,我们可以看到在不使用其他两种媒体的情况下,每一种广告媒体是如何影响销售的。然而,在实践中,这三者可能会共同影响净销售额。我们没有考虑这些媒体对销售的综合影响。

    多元线性回归通过在一个表达式中考虑所有变量来解决这个问题。因此,我们的线性回归模型现在可以表示为:

    8f2e7b78e8bd4973a235b1368a8bbba0

    发现这些常数的值(β)是什么回归模型通过最小化误差函数,拟合最好的行或超平面(根据输入变量的数量)。这是通过最小化残差平方和( Residual Sum of Squares)来实现的,残差平方和是通过将实际结果和预测结果之间的差异平方得到的。

    8e81d60475a24e3b988bca99803e662b

    普通最小二乘法

    因为这种方法求最小平方和,所以也称为普通最小二乘法(OLS)。在Python中,有两种主要的方法来实现OLS算法。

    SciKit Learn:只需从Sklearn包中导入线性回归模块并将模型与数据匹配即可。这个方法非常简单,您可以在下面看到如何使用它。

    from sklearn.linear_model import LinearRegressionmodel = LinearRegression()model.fit(data.drop('sales', axis=1), data.sales)

    StatsModels:另一种方法是使用StatsModels包来实现OLS。Statsmodels是一个Python包,允许对数据执行各种统计测试。我们将在这里使用它,以便您可以了解这个很棒的Python库,因为它将在后面的部分中对我们有帮助。

    建立模型并解释系数

    # Importing required librariesimport pandas as pdimport statsmodels.formula.api as sm# Loading data - You can give the complete path to your data heread = pd.read_csv("Advertising.csv")# Fitting the OLS on datamodel = sm.ols('sales ~ TV + radio + newspaper', ad).fit()print(model.params)

    输出

    Intercept 2.938889 TV 0.045765 radio 0.188530 newspaper -0.001037

    Scikit Learn运行回归模型是最简单的方式,并且可以使用模型找到上面的参数。coef_ & model.intercept_。

    现在我们有了这些值,如何解释它们呢?

    1. 如果我们确定电视和报纸的预算,那么增加1000美元的广播预算将导致销售增加189个单位(0.189*1000)。

    1. 同样地,通过固定广播和报纸,我们推断电视预算每增加1000美元,产品大约增加46个单位。

    1. 然而,对于报纸预算来说,由于系数几乎可以忽略不计(接近于零),很明显报纸并没有影响销售。事实上,它在0的负的一边(-0.001),如果幅度足够大,可能意味着这个代理是导致销售下降。但我们不能以如此微不足道的价值做出这种推断。

    ·

    如果我们仅使用报纸预算与销售进行简单的线性回归,我们将观察到系数值约为0.055,这与我们上面看到的相比是非常显著的。为什么会这样呢?

    共线性

    ad.corr()

    7728da3a14334651af3e620cfa8074df

    让我们用热图把这些数字形象化。

    import matplotlib.pyplot as plt%matplotlib inline> plt.imshow(ad.corr(), cmap=plt.cm.GnBu,        interpolation='nearest',data=True)> plt.colorbar()> tick_marks = [i for i in range(len(ad.columns))]> plt.xticks(tick_marks, data.columns, rotation=45)> plt.yticks(tick_marks, data.columns, rotation=45)
    23e6311a8ca64000b87bb6bf0287a322

    这里黑色的方块表示相关性很强(接近于1),而较亮的方块表示相关性较弱(接近于0)。这就是为什么所有的对角线都是深蓝色的,因为一个变量与它自己是完全相关的。

    值得注意的是报纸和广播的相关性是0。35。这表明报纸和广播预算之间的关系是公平的。因此,可以推断出→当产品的广播预算增加时,在报纸上的花费也有增加的趋势。

    这称为共线性,指的是两个或多个输入变量是线性相关的情况。

    因此,尽管多元回归模型对报纸的销售没有影响,但是由于这种多重共线性和其他输入变量的缺失,简单回归模型仍然对报纸的销售有影响。

    我们理解了线性回归,我们建立了模型,甚至解释了结果。到目前为止我们学的是线性回归的基础。然而,在处理实际问题时,我们通常会超越这一点,统计分析我们的模型,并在需要时进行必要的更改。

    预测因子的假设检验

    在运行多元线性回归时应该回答的一个基本问题是,至少有一个预测器在预测输出时是否有用。

    我们发现,电视、广播和报纸这三个预测因子与销售额之间存在不同程度的线性关系。但是,如果这种关系只是偶然发生的,并且没有因为任何预测因素而对销售产生实际影响呢?

    该模型只能给我们数字,以在响应变量和预测因子之间建立足够紧密的线性关系。然而,它无法证明这些关系的可信性。

    我们从统计数据中获得帮助,并做一些被称为假设检验的事情。我们首先建立一个零假设和一个相应的备择假设。

    因为我们的目标是找到至少一个预测器在预测输出时是否有用,所以我们在某种程度上希望至少有一个系数(不是截距)是非零的,这不仅仅是由于随机的机会,而是由于实际原因。为此,我们首先形成一个零假设:所有系数都等于零。

    47dc76f5a5ad473fb013a14639b00fbd

    多元线性回归的一般零假设

    c8707113a7124f8ebcf269ba72ddf6ee

    广告数据的零假设

    因此,备择假设是:至少有一个系数不为零。通过发现有力的统计证据来拒绝原假设,从而证明了这一点

    cad9dc55293a42fea010011c9adecdf8

    假设检验采用F-statistic进行。这个统计数据的公式包含残差平方和(RSS)和总平方和(TSS),我们不需要担心这一点,因为Statsmodels包会处理这个问题。我们在上面拟合的OLS模型的总结包含了所有这些统计数据的总结,可以用这行简单的代码得到:

    print(model.summary2())
    39c9c1cf90bb40a78b450b82d43fc25e

    如果F-statistic的值等于或非常接近1,那么结果是支持零假设的,我们不能拒绝它。

    但是我们可以看到,F-statistic比1大很多倍,因此为零假设(所有系数都为零)提供了有力的证据。因此,我们拒绝原假设,并相信至少有一个预测器在预测输出时是有用的。

    注意,当预测因子(p)的数量很大,或者p大于数据样本的数量(n)时,f统计量是不合适的。

    因此,我们可以说,在这三家广告代理商中,至少有一家在预测销售额方面是有用的。

    但是哪一个或哪两个是重要的呢?它们都重要吗?为了找到这一点,我们将执行特征选择或变量选择。一种方法是尝试所有可能的组合。

    · Only TV

    · Only radio

    · Only newspaper

    · TV & radio

    · TV & newspaper

    · radio & newspaper

    · TV, radio & newspaper

    在这里,尝试所有7种组合仍然是可行的,但是如果有更多的预测因子,组合的数量将呈指数增长。例如,通过在我们的案例研究中再增加一个预测因子,总组合数将变为15。想象一下有一打预测器。因此,我们需要更有效的方法来执行特性选择。

    特征选择

    做特征选择的两种最流行的方法是:

    正向选择:我们从一个没有任何预测器的模型开始,只使用截距项。然后,我们对每个预测器执行简单的线性回归,以找到最佳执行器(最低RSS)。然后我们添加另一个变量,并再次通过计算最低的RSS(残差平方和)来检查最佳的2变量组合。然后选择最佳的3变量组合,以此类推。当满足某种停止规则时,停止该方法。

    逆向选择:我们从模型中的所有变量开始,然后删除统计意义最小的变量(更大的p值:检查上面的模型摘要,找到变量的p值)。重复此操作,直到达到停止规则为止。例如,我们可以在模型分数没有进一步提高的时候停止。

    在这篇文章中,我将介绍向前选择方法。首先,让我们了解如何选择或拒绝添加的变量。

    我们要使用2种方法来评估我们的新模型:RSS和R²。

    我们已经熟悉RSS,它是残差平方和,通过将实际输出和预测结果之间的差平方来计算。它应该是模型表现良好的最小值。R²方差的程度的测量数据是用模型来解释。

    数学上,它是实际结果和预测结果之间相关性的平方。R²接近1表明模型是好的和解释方差数据。接近于零的值表示模型很差。

    761ead5efb7b47e2a839b5aef1a353f0

    # Defining a function to evaluate a model def evaluateModel(model): print("RSS = ", ((ad.sales - model.predict())**2).sum()) print("R2 = ", model.rsquared)

    让我们首先使用单个预测器逐个评估模型,从TV开始。

    # For TV model_TV = sm.ols('sales ~ TV', ad).fit() evaluateModel(model_TV)RSS = 2102.5305831313512R^2 = 0.611875050850071# For radio model_radio = sm.ols('sales ~ radio', ad).fit() evaluateModel(model_radio)RSS = 3618.479549025088R^2 = 0.33203245544529525# For newspaper model_newspaper = sm.ols('sales ~ newspaper', ad).fit() evaluateModel(model_newspaper)RSS = 5134.804544111939R^2 = 0.05212044544430516

    我们观察到modelTV, RSS和R²最小值是最在所有的模型。因此,我们选择modelTV作为向前基础模型。现在,我们将逐个添加广播和报纸,并检查新值。

    # For TV & radio model_TV_radio = sm.ols('sales ~ TV + radio', ad).fit() evaluateModel(model_TV_radio)

    RSS = 556.9139800676184

    R^2 = 0.8971942610828957

    正如我们所看到的,我们的价值观有了巨大的进步。RSS下降和R²进一步增加,model_TV相比。这是个好兆头。现在我们来看看电视和报纸。

    # For TV & newspaper model_TV_radio = sm.ols('sales ~ TV + newspaper', ad).fit() evaluateModel(model_TV_newspaper)

    RSS = 1918.5618118968275

    R^2 = 0.6458354938293271

    报纸的加入也提高了报纸的价值,但不如广播的价值高。因此,在这一步,我们将继续电视和广播模型,并将观察当我们添加报纸到这个模型的差异

    # For TV, radio & newspapermodel_all = sm.ols('sales ~ TV + radio + newspaper', ad).fit()evaluateModel(model_all)

    RSS = 556.8252629021872

    R^2 = 0.8972106381789522

    这些值没有任何显著的改进。因此,有必要不添加报纸,并最终确定模型与电视和广播作为选定的功能。所以我们最终的模型可以表示为:

    802a042ec4e446bd906eb05516e8b802

    在3D图形中绘制变量TV、radio和sales,我们可以可视化我们的模型如何将回归平面与数据匹配。

    7f22596503314f088c71e6674bcbea32

    希望看完这篇文章后你会对多元线性回归有一个新的理解

    展开全文
  • 线性回归的操作将因变量和自变量移入对应的框中,方法选择进入就好了。方法这里我们最多用的就是进入和逐步。二.回归模型的结果解读模型汇总模型RR 方调整 R 方标准 估计的误差1.905a.818.8...
  • 线性回归有诸多假设条件,对于残差来说,要求符合正态性、同方差、无自相关,因此残差诊断分析成为线性回归中必不可少一个环节。(上图来自医咖会微信号)利用残差图来判断检验以上残差问题是常用,直观,而且简单有效...
  • 最小二乘法可以帮助我们在进行线性拟合时,如何选择“最好”的直线。要注意的是,利用实验数据进行拟合时,所用数据的多少直接影响拟合的结果,从理论上说,数据越多,效果越好,即所估计的直线方程越能更好地反映...
  • 01 模型简介最优子集回归是多元线性回归方程的自变量选择的一类方法。从全部自变量所有可能的自变量组合的子集回归方程中挑选最优者。如m个自变量会拟合2m-1个子集回归方程,然后用回归方程的统计量作准则(如交叉验证...
  • 在前一讲中,我们介绍了如何用多个预测变量(x)建立用于预测连续型数值的结果变量(y)的多元线性回归模型。例如,要预测血糖,根据在胰岛素水平和怀孕次数,模型方程式为Glucose = b0 + b1*Insulin + b2*...
  • 文章目录线性回归一元线性回归梯度下降多变量线性回归建立模型多元梯度下降特征缩放(归一化)特征缩放——最大值方法特征缩放——平方均值法损失函数随机梯度下降和‘Mini-batch’梯度下降如何选择线性回归 ...
  • 逐步回归分析是以AIC信息统计量为准则,通过选择最小的AIC信息统计量,来达到...载入数据 首先对数据进行多元线性回归分析tdatax1=c( 7, 1,11,11, 7,11, 3, 1, 2,21, 1,11,10),x2=c(26,29,56,31,52,55,71,31,54,47,...
  • 多元线性回归模型的最小二乘估计结果为如果存在较强的共线性,即 中各列向量之间存在较强的相关性,会导致的从而引起对角线上的 值很大并且不一样的样本也会导致参数估计值变化非常大。即参数估计量的方差也增大,对...
  • 我们回顾一下之前线性回归模型里面的一元线性回归模型和多元线性回归模型,里面在谈论如何找到最佳系数时,使用的是最小二乘法,在这里我们先把多元线性回归的最小二乘解简化表达一下 这里可能会有疑问的是X的第...
  • 今天,在多元回归实验时,我向客户展示了标准残差与标准预测变量图SPSS可以提供的内容。这是我们通常用来评估同方差的图。我创建的补充R材料包括如何使用该程序包获得异方差一致性标准错误(HCSE)。 我在课上提到...
  • 今天,在多元回归实验时,我向客户展示了标准残差与标准预测变量图SPSS可以提供的内容。这是我们通常用来评估同方差的图。我创建的补充R材料包括如何使用该程序包获得异方差一致性标准错误(HCSE)。我在课上提到有些...
  • 十、模型自变量选择方法

    千次阅读 2018-07-18 19:51:22
    在本系列的最后一篇文章中,我们讨论了多元线性回归模型。费尔南多创建了一个模型,根据五个输入参数估算汽车价格。 费尔南多的确获得了一个比较好的模型,然而,费尔南多想要获得最好的输入变量集 本文将详细...
  • 应用回归分析

    2019-09-12 14:10:20
    几个问题 线性回归模型的思想和基本假设是什么?...多元线性回归(从第二章到第三章很多结论可以平推) 违背基本假定的情况(上面说的第三个问题) 自变量选择和逐步回归(模型选择) 多重共线性的情形及其处理 ...
  • 岭回归和lasso回归一.概述二.多元线性回归模型的推导1.四个假设【1】线性假设【2】严格外生性【3】无完全多重...多元线性回归模型使用OLS,存在异方差和多重共线性对模型的影响,变量过多会导致多重共线性问题造成的回
  • 回归分析

    2017-09-22 15:52:00
    若研究它如何受多个数值型解释变量的影响,则选择回归模型是一元或多元回归模型;若研究它如何受到离散型数值变量以及分类型变量的影响,则选择带有虚拟变量回归模型 广义线性模型的被解释变量是0-1变量。若...
  • 逐步回归分析是以AIC信息统计量为准则,通过选择最小的AIC信息统计量,来...载入数据 首先对数据进行多元线性回归分析tdata<-data.frame(x1=c( 7, 1,11,11, 7,11, 3, 1, 2,21, 1,11,10),x2=c(26,29,56,31,52,55,...
  • 一、概述 1.回归:利用样本(已知数据),产生拟合方程,从而对未知数据进行预测 2.分类 *线性回归:一元线性;多元线性 *逻辑回归:实际上预测的是数据X属于分类Y的概率p。逻辑回归公式由 log(p/(1-...6)如何选择变量
  • 逐步回归分析是以AIC信息统计量为准则,通过选择最小的AIC信息统计量,来...载入数据 首先对数据进行多元线性回归分析tdata<-data.frame(x1=c( 7, 1,11,11, 7,11, 3, 1, 2,21, 1,11,10),x2=c(26,29,56,31,52,55,...
  • 一元线性回归和多元线性回归的区别在于, 多元线性回归有(>1)个自变量, 而一元线性回归通常只有1个自变量。 最小二乘法也是用于拟合回归线最常用的方法。 对于观测数据,它通过最小化每个数据点到线...
  • §4.3 多因变量多元线性回归 §4.4 多因变量的逐步回归 §4.5 双重筛选逐步回归 习题四 第五章 判别分析 §5.1 距离判别 §5.2 贝叶斯(Bayes)判别法及广义平方距离判别法 §5.3 费希尔(Fisher)判别 §5.4 判别效果...
  • TensorFlow损失函数

    2021-01-30 08:25:06
    TensorFlow损失函数 正如前面所讨论的,在回归中定义了损失函数或目标函数,其目的是找到使损失最小化的系数。本文将介绍如何在 TensorFlow 中定义损失函数,并根据问题选择合适...在多元线性回归的情况下,输入变量
  • 四、多变量线性回归(Linear Regression with Multiple Variables) 4.1 多维特征 4.2 多变量梯度下降 4.3 梯度下降法实践1-特征缩放 4.4 梯度下降法实践2-学习率 4.5 特征和多项式回归 4.6 正规方程 4.7 正规方程及不...
  • 为什么不用线性回归的代价函数表示,因为线性回归的代价函数可能是非凸的,对于分类问题,使用梯度下降很难得到最小值,上面的代价函数是凸函数 的图像如下,即y=1时: 可以看出,当趋于1,y=1,与预测值一致,...
  • 数据挖掘导论(完整版)(全面介绍数据挖掘的理论和方法) 基本信息 原书名: Introduction to Data Mining 原出版社: Addison Wesley 作者: (美)Pang-Ning Tan Michael Steinbach Vip...附录D 回归 451 附录E 优化 457

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

多元线性回归如何选择变量