首页 > 解决方案 > 线性回归图解释

问题描述

我有一个显示某些数据频率的直方图。我有两种类型的文件: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 轴上变为负数?这是正常的吗?

标签: matplotlibscikit-learnlinear-regression

解决方案


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

为什么: 在其他通常不太明显的事情中,线性回归模型的假设之一是数据或多或少是线性的。如果您的数据不是线性的,并且添加了一些非常规则的“噪音”,那么所有的赌注都没有了。您的数据不是线性的。他们甚至不接近。所以所有的赌注都没有了。

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

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


推荐阅读