confusion_matrix混淆矩阵的使用

混淆矩阵

       混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。具体评价指标有总体精度、制图精度、用户精度等,这些精度指标从不同的侧面反映了图像分类的精度。 在人工智能中,混淆矩阵(confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵。在图像精度评价中,主要用于比较分类结果和实际测得值,可以把分类结果的精度显示在一个混淆矩阵里面。混淆矩阵是通过将每个实测像元的位置和分类与分类图像中的相应位置和分类相比较计算的。

1.简介

        混淆矩阵(Confusion Matrix):
        混淆矩阵的每一列代表了预测类别,每一列的总数表示预测为该类别的数据的数目;每一行代表了数据的真实归属类别,每一行的数据总数表示该类别的数据实例的数目。每一列中的数值表示真实数据被预测为该类的数目:如下图,第一行第一列中的43表示有43个实际归属第一类的实例被预测为第一类,同理,第一行第二列的2表示有2个实际归属为第一类的实例被错误预测为第二类。

2.举例

        如有150个样本数据,预测为1,2,3类各为50个。分类结束后得到的混淆矩阵为:
在这里插入图片描述
每一行之和表示该类别的真实样本数量,每一列之和表示被预测为该类别的样本数量,第一行说明有43个属于第一类的样本被正确预测为了第一类,有两个属于第一类的样本被错误预测为了第二类

3.confusion_matrix函数的使用

def confusion_matrix(y_true, y_pred, labels=None, sample_weight=None):

y_true: 是样本真实分类结果,y_pred: 是样本预测分类结果
labels:是所给出的类别,通过这个可对类别进行选择
sample_weight : 样本权重

3.1实现例子1

from sklearn.metrics import confusion_matrix
y_true = [2, 0, 2, 2, 0, 1]
y_pred = [0, 0, 2, 2, 0, 2]
x = confusion_matrix(y_true, y_pred)
print(x)

在这里插入图片描述
        结果:第一行第一列2表示标签为0,预测为0 有两个,第一行第二列0表示标签为0,把1预测为0的有0个。。。。依次类推。对角线之和就是预测对的数目。

3.2实现例子2

y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
a = confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"])
print(a)

在这里插入图片描述

3.3实现例子3

        我们通过样本的采集,能够直接知道真实情况下,哪些数据结果是positive,哪些结果是negative。同时,我们通过用样本数据跑出分类型模型的结果,也可以知道模型认为这些数据哪些是positive,哪些是negative。

因此,我们就能得到这样四个基础指标,我称他们是一级指标(最底层的):

        1.真实值是positive,模型认为是positive的数量(True Positive=TP)
        2.真实值是positive,模型认为是negative的数量(False Negative=FN):这就是统计学上的第一类错误(Type I Error)
        3.真实值是negative,模型认为是positive的数量(False Positive=FP):这就是统计学上的第二类错误(Type II Error)
        4.真实值是negative,模型认为是negative的数量(True Negative=TN)
将这四个指标一起呈现在表格中,就能得到如下这样一个矩阵,我们称它为混淆矩阵(Confusion Matrix):
在这里插入图片描述

from sklearn.metrics import confusion_matrix
tn, fp, fn, tp = confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0]).ravel()
print(tn, fp, fn, tp)

在这里插入图片描述
        tn表示:真实值是negative,模型认为是negative的数量,可以看出我们的真实值有两个negative也就是0,模型任认为是negative的数量也为0,所以tn=0

        fn表示;2.真实值是positive,模型认为是negative的数量,可以看出真实值有两个1,模型任认为是negative的数量也为一个0,所以fn=0

        以此类推…

个人微信公众号,专注于学习资源、笔记分享,欢迎关注。我们一起成长,一起学习。一直纯真着,善良着,温情地热爱生活,,如果觉得有点用的话,请不要吝啬你手中点赞的权力,谢谢我亲爱的读者朋友
五角钱的程序员,专注于学习资源、笔记分享。
Courage is not the absence of fear, but rather the judgement that something else is more important than fear.
拥有勇气并不是不再恐惧,而是知道把恐惧抛在后头,去追求更重要的东西。

XL
2020年3月23日于重庆城口
好好学习,天天向上,终有所获

GridSearchCV是一个用于超参数调优的工具,它可以帮助我们自动地搜索最佳超参数的组合。在使用GridSearchCV进行模型训练时,我们可以通过设置参数scoring来选择模型评估方法,其中可以选择使用混淆矩阵进行评估。 下面是一个使用GridSearchCV和混淆矩阵进行模型训练和评估的示例代码: ```python from sklearn.metrics import confusion_matrix from sklearn.model_selection import GridSearchCV from sklearn.svm import SVC from sklearn.datasets import load_digits # 加载手写数字数据集 digits = load_digits() # 定义SVC模型和超参数搜索范围 svc = SVC() param_grid = { 'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf'] } # 定义混淆矩阵打印函数 def print_confusion_matrix(y_true, y_pred): cm = confusion_matrix(y_true, y_pred) print('Confusion matrix:\n{}'.format(cm)) # 使用GridSearchCV进行模型训练和超参数搜索 grid_search = GridSearchCV(svc, param_grid=param_grid, scoring='accuracy', cv=5) grid_search.fit(digits.data, digits.target) # 打印最佳超参数和最佳得分 print('Best parameters: {}'.format(grid_search.best_params_)) print('Best score: {:.2f}'.format(grid_search.best_score_)) # 计算测试集上的预测结果并打印混淆矩阵 y_pred = grid_search.predict(digits.data) print_confusion_matrix(digits.target, y_pred) ``` 在上述示例代码中,我们首先加载手写数字数据集,然后定义了一个SVC模型和超参数搜索范围。接着,我们定义了一个打印混淆矩阵函数print_confusion_matrix。 然后,我们使用GridSearchCV进行模型训练和超参数搜索,其中设置了参数scoring为'accuracy'来进行模型评估。最后,我们使用训练好的模型对测试集进行预测,并调用print_confusion_matrix函数来打印测试集上的混淆矩阵
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值