confusion matrix & F1 score

predict_class = model.predict(test_data, verbose=2)
#model.predict输出的为数值,是实数,需要经过np.argmax
predict_class = np.argmax(predict_class,axis=1)
true_classes = np.argmax(test_label,axis=1)
#将onehot label变为对应label值
print(true_classes)
plot_confusion_matrix(true_classes, predict_class, save_flg = True)

#plot 混淆矩阵函数
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix

def plot_confusion_matrix(y_true, y_pred, title = "Confusion matrix",
                          cmap = plt.cm.Blues, save_flg = False):
    classes = [str(i) for i in range(10)]
    labels = range(10)

    cm = confusion_matrix(y_true, y_pred, labels=labels)
    plt.figure(figsize=(14, 12))
    plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title, fontsize=40)
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, fontsize=20)
    plt.yticks(tick_marks, classes, fontsize=20)

    print('Confusion matrix, without normalization')

    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(j, i, cm[i, j],
                 horizontalalignment="center",
                 color="white" if cm[i, j] > thresh else "black")

    plt.ylabel('True label', fontsize=30)
    plt.xlabel('Predicted label', fontsize=30)

    if save_flg:
        plt.savefig("./confusion_matrix.png")

    plt.show()

图形中添加纯文本注释plt.text


from sklearn.metrics import precision_score, recall_score, f1_score

precision = precision_score(true_classes, predict_class, average='weighted')#多分类问题
recall = recall_score(true_classes, predict_class, average='weighted')
f1score = f1_score(true_classes, predict_class, average='weighted')

print('precision_score is  : ',precision)
print('recall_score is  : ' ,recall)
print('f1_score is : ',f1score)

其中average参数有五种:(None, ‘micro’, ‘macro’, ‘weighted’, ‘samples’) 

宏平均(Macro-averaging),是先对每一个类统计指标值,然后在对所有类求算术平均值。 
微平均(Micro-averaging),是对数据集中的每一个实例不分类别进行统计建立全局混淆矩阵,然后计算相应指标。

None:将返回一个数组,它包含了每个类的得分;

micro:给出了每个样本类以及它对整个metrics的贡献的pair(sample-weight),而非对整个类的metrics求和,它将每个类的metrics上的权重及因子进行求和来计算整个份额。micro-averaging方法在多标签(multilabel)问题中设置,包含多分类,此时大类将被忽略。

macro:计算二分类metrics的均值,为每个类给出相同权重的分值。当小类很重要时会出问题,因为macro-averaging方法是对性能的平均。另一方面,该方法假设所有分类都是一样重要的,因此macro-averaging方法会对小类的性能影响很大。

samples:应用在multilabel问题上。它不会计算每个类,相反,它会在评估数据中,通过计算真实类和预测类的差异的metrics来求平均(sample_weight-weighted)

weighted:对于不均衡数量的类来说,计算二分类metrics的平均,通过在每个类的score上进行加权实现。

 

acc、recall、F1、混淆矩阵、分类综合报告

sklearn中常用类和方法小结

matrix_confusion程序-github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值