线性回归图解释

Posted

技术标签:

【中文标题】线性回归图解释【英文标题】:Linear regression graph interpretation 【发布时间】:2020-01-03 13:31:22 【问题描述】:

我有一个显示某些数据频率的直方图。 我有两种类型的文件:Pdbs 和 Uniprots。每个 Uniprot 文件都与一定数量的 Pdb 相关联。所以这个直方图显示有多少 Uniprot 文件与 0 个 Pdb 文件、1 个 Pdb 文件、2 个 Pdb 文件……80 个 Pdb 文件相关联。 Y 轴采用对数刻度。

我对同一数据集进行了回归,这就是结果。

这是我用于回归图的代码:

# Fitting Simple Linear Regression to the Training set
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
x = np.array(x).reshape((-1, 1))
y = np.array(y)
regressor.fit(x, y)

# Predicting the Test set results
y = regressor.predict(x)

# Visualizing the Training set results
plt.scatter(x, y, color = 'red')
plt.plot(x, regressor.predict(x), color = 'blue')
plt.title('Uniprot vs Pdb')
plt.xlabel('Pdbs')
plt.ylabel('Uniprot')
plt.savefig('regression_test.png')
plt.show()

你能帮我解释一下回归图吗? 我可以理解,随着 Pdb 数量的增加,与它们相关的 Uniprots 将会减少。 但为什么它在 y 轴上变为负数?这正常吗?

【问题讨论】:

散点图中的原始数据为红色,表明 uniprot 的原始数据包含负值。回归正确地使用了那些负的 uniprot 值。 【参考方案1】:

解释这个线性回归的正确方法是“这个线性回归 90% 是没有意义的”。事实上,这 90% 中的一些比毫无意义更糟糕,这完全是误导,正如您用负面的 y 值指出的那样。 OTOH,其中大约 10% 的内容我们可以解释得很好,但你必须知道你在寻找什么。

原因: 除了其他通常不太明显的事情外,线性回归模型的假设之一是数据或多或少是线性的。如果您的数据与添加了一些 非常 常规“噪音”的数据不是线性的,那么所有的赌注都会被取消。您的数据不是线性的。他们甚至不接近。所以所有的赌注都没有了。

由于所有的赌注都没有了,因此检查一下我们原本可能想用线性回归模型做的事情会很有帮助。 最难的事情是extrapolation,它预测y 超出原始x 范围。您的模型在外推方面的能力很好地说明了它在端点处的行为。这是您注意到“嘿,我的图表都是负数!”的地方。从非常简单的意义上讲,这是因为您采用了一个线性模型,将其拟合到不满足“线性”假设的数据,然后尝试使其做模型最难做的事情。模型要做的第二件最难的事情是interpolation,它在原始x 范围内进行预测。这种线性回归也不是很擅长。再往下看,如果我们只看线性回归线的斜率,我们就可以大致了解我们的数据是增加还是减少。请注意,如果您的数据不是线性的,即使这个赌注也被取消。但是,对于大型甚至非线性的现实世界数据,它通常以一种并非完全无用的方式工作。所以,这一件事,你的线性回归模型有点正确。你的数据在减少,线性模型也在减少。这就是我之前所说的 10%。

怎么做:尝试拟合更好的模型。您说您对原始数据进行了日志转换,但看起来并没有太大帮助。一般来说,“转换”数据的全部意义在于使其看起来是线性的。日志转换对exponential 数据很有帮助。如果您的起始数据看起来不像指数,那么对数转换可能无济于事。由于您正在尝试执行density estimation,因此您几乎肯定希望将概率分布拟合到这些东西,您甚至不需要进行转换以使数据线性化。 Here 是另一个 Stack Overflow 答案,其中包含有关如何将 beta 分布拟合到数据的详细信息。但是,有很多选择。

【讨论】:

因为问题是“为什么这很糟糕?”而不是“我怎样才能做到这一点?”我会停在这里。如果你使用其中的一些术语,尤其是“密度估计”这个术语,并在 Stack Overflow 或Cross Validated 上提出一个新问题,我敢打赌你可以得到一些很好的方向来了解下一步的方向。 我明白了,我会寻找更合适的型号,谢谢你的建议。还有一件事,你为什么说我的数据不是指数级的?对我来说,它看起来像一个指数递减曲线(甚至在对数转换之前).. 我不知道你的原始数据是什么样子的。但是,如果您的原始数据是指数型的:y = Ce^(kx),那么对数变换是log y = kx + log(C),这是一个线性的东西。因此,如果您的原始数据是指数级的,那么您转换后的数据将是线性的。转换后的数据不是线性的,因此原始数据不是指数的。 OTOH,原始数据可能是 y = Ce^(kx^2) 或其他类似指数的东西。【参考方案2】:

你能帮我解释一下回归图吗?

线性回归尝试在 x 变量和目标 y 变量之间建立一条线,它以最封闭的方式同化“真实”值(您还可以在此处找到图表:https://en.wikipedia.org/wiki/Linear_regression):

这里的线是蓝线,原点是黑线。目标是最小化所有黑点的误差(黑点到蓝线)。

回归线是蓝线。这意味着您可以使用线性方程 y = m*x +b 来描述一个 uniprot,它具有一个常数值 m=0.1(示例)和 b=0.2(示例)和 x=Pdbs。

我可以理解,随着 Pdb 数量的增加,与之关联的 Uniprot 将会减少。但是为什么它在 y 轴上是负数呢?

这是正常的,您可以将这条线绘制到 -10000000 Pdbs 或其他任何值,这只是一个等式。不是真正的线。

但是你的情节有一个错误,你需要把原来的黑点也画出来吗?

y = regressor.predict(x)
plt.scatter(x, y, color = 'red')

这是错误的,您应该向其中添加原始值,以从我的图形中获取情节,例如:

y = df['Uniprot']
plt.scatter(x, y, color = 'red')

应该有助于理解它。

【讨论】:

您应该正确引用您获取此图表的来源和解释,除非它是您制作的

以上是关于线性回归图解释的主要内容,如果未能解决你的问题,请参考以下文章

线性回归的一般形式线性回归的特点残差分析Q-Q图P-P图

什么样的模型是线性回归

logistic回归模型的参数呈现线性关系

如何对已经拟出的一元线性回归方程进行检验?标准化残差图怎么判断?

多元线性回归多重共线性检验及避免方法,简单点的

线性回归模型中设置随机误差项有何意义?对其都有哪些假设?