我想进行残差分析,并且我知道残差等于观测值减去预测值。但我不知道我应该计算训练集还是测试集的残差?
我应该使用这个吗:
import statsmodels.api as sm
# Making predictions
lm = sm.OLS(y_train,X_train).fit()
y_pred = lm.predict(X_train)
resid = y_train - y_pred.to_frame('price')
或者这个:
import statsmodels.api as sm
# Making predictions
lm = sm.OLS(y_train,X_train).fit()
y_pred = lm.predict(X_test)
resid = y_test- y_pred.to_frame('price')
残差应根据测试集
y_test
的实际值(预期结果)和 X_test
拟合模型的预测值来计算。将模型拟合到训练集,然后在测试集上测试其准确性。这就是我直观地看到的,主要原因是首先将两个数据集正式称为train
(用于训练),然后用于测试(test
)。
具体使用第二种情况
resid = y_test- y_pred.to_frame('price')
在我看来,接受的答案相当具有误导性。当您想要对模型执行残差分析以检查模型假设的有效性时,应该对训练数据执行残差分析,因为您的模型适合训练数据。
对测试集或训练集进行残差分析并不重要,因为它们通常来自同一群体。但是,大多数时候,模型相对于测试数据的残差误差不会具有非零均值。这可能是由于分布、趋势等差异造成的。 因此,第一步是查看模型是否很好地拟合训练数据(通过根据训练数据检查模型的假设)。 然后,第二步是查看模型是否能够很好地推广到未见过的数据(通过针对测试数据进行测试)。