回归模型的评估标准

回归问题主要是求值,评价标准主要是看求得值与实际结果的偏差有多大,所以,回归问题主要以下方法来评价模型。

平均绝对误差

MAE(Mean Abolute Error)。

MAE={1 \over m} \sum_{i=1}^m \lvert a_i-y_i \rvert \tag{1}

对异常值不如均方差敏感,类似中位数。

绝对平均值率误差

MAPE(Mean Absolute Percentage Error)。

MAPE={100 \over m} \sum^m_{i=1} \lvert {a_i - y_i \over y_i} \rvert \tag{2}

和方差

SSE(Sum Squared Error)。

SSE=\sum_{i=1}^m (a_i-y_i)^2 \tag{3}

得出的值与样本数量有关系,假设有1000个测试样本,得到的值是120;如果只有100个测试样本,得到的值可能是11,我们不能说11就比120要好。

均方差

MSE(Mean Squared Error)。

MSE = \frac{1}{m} \sum_{i=1}^m (a_i-y_i)^2 \tag{4}

就是实际值减去预测值的平方再求期望,没错,就是线性回归的代价函数。由于MSE计算的是误差的平方,所以它对异常值是非常敏感的,因为一旦出现异常值,MSE指标会变得非常大。MSE越小,证明误差越小。

均方根误差

RMSE(Root Mean Squard Error)。

RMSE = \sqrt{\frac{1}{m} \sum_{i=1}^m (a_i-y_i)^2} \tag{5}

是均方差开根号的结果,其实质是一样的,只不过对结果有更好的解释。

例如:要做房价预测,每平方是万元,我们预测结果也是万元,那么MSE差值的平方单位应该是千万级别的。假设我们的模型预测结果与真实值相差1000元,则用MSE的计算结果是1000,000,这个值没有单位,如何描述这个差距?于是就求个平方根就好了,这样误差可以是标签值是同一个数量级的,在描述模型的时候就说,我们模型的误差是多少元。

R平方

R-Squared。

上面的几种衡量标准针对不同的模型会有不同的值。比如说预测房价,那么误差单位就是元,比如3000元、11000元等。如果预测身高就可能是0.1、0.2米之类的。也就是说,对于不同的场景,会有不同量纲,因而也会有不同的数值,无法用一句话说得很清楚,必须啰啰嗦嗦带一大堆条件才能表达完整。

我们通常用概率来表达一个准确率,比如89%的准确率。那么线性回归有没有这样的衡量标准呢?答案就是R-Squared。

R^2=1-\frac{\sum (a_i - y_i)^2}{\sum(\bar y_i-y_i)^2}=1-\frac{MSE(a,y)}{Var(y)} \tag{6}

R平方是多元回归中的回归平方和(分子)占总平方和(分母)的比例,它是度量多元回归方程中拟合程度的一个统计量。R平方值越接近1,表明回归平方和占总平方和的比例越大,回归线与各观测点越接近,回归的拟合程度就越好。

  • 如果结果是0,说明模型跟瞎猜差不多;
  • 如果结果是1,说明模型无错误;
  • 如果结果是0-1之间的数,就是模型的好坏程度;
  • 如果结果是负数,说明模型还不如瞎猜。

代码实现:

  1. def R2(a, y):
  2. assert (a.shape == y.shape)
  3. m = a.shape[0]
  4. var = np.var(y)
  5. mse = np.sum((a-y)**2)/m
  6. r2 = 1 - mse / var
  7. return r2