Press "Enter" to skip to content

机器学习从入门到进阶⑦丨双对数回归模型

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

费尔南多现在已经构建了一个更好的模型。

 

 

price = -55089.98 + 87.34 engineSize + 60.93 horse power + 770.42 width

 

但是,费尔南多还有更多想法:

 

如何使用常见的比较单位来估算价格变化?

 

发动机大小、马力和宽度所预测的价格有多大弹性?

 

在本篇内容中,我们将解决这些问题。本文将介绍 双对数回归模型 (log-log regression model)。

 

为了理解双对数回归模型,我们首先来了解一下 (derivative)、(logarithm)、指数(exponential) 以及 弹性(elasticity) 的概念。

 

■ 导数

 

回到高中,导数可以说是数学教的最有意思的概念之一。

 

导数是一种表示变化的方式——函数在某个点上的变化量。

 

如变量y是x的函数,则将y定义为:

 

y = f(x)

 

则求y对x的导数,表示为:

 

dy/dx = df(x)/dx = f'(x)

 

其含义是:

 

y相对于x变化的变化,
即:如果x变化,y会有多少变化?

 

这正是费尔南多需要的,他想知道,受其他变量的变化的影响,价格又会有怎样的变化。

 

之前提到,多元回归模型的一般形式如下:

 

y = β0 + β1.x1 + β2.x2 + …+ βn.xn +

 

费尔南多建立的模型如下:

 

price = β0 + β1.发动机大小
即,将价格作为发动机大小的函数。

 

费尔南多用发动机大小对汽车价格求导。那是不是只是通过发动机大小的变化,就能体现出价格的变化?

 

并不是这幺简单。线性模型是用来表达线性关系的,如下:

 

y = mx + c

 

如果计算y对x的导数,则会给得出:

 

dy/dx = m . dx/dx + dc/dx

 

发动机大小本身的变化的导数始终为1,即dx/dx = 1

 

一个常数与其他任何变量相关的变化的导数始终为0,因为它是一个常数,其值从不改变,即dc/dx = 0

 

那幺公式就变成了:

 

dy/dx = m

 

在发动机大小上应用价格导数,将只能得到发动机大小的系数。

 

如何进行转换呢?接下来认识两个数学概念——指数和对数。

 

■ 指数

 

指数是一种具有两个运算符的函数,底数(b)和指数(n)。其被定义为b^n,形式如下:

 

f(x) = b^x

 

底数可以是任何的正数,欧拉数(e)是统计中常用的基数。

 

在几何上,指数关系具有以下的结构:

 

 

x的增长不会使得y相应增长,直到达到某个阈值

 

到达阈值后,x的小幅增长,会使y急速的上升

 

■ 对数

 

对数是一个有趣的概念。在回归模型中,对数具有一定特征。对数的基本属性是它的底数,典型的底数有2、10和e。

 

如:

 

多少个2相乘等于8?2 × 2 × 2 = 8,即答案是 3

 

也可以表示为 log2(8) = 3

 

以2为底数的8的对数为3。

 

对数和指数都有一个常用的底数,被称为 欧拉数(e) ,其近似值为  2.71828 。统计学中经常会用到e。以e为底数的对数称为自然对数。

 

对数也有很好的变换能力,对数可以将指数关系变换为线性关系。例如下图显示了y和x之间的指数关系:

 

 

如果将对数应用于x和y,则log(x)和log(y)之间的关系是线性的,看起来像这样:

 

 

■ 弹性

 

弹性是衡量一个变量对另一个变量变化的响应程度。假设我们有一个函数:Q = f(P),那幺Q的弹性定义为:

 

E = P/Q × dQ/dP

 

dQ/dP是P变化所引起的Q的平均变化

 

■ 结合在一起

 

现在让我们把导数、对数和指数这三个数学概念放在一起看。它们间的关系规则如下:

 

e的对数是1,即log(e)= 1

 

指数的对数是指数乘以底数

 

log(x)的导数是:1 / x

 

例如,一个函数y可以表示为:

 

y = b^x

 

则log(y) = x log (b)

 

那幺这对线性回归模型来说意味着什幺呢?我们是否可以灵活运用导数、对数和指数,重写线性模型方程,以得出由x的变化所引起的y的变化率呢?

 

首先,将y和x之间的关系定义为指数关系。

 

 

y = α x^β

 

首先将其表示为双对数函数:
log(y)= log(α)+β.log(x)

 

方程y = α x^β看起来并不像是回归模型:y =β0+β1.x1。当β0= log(α)、β1=β,这个等式可以重写为: log(y)=β0+β1.log(x1)

 

但它如何表达弹性关系呢?我们求相对于x的log(y)的导数,可得:

 

 

d. log(y)/ dx = β1. log(x1)/dx

 

=> 1/y . dy/dx = β1 . 1/x => β 1 = x/y . dy/dx

 

β1的方程就是弹性。

 

构建模型

 

搞清楚了这些概念后,让我们看看费尔南多如何重构模型:

 

 

log(价格) = β0 + β1. log(发动机大小) + β2. log(马力) + β3. log(车宽)

 

他希望根据发动机大小、马力和车辆宽度的变化,来估算汽车价格的变化。

 

经过对模型的训练,最终得到了如下的参数:

 

 

该模型的方程是:

 

log(价格) = -21.6672 + 0.4702.log(发动机大小) + 0.4621.log(马力) + 6.3564 .log(宽)

 

对该模型的解释如下:

 

所有系数都很重要

 

调整R平方值为0.8276,说明该模型解释了82.76%的数据变化

 

如果发动机大小增加4.7%,汽车价格将增加10%

 

如果马力增加4.62%,汽车价格将增加10%

 

如果汽车的宽度增加6%,汽车价格将增加1%

 

模型评估

 

费尔南多现在建好了双对数回归模型,接下来该通过训练和测试数据来评估模型的表现。

 

他之前已经将数据分成了训练集和测试集。对基于训练数据创建的模型来说,测试数据是不可见的数据。在测试数据上的表现,才是对模型的真正考验。

 

 

在训练数据上,模型表现很好,调整R平方值为0.8276,说明该模型可以解释82.76%的训练数据变化。为了使模型可以最终被接受,需要在测试数据上也有良好表现。

 

经过对模型的测试,计算得出0.8186的调整R平方值。这相当不错,意味着即使对于不可见的数据,模型也能解释81.86%的变化。

 

请注意,该模型估算的是log(价格),即价格的对数,而不是价格本身。想要估算汽车价格,需要进行转换。

 

即将log(价格)作为底数e的指数。

 

e^log(价格) = 价格

 

前几篇文章中,统计学习奠定了基础,假设检验讨论了零假设和替代假设,简单线性回归模型简化了回归,之后进入多变量回归模型的世界,又讨论了模型选择方法。而在这篇文章中,我们介绍了双对数回归模型。

 

到目前为止,构建的回归模型只涉及数值自变量。下一篇文章将讨论交互关系和定性变量的概念。

 

翻译:TalkingData

 

作者:Pradeep Menon

 

来源:Mudium

 

原文链接:https://towardsdatascience.com/data-science-simplified-part-7-log-log-regression-models-499ecd1495f0

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注