一、MSE
但MSE均方误差有个缺点 就是MSE与y的量纲不同 比如y的量纲为万元 那MSE的量纲就是万元的平方。
二、RMSE
三、MAE
RMSE的量纲与原始y的量纲相同
四、mse,rmse,mae代码实现
注意:线性回归衡量指标
在这里使用波士顿房价这个数据集 并且只用了RM平均房间这个样本特征
#MSE
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
boston=datasets.load_boston()
boston.DESCR
boston.feature_names
x=boston.data[:,5] #只用平均房间数这一个样本特征
y=boston.target
x=x[y<50] #这里是为了去掉一些不真实的点 可以自己绘图看 图中会有一些最大值50 该数据不真实
y=y[y<50]
from sklearn.metrics import mean_squared_error,mean_absolute_error
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y)
plt.scatter(x_train,y_train)
plt.plot(x_train,reg.predict(x_train),color="red")
from SimpleLinearRegression1 import SimpleLinearRegression1
reg=SimpleLinearRegression1()
reg.fit(x_train,y_train)
y_predict=reg.predict(x_test)
mse=mean_squared_error(y_test,y_predict)
from math import sqrt
rmse=sqrt(mse)
mae=mean_absolute_error(y_test,y_predict)
print(mse,rmse,mae)
结果:
注意到:rmse与mae的量纲相同,但是rmse却比mae的值要大,这是由于两个计算方式不同。rmse有个平方,
这会放大真实值与预测值之间的误差。除了绝对值不可导之外,这也就是为什么我们计算最小损失函数要使用平方。因为这更能说明误差的最小值。
rmse会放大真实值与预测值之间的误差,能更好的说明结果之间的误差。
选择相对而言会得到更大误差的算法来求取最小损失函数会使我们得到的线性方程与真实值更拟合。
sklearn中有mse与mae的api但没有rmse的api,对mse取根号就是rmse
五、相对而言 最好的评价指标 R Squared
不论是rmse还是mae ,如果我们将其运用到两个不同的指标上,比如房价和分数,我们得到的是不同的值,无法评判到底这个模型是用在哪个问题上更好。
结合分类问题中的准确度accuracy 它的范围是0-1 1最好 0最差。
我们是否也可以做出一个统一评判标准呢?
这里就出现了 R 2
我们可以知道 使用y的均值这个模型来预测必然会产生很大的误差
在这里 r2是可能小于0的,证明我们的模型还不如基本模型,此时可能不存在线性关系。
var即方差 std是标准差
1、R squared 代码实现
import numpy as np
#自己计算
r2=1-mean_squared_error(y_test,y_predict)/np.var(y_test)
#sklearn中有api 直接调用
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
r=r2_score(y_test,y_predict)