评价评估模型

目录

一、回归评价指标

1、MSE(均方差)

Mean squared error

 2、MSE(平均绝对误差)

3、​编辑决定系数

4、Adjusted R-squre(矫正决定系数)

5、RMSE(平方根误差)

二、分类评价指标

1、正确率和错误率

2、精准度和召回率

3、综合精准度和召回率

4、ROC曲线和AUC值


一、回归评价指标

思考角度:

1、是否预测到了正确的数值(MSE、MAE)

    如果说真实曲线和拟合曲线的前半部分拟合的非常好,后半部分非常不好的话,MSE、MAE因为拟合的数据非常多,数值很小,因为大部分样本完全拟合,少部分样本有巨大差异。这就是没有拟合到足够的信息。

2、是否拟合到了足够的信息(R^{2}

回归模型有:

1、Linear Regression线性回归

2、Logistic Regression逻辑回归

3、Polynomial Regression多项式回归

4、Stepwise Regression逐步回归

1、MSE(均方差)

Mean squared error

用来衡量预测值和真实值的差异,本质上是在和方差的基础上除以样本总量,得到样本量上胡平均误差。

有了平均误差,就可以将平均误差肯标签的取值范围在一起比较,以此获得一个较为可靠胡评估依据。

MSE = \frac{1}{m}\sum_{i=1}^{m}\left\(y_{i}-\hat{y_{i}}\right\)^{2}

使用sklearn中的参数scoring下,均方误差为负,标准时,却是计算负均方误差(neg_mean_squared_error),这是因为sklearn在计算模型评估指标的时候,会考虑指标本身的性质,均方误差本身是一种误差,所以被sklearn划分为模型的一种损失(loss)。在sklearn中,所有损失都用负数表示,因此均方误差也被显示负数了,去掉负号就是正确的值。

from sklearn.metrics import mean_squared_error as MSE
y_true, y_pred = [3, -0.5, 2, 7], [2.5, 0.0, 2, 8]
MSE(y_true, y_pred)

 2、MSE(平均绝对误差)

Mean absolute error

MAE = \frac{1}{m}\sum_{i=1}^{m}\left | y_{i}-\hat{y_{i}}\right | ^{2}

现实中,MSE和MAE选一个来用就好了,MSE更常见。

from sklearn.metrics import mean_squared_error
y_true, y_pred = [3, -0.5, 2, 7], [2.5, 0.0, 2, 8]
mean_squared_error(y_true, y_pred)

3、R^{2}决定系数

R^{2}_score

使用方差来衡量数据上的信息。如果方差越大,代表数据上的信息量越多,而这个信息量不仅包括了数值的大小,还包括了希望模型捕捉的那些规律。

R^{2}=1-\frac{\sum_{i=0}^{m}\left\(y_{i} - \hat{y_{i}}\right\)^{2}}{\sum_{i=0}^{m}\left\(y_{i} - \bar{y_{i}}\right\)^{2}}

y是真实标签,\hat{y}是预测结果,\bar{y}是均值,y_{i} - \bar{y_{i}如果除以样本量m就是方差。方差的本质是任意一个y值和样本均值的差异,差异越大,这些值所带的信息越多。

分子是真实值和预测值之差的差值,也就是模型没有捕获到的信息总量,分母是真实标签所带的信息量,所以其衡量的是(1-模型没有捕获到的信息量占真实标签中所带的信息量的比例),所以,R^{2}越接近1越好,但是理论上取值负无穷到1。

越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好
越接近0,表明模型拟合的越差
经验值:>0.4, 拟合效果好
缺点:数据集的样本越大,R²越大,因此,不同数据集的模型结果比较会有一定的误差
,随着自变量个数的增加,R将不断增大(或者只是在一部分拟合的好,所以数据集越大,拟合不好的地方越多,R2的表现就会越不一样)

注意:预测值必须在分子,真实值在分母。

from sklearn.metrics import r2_score
y_true, y_pred = [3, -0.5, 2, 7], [2.5, 0.0, 2, 8]
r2_score(y_true, y_pred)
r2 = reg.score(y_true,y_pred)
print(r2)

(R2可用于PCA降维后的模型评估) 

4、Adjusted R-squre(矫正决定系数)

R^{2}\_adjusted = 1-\frac{(1-R^{2})(n-1)}{n-p-1}

n为样本数量,p为特征数量。

优点:抵消样本数量和特征数量对R-square的影响。

from sklearn.metrics import r2_score

def score(a,b,dimension):
# a is predict, b is actual. dimension is len(train[0]).
    rr = r2_score(a, b)
    adjust_rr = 1 - (1- rr)*(len(a)-1)/(len(a)-dimension-1)

    return adjust_rr

y_true, y_pred = [8, -0.5, 2, 7], [2.5, 0.0, 2, 8]
print(len(y_true))
score(y_true,y_pred,0)

5、RMSE(平方根误差)

root mean square error

RMSE = \sqrt{\frac{\sum^{n}_{i=1}\left\(y_{i}-\hat{y_{i}}\right\)^2}{n}}

缺点:平均值是非鲁棒性的,对异常点敏感,如果某个异常点目标大,整个RMSE都会很大。

二、分类评价指标

以二分类为例,最后的分类结果为“是”或“否”

下面是预测,右面是真实正类+负类-
正类+TPFP
负类-FNTN

TP:预测正确+预测值为正类;FP:预测结果错误+预测值为正类

TN:预测错误+预测值为负类;TN:预测结果正确+预测值为负类

常见指标:

1、正确率和错误率

accuracy = \frac{TP+TN}{TP+TN+FP+FN}

error rate=\frac{FN+FP}{TP+TN+FP+FN}

2、精准度和召回率

Precision = \frac{TP}{TP+FP}

预测为正类的样本的正确率。

精准度与正确率的区别在于:精确度单独评估某一类类别的的正确率。

Recall = \frac{TP}{TP+FN}

预测为正类且真实为正类的样本数/所有真实为正类的样本

例:采购员去买西瓜,希望把所有好的西瓜都买到。

3、综合精准度和召回率

F-measure :F_{\beta} = (1+\beta^{2})\frac{precision*recall}{(\beta^{2}*precision)+recall}

beta是一个参数,用于确定是更在乎精准率一点还是召回率一点。通常beta为1,表明精准率和召回率比重一样。Fmeasure的存在,是因为我们经常需要在精准度和召回率之间作平衡。

想象一个非常极端的模型,这个模型只把它认为最有可能是正类的样本预测为是正类,其余全部为负类,这个模型的精准度会非常高,而召回率可能会非常低。又或者,一个极端模型把所有的样本都预测为正类,这个时候FN\TN为0,召回率为1,但它的精确度肯定很低。

所以精确度和召回率需要权衡。

4、ROC曲线和AUC值

衡量模型且衡量模型给到测试样本的排序,即有多少可能是这个分类。

举二分类为例,分类过后会出现预测样本正类的概率是多少,用某一个概率a为界对预测出来的样本作区分,大于a就预测为正类,小于a就预测为负类。这样的话,一个概率a就会对应一个混淆矩阵。

ROC曲线的作用就是把所有的混淆矩阵都表示在同一个二维空间里。一个混淆矩阵对应一个TPR(True positive rate)和FPR(Flase positive rate).

TPR = \frac{TP}{TP+TN},即判断正确的正类占真实正类的比值;

FPR = \frac{FP}{FP+TN},判断错误的负类占真实负类的比值,或1-判断正确的负类占真实负类的比值;

每一个概率a对应一组TPR和FPR,以TPR为纵坐标,FPR为横坐标作图。

 那如何分辨ROC曲线对应的分类器的效果呢?由于TPR是预测正确的正类的概率,FPR是预测错误的正类的概率,我们自然希望是TPR越大越好,所以我们会希望曲线越接近左上角越好。

所以就有了AUC值,AUC表示曲线与横纵轴围成面积。AUC值范围为0-1,越大越好。

如果是N分类,有两种方法——宏观macro,微观micro;

宏观macro:针对每一个类别,画一个ROC曲线,求出对应的AUC值,对所有类别的AUC值求平均,求出所有类别的宏观AUC值;

微观micro:计算预测成每一种类别的概率,如样本1预测成C1的概率为P(1,1),样本1预测称C2的概率为P(1,2),每行所有的概率和为1。橙色方块表示该样本所属的真是类别,如样本一真实类别为C1,样本2真实类别为C3。

这样就可以得到经过转化的整个模型的ROC曲线和AUC值。

from sklearn.metrics import confusion_matrix  
from sklearn.metrics import roc_auc_score
import matplotlib.pyplot as plt
import numpy as np
# 假如有一个模型在测试集上得到的预测结果为:  
y_true = [1, 0, 0, 2, 1, 0, 3, 3, 3] # 实际的类别  
y_pred = [1, 1, 0, 2, 1, 0, 1, 3, 3] # 模型预测的类别  
  # 使用sklearn 模块计算混淆矩阵  
confusion_mat = confusion_matrix(y_true, y_pred)  
print(confusion_mat) #看看混淆矩阵长啥样  

def plot_confusion_matrix(confusion_mat):  
    '''''将混淆矩阵画图并显示出来'''  
    plt.imshow(confusion_mat, interpolation='nearest', cmap=plt.cm.gray)  
    plt.title('Confusion matrix')  
    plt.colorbar()  
    tick_marks = np.arange(confusion_mat.shape[0])  
    plt.xticks(tick_marks, tick_marks)  
    plt.yticks(tick_marks, tick_marks)  
    plt.ylabel('True label')  
    plt.xlabel('Predicted label')  
    plt.show()  
  
plot_confusion_matrix(confusion_mat)#画图

 
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
roc_auc_score(y_true, y_scores) #输出auc值

学习对象:

http://t.csdn.cn/2uioz  7大回归模型总结

http://t.csdn.cn/x6BqW  机器学习之模型评估方法总结

http://t.csdn.cn/Zopij  模型评估(回归分类)

http://t.csdn.cn/31ZBr  模型评估(有sklearn API)

【【小萌五分钟】机器学习 | 模型评估: ROC曲线与AUC值】 https://www.bilibili.com/video/BV1wz4y197LU/?share_source=copy_web&vd_source=98fbab4e0ff3ef4e18cd477db479634d

http://t.csdn.cn/aMmID  回归分类模型评估(分类代码)

http://t.csdn.cn/2YpWW  模型评估(有sklearn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值