回归评价的指标(MSE/RMSE/MAE/R-squared)

2020-11-12 11:26:49 浏览数 (2)

1, MSE, RMSE, MAE

均方误差,即Mean Square Error (MSE),表达式为:

均方根误差,即Root Mean Square Error (RMSE),是在均方误差的基础上开根号,表达式为:

平均绝对误差,即Mean Absolute Error (MAE),表达式为:

自己实现及sklearn中的调用:

代码语言:javascript复制
from sklearn import datasets
boston = datasets.load_boston()

x = boston.data[:, 5] # 只用了其中房间数量一个特征
y = boston.target


from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y)

from sklearn.linear_model import LinearRegression
reg = LinearRegression()
reg.fit(x_train, y_train)
y_pred = reg.predict(x_test)


# MSE
mse = np.sum((y_pred - y_test)**2) / len(y_pred)
print('MSE = {}'.format(mse))

# RMSE
rmse = np.sqrt(mse)
print('RMSE = {}'.format(rmse))

# MAE
mae = np.sum(np.absolute(y_pred - y_test)) / len(y_pred)
print('MAE = {}'.format(mae))

# sklearn中的调用
from sklearn.metrics import mean_absolute_error, mean_squared_error

print(mean_squared_error(y_pred, y_test))
print(mean_absolute_error(y_pred, y_test))

2. R-squared

RMSE与MAE有个局限性,就是对于分类的种类不同的情况很难去比较谁的效果好,比如预测学生的成绩和预测房价,得到的RMSE/MAE是并不能比较的。

但是R^2是可以解决这个问题的,不同分类种类可以互相比较。

即:

或者:

分子可以理解为使用这个模型产生的错误,分母可以理解为使用[图片上传失败...(image-4b22f8-1604762508813)]

时产生的错误(Baseline Model)。

因此我们可以得到以下结论: 1). R^2的取值小于等于1; 2). R^2越大越好,当模型没有任何错误的时候,其值为1; 3). 当模型为Baseline model时,其值为0; 4). 如果R^2<0时,说明这个模型甚至还不如Baseline model,很有可能该数据不存在任何线性关系。

0 人点赞