机器学习之评价指标(混淆矩阵、准确度accuracy、精确率precision、召回率recall、F1-score)

一、 模型评价指标 这是我第一次写博客,有什么不足的地方望指正,本文主要讲解建模之后,评价模型的好坏的方法。
混淆矩阵
首先提出四个术语TP、TN、FP、FN

  1. TP(True Positive):预测为正的真实值也为正的样本。
  2. TN(True Negative):预测值为负的真实值也为负的样本。
  3. FP(False Positive):预测值为正的真实值为负的样本。
  4. FN(False Negative):预测值为负的真实值为正的样本。
真实类别
1 0
预测类别 positive TP FP
negative FN TN
准确度(accuracy)
机器学习之评价指标(混淆矩阵、准确度accuracy、精确率precision、召回率recall、F1-score)
文章图片

精确度(precision)
预测值为1且真实值也为1的样本在值为1的所有样本中所占的比例
机器学习之评价指标(混淆矩阵、准确度accuracy、精确率precision、召回率recall、F1-score)
文章图片

召回率(recall)
预测值为1且真实值也为1的样本在预测值为1的所有样本中所占的比例
机器学习之评价指标(混淆矩阵、准确度accuracy、精确率precision、召回率recall、F1-score)
文章图片

F1分数
F1分数(F1 Score)是统计学中用来衡量分类模型精确度的一种指标。它同时兼顾了分类模型的准确率和召回率。F1分数可以看作是模型准确率和召回率的一种加权平均,它的最大值是1,最小值是0,F1分数越接近1,即认为模型效果越好。F1的公式如下所示:
机器学习之评价指标(混淆矩阵、准确度accuracy、精确率precision、召回率recall、F1-score)
文章图片

二、案例(网络入侵自动识别) 导入相关库(python代码)
import pandas as pd import matplotlib.pyplot as plt import matplotlib.pylab as pylab import seaborn as sns from sklearn.metrics import confusion_matrix from sklearn.metrics import accuracy_score, precision_score, recall_score from sklearn.metrics import f1_score from sklearn.metrics import roc_auc_score from sklearn.model_selection import cross_val_score from sklearn.tree import export_graphviz from sklearn.metrics import roc_curve, auc from sklearn.metrics import classification_report from sklearn.ensemble import RandomForestClassifier

加载数据集
# 读取数据 intrusion1= pd.read_csv('net_intrusion_end2.csv', encoding='utf-8',error_bad_lines=False) # 将数据集随机抽取80%作为训练集20%为测试集 X_train, X_test, y_train, y_test = train_test_split(intrusion1.drop('class.',axis=1), intrusion1['class.'], test_size = .2, random_state=10) #决策树 tree = DecisionTreeClassifier(random_state=5) tree.fit(X_train, y_train) # 预测结果 y_predict = tree.predict(X_test) y_pred_quant = tree.predict_proba(X_test)[:, 1] y_pred_bin = tree.predict(X_test) print(set(y_pred_bin)) # 输出测试集数据混淆矩阵 confusion_matrix = confusion_matrix(y_test, y_pred_bin) confusion_matrix class_names = [0,1] fig,ax = plt.subplots() tick_marks = np.arange(len(class_names)) plt.xticks(tick_marks,class_names) plt.yticks(tick_marks,class_names) sns.heatmap(pd.DataFrame(confusion_matrix), annot = True, cmap = 'YlGnBu',fmt = 'g') ax.xaxis.set_label_position('top') plt.tight_layout() plt.title('test Confusion matrix for DecisionTreeClassifier Model', y = 1.1) plt.ylabel('Actual label') plt.xlabel('Predicted label') plt.show() #准确率,精确率,召回率 total=sum(sum(confusion_matrix)) priciseDos = confusion_matrix[0,0]/(confusion_matrix[0,0]+confusion_matrix[0,1]+confusion_matrix[0,2]+confusion_matrix[0,3]+confusion_matrix[0,4]) recallDos = confusion_matrix[0,0]/(confusion_matrix[0,0]+confusion_matrix[1,0]+confusion_matrix[2,0]+confusion_matrix[3,0]+confusion_matrix[4,0]) priciseProbing = confusion_matrix[1,1]/(confusion_matrix[1,0]+confusion_matrix[1,1]+confusion_matrix[1,2]+confusion_matrix[1,3]+confusion_matrix[1,4]) recallProbing= confusion_matrix[1,1]/(confusion_matrix[0,1]+confusion_matrix[1,1]+confusion_matrix[2,1]+confusion_matrix[3,1]+confusion_matrix[4,1]) priciseR2L = confusion_matrix[2,2]/(confusion_matrix[2,0]+confusion_matrix[2,1]+confusion_matrix[2,2]+confusion_matrix[2,3]+confusion_matrix[2,4]) recallR2L = confusion_matrix[2,2]/(confusion_matrix[0,2]+confusion_matrix[1,2]+confusion_matrix[2,2]+confusion_matrix[3,2]+confusion_matrix[4,2]) priciseU2R = confusion_matrix[3,3]/(confusion_matrix[3,0]+confusion_matrix[3,1]+confusion_matrix[3,2]+confusion_matrix[3,3]+confusion_matrix[3,4]) recallU2R = confusion_matrix[3,3]/(confusion_matrix[0,3]+confusion_matrix[1,3]+confusion_matrix[2,3]+confusion_matrix[3,3]+confusion_matrix[4,3]) priciseNormal = confusion_matrix[4,4]/(confusion_matrix[4,0]+confusion_matrix[4,1]+confusion_matrix[4,2]+confusion_matrix[4,3]+confusion_matrix[4,4]) recallNormal = confusion_matrix[4,4]/(confusion_matrix[0,4]+confusion_matrix[1,4]+confusion_matrix[2,4]+confusion_matrix[3,4]+confusion_matrix[4,4]) accu=confusion_matrix[0][0]+confusion_matrix[1][1]+confusion_matrix[2][2]+confusion_matrix[3][3]+confusion_matrix[4][4] accuracy=accu/total print('priciseDos: ',priciseDos) print('recallDos : ', recallDos) print('priciseProbing : ',priciseProbing ) print('recallProbing: ', recallProbing ) print('priciseR2L ',priciseR2L) print('recallR2L : ', recallR2L) print('priciseU2R ',priciseU2R) print('recallU2R : ', recallU2R) print('priciseNormal ',priciseNormal) print('recallNormal : ', recallNormal) print(accuracy)

【机器学习之评价指标(混淆矩阵、准确度accuracy、精确率precision、召回率recall、F1-score)】机器学习之评价指标(混淆矩阵、准确度accuracy、精确率precision、召回率recall、F1-score)
文章图片

    推荐阅读