我使用Scikit Learn和Python创建了一个机器学习模型。我计算了R平方误差。是否有办法将此误差转换为百分比误差?例如,如果我的真实值是100和50,预测值是90和40,我的平均百分比误差是15%,因为第一个预测的误差是10%,第二个预测的误差是20%。基于我得到的R平方值,是否有办法计算百分比误差(平均百分比误差)?
回答:
这是不可能的。R平方是通过RSS,或残差平方和计算的。你的R平方是1 – (模型中的RSS)/(仅截距模型中的RSS)。从上面的描述可以看出,R平方并不是真正的误差,而是解释的方差百分比。
我们可以使用一个示例数据集
from sklearn.linear_model import LinearRegressionfrom sklearn.datasets import load_bostonimport numpy as npX, y = load_boston(return_X_y=True)reg = LinearRegression().fit(X, y)
我们让预测和y的均值为:
ybar = reg.predict(X)ymean = y.mean()
R平方是
1 - sum((y-ybar)**2) / sum((y-ymean)**2)0.7406426641094095reg.score(X, y)0.7406426641094095
而你的百分比误差是:
np.mean(abs(y-ybar)/y)0.16417298806489977
如你所见,由于你已经对残差进行了求和,而在百分比误差中,你需要相对于观测值的误差,因此仅从R平方中直接得到平均百分比误差是不太可能的。