提交 b33ac4cf 编写于 作者: W wizardforcel

ch13

上级 bb148708
# 十三、预测
数据科学的一个重要方面,是发现数据可以告诉我们未来的什么事情。气候和污染的数据说了什么几十年内温度的事情?根据一个人的互联网个人信息,哪些网站可能会让他感兴趣?病人的病史如何用来判断他或她对治疗的反应?
> 原文:[Prediction](https://github.com/data-8/textbook/tree/gh-pages/chapters/13)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
数据科学的一个重要方面,是发现数据可以告诉我们什么未来的事情。气候和污染的数据说了几十年内温度的什么事情?根据一个人的互联网个人信息,哪些网站可能会让他感兴趣?病人的病史如何用来判断他或她对治疗的反应?
为了回答这样的问题,数据科学家已经开发出了预测的方法。在本章中,我们将研究一种最常用的方法,基于一个变量的值来预测另一个变量。
......@@ -406,7 +414,7 @@ correlation(sat2014, 'Critical Reading', 'Math')
### 严重还是开玩笑?
2012 年,在著名的《新英格兰医学杂志》(New England Journal of Medicine)上发表的一篇论文,研究了一组国家巧克力消费与的诺贝尔奖之间的关系。《科学美国人》(Scientific American)严肃地做出回应,而其他人更加轻松。 欢迎自行决定!下面的图表应该让你有兴趣去看看。
2012 年,在著名的《新英格兰医学杂志》(New England Journal of Medicine)上发表的一篇论文,研究了一组国家巧克力消费与的诺贝尔奖之间的关系。《科学美国人》(Scientific American)严肃地做出回应,而其他人更加轻松。 欢迎自行决定!下面的图表应该让你有兴趣去看看。
## 回归直线
......@@ -505,7 +513,7 @@ heights_with_su_predictions.scatter('MidParent SU')
这里是一个橄榄形散点图,两个变量以标准单位测量。 45 度线显示为红色。
但是 45 度线不是经过垂直条形的中心的线。可以看到在下图中,1.5 个标准单位的垂直线显示为黑色。蓝线附近的散点图上的点的高度都大致在 -2 到 3 的范围内。红线太高,无法命中中心。
但是 45 度线不是经过垂直条形的中心的线。可以看到在下图中,1.5 个标准单位的垂直线显示为黑色。蓝线附近的散点图上的点的高度都大致在 -2 到 3 的范围内。红线太高,无法命中中心。
所以 45 度线不是“均值图”。该线是下面显示的绿线。
......@@ -1216,3 +1224,152 @@ regression_diagnostic_plots(hybrid, 'acceleration', 'mpg')
如果残差图显示`y=0`的横线处的不均匀变化,则在预测变量的范围内,回归的估计不是同等准确的。
## 数值诊断
除了可视化之外,我们还可以使用残差的数值属性来评估回归的质量。 我们不会在数学上证明这些属性。 相反,我们将通过计算来观察它们,看看它们告诉我们回归的什么东西。
下面列出的所有事实都适用于散点图的所有形状,无论它们是否是线性的。
### 残差图不展示形状
对于每一个线性回归,无论是好还是坏,残差图都不展示任何趋势。 总的来说,它是平坦的。 换句话说,残差和预测变量是不相关的。
你可以在上面所有的残差图中看到它。 我们还可以计算每种情况下,预测变量和残差之间的相关性。
```py
correlation(heights, 'MidParent', 'Residual')
-2.7196898076470642e-16
```
这看起来不是零,但它是个很小的数字,除了由于计算的舍入误差之外,它就是零。 在这里也一样,取小数点后 10 位。 减号是因为上面的舍入。
```py
round(correlation(heights, 'MidParent', 'Residual'), 10)
-0.0
dugong = dugong.with_columns(
'Fitted Value', fit(dugong, 'Length', 'Age'),
'Residual', residual(dugong, 'Length', 'Age')
)
round(correlation(dugong, 'Length', 'Residual'), 10)
0.0
```
### 残差的均值
不管散点图的形状如何,剩余的均值都是 0。
这类似于这样一个事实,如果你选取任何数值列表并计算距离均值的偏差的列表,则偏差的均值为 0。
在上面的所有残差图中,你看到`y=0`的横线穿过图的中心。 这是这个事实的可视化。
作为一个数值示例,这里是高尔顿数据集中,基于双亲高度的子女高度的回归的残差均值。
```py
round(np.mean(heights.column('Residual')), 10)
0.0
```
海牛长度和年龄的回归的残差均值也是一样。 残差均值为 0,除了舍入误差。
```py
round(np.mean(dugong.column('Residual')), 10)
0.0
```
### 残差的标准差
无论散点图的形状如何,残差的标准差是响应变量的标准差的一个比例。 比例是 ![](http://latex.codecogs.com/gif.latex?%5Csqrt%7B1-r%5E2%7D)
![](http://latex.codecogs.com/gif.latex?%5Cmbox%7BSD%20of%20residuals%7D%20%7E%3D%7E%20%5Csqrt%7B1%20-%20r%5E2%7D%20%5Ccdot%20%5Cmbox%7BSD%20of%20%7Dy)
我们将很快看到,它如何衡量回归估计的准确性。 但首先,让我们通过例子来确认。
在子女身高和双亲身高的案例中,残差的标准差约为 3.39 英寸。
```py
np.std(heights.column('Residual'))
3.3880799163953426
```
这和响应变量的标准差乘`sqrt(1 - r^2)`相同。
```py
r = correlation(heights, 'MidParent', 'Child')
np.sqrt(1 - r**2) * np.std(heights.column('Child'))
3.3880799163953421
```
混合动力汽车的加速和里程的回归也是如此。 相关性`r`是负数(约 -0.5),但`r^2`是正数,所以`sqrt(1 - r^2)`是一个分数。
```py
r = correlation(hybrid, 'acceleration', 'mpg')
r
-0.5060703843771186
hybrid = hybrid.with_columns(
'fitted mpg', fit(hybrid, 'acceleration', 'mpg'),
'residual', residual(hybrid, 'acceleration', 'mpg')
)
np.std(hybrid.column('residual')), np.sqrt(1 - r**2)*np.std(hybrid.column('mpg'))
(9.4327368334302903, 9.4327368334302903)
```
现在让我们看看,残差的标准差是如何衡量回归的好坏。请记住,残差的均值为 0。因此,残差的标准差越小,则残差越接近于 0。换句话说,如果残差的标准差小,那么回归中的总体误差就小。
极端情况是`r = 1``r = -1`。在这两种情况下,`sqrt(1 - r^2) = 0`。因此,残差的均值为 0,标准差为 0,因此残差都等于 0。回归线确实是完美的估计。我们在本章的前面看到,如果`r = ± 1`,散点图是一条完美的直线,与回归线相同,所以回归估计中确实没有错误。
但通常`r`不是极端的。如果`r`既不是`±1`也不是 0,那么`sqrt(1 - r^2)`是一个适当的分数,并且回归估计的误差大小,整体上大致在 0 和`y`的标准差之间。
最糟糕的情况是`r = 0`。那么`sqrt(1 - r^2)` = 1,残差的标准差等于`y`的标准差。这与观察结果一致,如果`r = 0`那么回归线就是`y`的均值上的一条横线。在这种情况下,回归的均方根误差是距离`y`的平均值的偏差的均方根,这是`y`的标准差。实际上,如果`r = 0`,那么这两个变量之间就没有线性关联,所以使用线性回归没有任何好处。
### 另一种解释`r`的方式
我们可以重写上面的结果,不管散点图的形状如何:
![](http://latex.codecogs.com/gif.latex?%5Cfrac%7B%5Cmbox%7BSD%20of%20residuals%7D%7D%7B%5Cmbox%7BSD%20of%20%7Dy%7D%20%7E%3D%7E%20%5Csqrt%7B1-r%5E2%7D)
互补的结果是,无论散点图的形状如何,拟合值的标准差是观察值`y`的标准差的一个比例。比例是`|r|`
![](http://latex.codecogs.com/gif.latex?%5Cfrac%7B%5Cmbox%7BSD%20of%20fitted%20values%7D%7D%7B%5Cmbox%7BSD%20of%20%7Dy%7D%20%7E%3D%7E%20%7Cr%7C)
要查看比例在哪里出现,请注意拟合值全部位于回归线上,而`y`的观测值是散点图中所有点的高度,并且更加可变。
```py
scatter_fit(heights, 'MidParent', 'Child')
```
拟合值的范围在 64 到 71 之间,而所有子女的身高则变化很大,大约在 55 到 80 之间。
为了在数值上验证结果,我们只需要计算双方的一致性。
```py
correlation(heights, 'MidParent', 'Child')
0.32094989606395924
```
这里是出生体重的拟合值的标准差与观察值的标准差的比值:
```py
np.std(heights.column('Fitted Value'))/np.std(heights.column('Child'))
0.32094989606395957
```
这个比例等于`r`,证实了我们的结果。
绝对值出现在哪里? 首先要注意的是,标准差不能是负数,标准差的比值也不行。 那么当`r`是负数时会发生什么呢? 燃油效率和加速度的例子将向我们展示。
```py
correlation(hybrid, 'acceleration', 'mpg')
-0.5060703843771186
np.std(hybrid.column('fitted mpg'))/np.std(hybrid.column('mpg'))
0.5060703843771186
```
两个标准差的比值就是`|r|`
解释这个结果的更标准的方法是,回想一下:
![](http://latex.codecogs.com/gif.latex?%5Cmbox%7Bvariance%7D%20%7E%3D%7E%20%5Cmbox%7Bmean%20squared%20deviation%20from%20average%7D%20%7E%3D%7E%20%5Cmbox%7BSD%7D%5E2)
因此,对结果的两边取平方:
![](http://latex.codecogs.com/gif.latex?%5Cfrac%7B%5Cmbox%7Bvariance%20of%20fitted%20values%7D%7D%7B%5Cmbox%7Bvariance%20of%20%7Dy%7D%20%7E%3D%7E%20r%5E2)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册