受到我上一篇文章(https://medium.freecodecamp.org/learn-how-to-improve-your-linear-models-8294bfa8a731)的启发,我想要解决一个问题,这个问题一般会在尝试了不同线性模型之后提出:你需要选择一个模型。具体点说,Khalifa Ardi Sidqi(https://medium.com/@khalifaardi)曾问我:
「我该如何确定最适合我的数据的模型?只要看 R²、SSE 等数据吗?可是由于模型不同,因此对模型的解释(平方、根等)也会不同,这不是个问题吗?」
「我该如何确定最适合我的数据的模型?只要看 R²、SSE 等数据吗?可是由于模型不同,因此对模型的解释(平方、根等)也会不同,这不是个问题吗?」
问题的第二部分很容易回答。首先,找到最适合数据的模型,然后解释其结果。如果你知道模型会如何解释你的数据,这很好。然而这只有最好的模型能做到。
本文的其余部分将解决前面提到的问题的第一部分。请注意,我将分享我选择模型的方法。模型的选择有多种方式,可能会有其他不同的选择模型的方法,但我描述的是最适合我的方式。
另外,这种方法只适用于单变量模型。单变量模型只有一个输入变量。我会在其他文章中描述如何用更多的输入变量评估的多元模型。然而,在今天这篇文章中我们只关注基础的单变量模型。
为了进行练习并获得更多这方面的感觉,我写了一个小的 ShinyApp。我们可以通过它用不同的模型训练不同的数据集。在训练过程中注意参数的变化情况,可以更好地评估简单的线性模型从而对模型进行选择。此外,您可以从 github(https://github.com/bjoernhartmann/linear_model_selection)复制该程序并将其作为数据框架。(https://github.com/bjoernhartmann/linear_model_selection%EF%BC%89%E5%A4%8D%E5%88%B6%E8%AF%A5%E7%A8%8B%E5%BA%8F%E5%B9%B6%E5%B0%86%E5%85%B6%E4%BD%9C%E4%B8%BA%E6%95%B0%E6%8D%AE%E6%A1%86%E6%9E%B6%E3%80%82)
如果只使用一个输入变量,则调整后的 R2 值可以指出模型的执行情况。它说明了你的模型解释了多少变化。
与简单的 R2 相比,调整后的 R2 考虑到输入因子的数量。调整后的 R2 惩罚了很多输入因素,且支持简洁的模型。
在上面的截图中,可以看到两个模型的值分别为 71.3% 和 84.32%。显然,第二种比第一种好。然而,值较低的模型仍然有用,因为调整后的 R2 对数据中的噪声非常敏感。因此,只需要比较相同数据集应用在不同模型的指标,无需在不同数据集间进行比较。
通常情况下,不太会用到 SSE
在阅读这一部分之前,让我们先明确 SSE。在维基百科上,SSE 指的是平方误差的总和(https://en.wikipedia.org/wiki/Residual_sum_of_squares)。而在一些统计学的教科书中(https://www.amazon.de/Introductory-Econometrics-International-Jeffrey-Wooldridge/dp/111153439X/ref=sr_1_1?ie=UTF8&qid=1510003022&sr=8-1&keywords=wooldridge econometrics&dpID=51mK3jyvZ6L&preST=_SX198_BO1,204,203,200_QL40_&dpSrc=srch),SSE 可以解释为平方和(正好相反)。在此将 SSE 作为平方误差的总和。
因此,调整后的 R2 约为 1 - SSE / SST。SST 指总平方和。
我不想深入讲述数学原理。我想说明的是调整后的 R2 是用 SSE 计算的。所以 SSE 通常不会给出任何附加信息。
此外,对调整后的 R2 进行了归一化,使得它总是在零到一之间。这一操作使得人们更容易对不熟悉的模型进行解释,例如,调整后的 R2 为 75% 比 SSE 为 398 更容易解释模型,尽管这两个数字可以解释相同的模型。
看看残差项或误差项!
误差项,或所谓的残差常常被忽略。通常它们告诉你的比你想象的更多。
残差是预测值和实际值之间的差异
残差的好处在于可以告诉你误差的大小和方向。我们来看一个例子:
我们不希望残差在零的附近变化
我在此试图用线性函数对一个多项式数据集进行预测。对残差进行分析,可以显示出模型存在的偏差是向上的还是向下的。
当 50 < x < 100 时,残差值高于零。所以在这个范围内,实际值高于预测值,也就是说模型偏差是向下的。
然而当 100 < x < 150 时,残差小于零。因此,实际值低于预测值,就是说模型偏差是向上的。
能知道模型偏差总是一件值得高兴的事,但是你通常都不会想要这样的模式。
残差的平均值应该为零(如平均值所示),而且还应该是平均分布的。使用三次多项式函数对相同的数据集进行预测可以更好地说明拟合效果:
残差平均分布在零值周围意味着拟合效果更好。
此外,还可以观察误差项的方差是否增加。在统计中这被称为异方差(https://en.wikipedia.org/wiki/Heteroscedasticity)。可以使用稳定的标准误对其进行修正,否则,你的假设检验可能是错误的。
残差直方图
最后,用直方图总结误差项的大小。直方图提供有关错误带宽的信息,还可以指出错误发生的频率。
右边的直方图表明错误带宽比左边直方图的小。所以似乎右边模型的拟合效果更好。
上图显示了在两个不同的模型上使用相同数据集进行预测。在左边的直方图中,错误发生在 -338 到 520 的范围内。
在右边的直方图中,错误发生在 -293 到 401 之间。所以误差值要低得多。而且,右边的直方图的模型中大部分误差都接近零。所以我更支持使用右边的模型。
总结
When choosing a linear model, these are factors to keep in mind:
当选择一个线性模型时,要考虑以下几点:
在相同数据集中比较线性模型
选择调整后的 R2 值较高的模型
确定模型残差均匀分布在零值周围
确定模型误差带宽较小
GitHub 链接:https://github.com/bjoernhartmann/linear_model_selection
联系客服