机器学习笔记_准确率,精确率,召回率,F1

准确率、精确率、召回率、F1、AUC和ROC曲线其实都是评价模型好坏的指标,而且相互之间是有关系的,只是侧重点不同。我们知道二分类的混淆矩阵(confusion matrix)如下:

  • 真正例(TP):实际上是正例的数据点被标记为正例
  • 假正例(FP):实际上是反例的数据点被标记为正例
  • 真反例(TN):实际上是反例的数据点被标记为反例
  • 假反例(FN):实际上是正例的数据点被标记为反例
机器学习笔记_准确率,精确率,召回率,F1

准确率 (accuracy)= 分类正确的数量/总样本量=(TP+TN)/总样本量 = (TP+TN)/(TP+TN+FP+FN

精确率(Precision)= 预测为正的样本中有多少是真正的正样本=TP/(TP+FP) ,也叫查准率);分类模型仅仅返回相关实例的能力

召回率(Recall)= 正类样本中有多少被预测正确了=TP/(TP+FN),也叫查全率;分类模型识别所有相关实例的能力。

F1值是精确率和召回率的调和均值,即F1=2PR/(P+R),相当于精确率和召回率的综合评价指标。

机器学习笔记_准确率,精确率,召回率,F1

受试者特征曲线(ROC 曲线,Receiver Operating Characteristic curve):

ROC曲线的横坐标为false positive rate(FPR):FP/(FP+TN);假阳性率,即实际无病,但根据筛检被判为有病的百分比;在实际为0的样本中你预测为1的概率;假正率(FPR) = 1- 特异度 = FP/(FP+TN)

纵坐标为true positive rate(TPR):TP/(TP+FN);真阳性率,即实际有病,但根据筛检被判为有病的百分比;真正率(TPR) = 灵敏度 = TP/(TP+FN)

这两者都可以通过混淆矩阵计算得到。

机器学习笔记_准确率,精确率,召回率,F1
机器学习笔记_准确率,精确率,召回率,F1

ROC曲线的阈值问题

与前面的 P-R 曲线类似,ROC 曲线也是通过遍历所有阈值来绘制整条曲线的。如果我们不断的遍历所有阈值,预测的正样本和负样本是在不断变化的,相应的在 ROC 曲线图中也会沿着曲线滑动。

如何判断ROC曲线的好坏?

改变阈值只是不断地改变预测的正负样本数,即 TPR 和 FPR,但是曲线本身是不会变的。那么如何判断一个模型的 ROC 曲线是好的呢?这个还是要回归到我们的目的:FPR 表示模型虚报的响应程度,而 TPR 表示模型预测响应的覆盖程度。我们所希望的当然是:虚报的越少越好,覆盖的越多越好。所以总结一下就是 TPR 越高,同时 FPR 越低(即 ROC 曲线越陡),那么模型的性能就越好

AUC(曲线下的面积)

完全随机的二分类器的AUC为0.5,虽然在不同的阈值下有不同的FPR和TPR,但相对面积更大,更靠近左上角的曲线代表着一个更加稳健的二分类器。

AUC 的一般判断标准

0.5-0.7: 效果较低,但用于预测股票已经很不错了

0.7-0.85: 效果一般

0.85-0.95: 效果很好

0.95-1: 效果非常好,但一般不太可能

check = clf.predict(xgb.DMatrix(train), ntree_limit=clf.best_ntree_limit) predictions = [round(value) for value in check]
# evaluate predictions
      
Xgbc_accuracy = accuracy_score(label, predictions)
Xgbc_precision = precision_score(label, predictions)
Xgbc_sensitivity = recall_score(label, predictions)
Xgbc_f1_score = f1_score(label, predictions)
#定义混淆矩阵,算出特异性
def specificity_score(y_true, y_predicted):
  cm = confusion_matrix(y_true, y_predicted)
  return cm[0, 0] / (cm[0, 0] + cm[0, 1])
    
Xgbc_specificity = specificity_score(label, predictions)
    
print('Xgbc_accuracy:%.3f,Xgbc_precision:%.3f, Xgbc_sensitivity:%.3f,Xgbc_specificity:%.3f,Xgbc_f1_score:%.3f'
          %(Xgbc_accuracy,Xgbc_precision, Xgbc_sensitivity, Xgbc_specificity, Xgbc_f1_score ))
Xgbc_fpr,Xgbc_tpr,Xgbc_threasholds=roc_curve(label,check)
Xgbc_auc=roc_auc_score(label,check)

    原创文章(本站视频密码:66668888),作者:xujunzju,如若转载,请注明出处:https://zyicu.cn/?p=9100

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    xujunzju管理者
    上一篇 2022年2月5日 15:41
    下一篇 2022年2月6日 22:57

    相关推荐

    发表回复

    登录后才能评论
    联系我们
    邮箱:
    xujunzju@gmail.com
    公众号:
    xujunzju6174
    捐赠本站
    捐赠本站
    分享本页
    返回顶部