Python构建一个回归模型-上海怡健医学()

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

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

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

多重线性回归:当有两个或多个预测变量时,这是一种线性回归形式。

我们将看到多个输入变量如何协同工作来影响输出变量,我们还将看到计算与简单的 LR 模型有何不同。我们还将使用 Python 构建回归模型。

最后,我们将深入研究线性回归,了解共线性、假设检验、特征选择等。

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

为什么需要线性回归

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

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

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

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

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

数学公式

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

β (βo) 的第一个参数是截距常数,Y 的值是在没有预测的情况下(即当所有 X 项为 0 时),这在给定的回归问题中可能有意义,也可能或可能没有意义。它通常在回归的线/平面上提供相对推动。

可视化数据

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

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

第一行数据显示,电视、广播和报纸的广告预算分别为$230.$1k、$37.$8k和$69.$2k,对应销量为22.1k(或22.10k)。

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

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

通过最小化拟合最佳行或超平面的误差函数(取决于输入变量的数量),找出这些常数 (β) 的值对于回归模型是多少。这是通过最小化残差平方和来完成的,该残差平方和是通过对实际结果和预测结果之间的差异进行平方来获得的。

普通最小二乘法

因为这种方法求最小二乘,所以也称为普通最小二乘法(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 库,因为它将在后面的部分中为我们提供帮助。

建立模型并解释系数

# 导入所需的库 import pandas as pdimport statsmodels.formula.api as sm# 加载数据 – 您可以在此处给出数据的完整路径read = pd.read_csv(“Advertising.csv”)# 在数据模型上拟合 OLS = sm .ols(‘销售 ~ 电视 + 广播 + 报纸’, ad).fit()print(model.params)

输出

拦截2.938889TV0.045765电台0.188530newspaper -0.001037

Scikit Learn 是运行回归模型并使用该模型查找上述参数的最简单方法。 coef_ & model.intercept_。

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

如果我们确定电视和报纸的预算,那么广播预算增加 1,000 美元将导致销量增加 189 个单位(0.189*1000)。同样,通过固定广播和报纸,我们推断电视预算每增加 1,000 美元,产品就会增加大约 46 个单位。但是,对于报纸预算,由于系数几乎可以忽略不计(接近于零),很明显,报纸并没有影响销售。事实上,它是在 0 (-0.001) 的负边,如果幅度足够大,可能意味着这个代理正在导致销量下降。但我们无法做出如果我们只用报纸预算与销售额做一个简单的线性回归,我们会观察到系数值在 0.055 左右,这与我们上面看到的相比非常显着。为什么这是?

共线性

ad.corr()

让我们用热图可视化这些数字。

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

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

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

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

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

预测变量的假设检验

图片[1]-Python构建一个回归模型-上海怡健医学()-老王博客

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

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

模型只能为我们提供数字以在响应变量和预测变量之间建立足够接近的线性关系。但是,它不能证明这些关系的可信度。

我们从统计数据中获得帮助,并进行称为假设检验的工作。我们首先建立一个原假设和一个相应的备择假设。

因为我们的目标是找出是否至少有一个预测变量对预测输出有用,所以我们希望至少有一个系数(不是截距)不为零,这不仅是由于随机机会,而且是出于实际原因为此,我们首先形成一个零假设:所有系数都等于 0。

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

广告数据的零假设

因此,备择假设是至少一个系数不为零。这通过找到强有力的统计证据来拒绝零假设来证明

使用 F 统计量进行假设检验。这个统计的公式包含残差平方和 (RSS) 和总平方和 (TSS),我们不需要担心这个,因为 Statsmodels 包会处理这个问题。我们上面拟合的 OLS 模型的摘要,其中包含所有这些统计数据的摘要,可以通过以下简单的代码行获得:

打印(model.summary2())

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

但我们可以看到 F 统计量比 1 大很多倍r软件中多元线性回归,因此原假设(所有系数均为零)提供了强有力的证据。因此,我们拒绝原假设,并认为至少有一个预测变量对预测输出有用。

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

所以我们可以说这三个机构中至少有一个对预测销售有用。

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

Only TVOnly radioOnly newsTV & radioTV &报纸广播 & 报纸电视、广播 & 报纸 在这里,尝试所有 7 种组合仍然可行r软件中多元线性回归,但随着预测变量的增加,组合的数量将呈指数增长。例如,通过在我们的案例研究中再添加一个预测变量,组合的总数将变为 15。想象一下有十几个预测变量。因此,我们需要更有效的方法来执行特征选择。

功能选择

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

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

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

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

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

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

在数学上,它是实际结果与预测结果之间相关性的平方。 R 接近 1 表示模型良好,并解释了数据的方差。接近零的值表示模型不佳。

# 定义一个评估模型的函数def evaluateModel(model):print(“RSS = “, ((ad.sales – model.predict())**2).sum()) print(” R2 = “, 模型.rsquared)

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

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

RSS = 2102.5305831313512R^2 = 0.611875050850071

# for radiomodel_radio = sm.ols(‘sales ~ radio’, ad).fit()evaluateModel(model_radio)

RSS = 3618.479549025088R^2 = 0.33203245544529525

#对于报纸model_newspaper = sm.ols(‘sales ~报纸’, ad).fit()evaluateModel(model_newspaper)

RSS = 5134.804544111939R^2 = 0.05212044544430516

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

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

RSS = 556.9139800676184R^2 = 0.8971942610828957

正如我们所见,我们的价值观已经走过了漫长的道路。与 model_TV 相比,RSS 下降,R 进一步增加。这是一个好兆头。现在让我们看看电视和报纸。

# 对于电视和报纸model_TV_radio = sm.ols(‘sales ~ TV +报纸’, ad).fit()evaluateModel(model_TV_newspaper)

RSS = 1918.5618118968275R^2 = 0.6458354938293271

报纸的加入也增加了报纸的价值,但不如广播。因此,在这一步中,我们将继续 TV 和 Radio 模型,并在我们将报纸添加到此模型时观察差异

# 对于电视、广播和报纸model_all = sm.ols(‘sales ~ TV + radio +报纸’, ad).fit()evaluateModel(model_all)

RSS = 556.8252629021872R^2 = 0.8972106381789522

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

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

希望看完这篇文章,你会对多元线性回归有一个新的认识

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论