机器学习 jupyter Python 常用模型评估指标

1 精度

Accuracy(精度、准确率)和Error Rate(错误率)是分类模型中最常见的两种性能度量指标,既适用于二分类任务,也适用于多分类任务。
对于分类模型f和大小为n的测试集D,Accuracy(精度)的定义为:
在这里插入图片描述
Accuracy = 分对的样本点个数/总的测试的样本个数

2 混淆矩阵

在这里插入图片描述
TP为真正(例),FN为假负(例), FP为假正(例),TN为真负(例)
其中T表示的是True,F代表的是False
P代表正的,N代表负的。

精度accuracy = (TP+TN)/(TP+TN+FP+FN)
精确率precision = TP/(TP+FP)
召回率recall = TP/(TP+FN)

2.1 精确率

精确率表示被预测为正例的样本中有多少是真正的样本。

2.2 召回率

召回率表示所有正类的样本中有多少是被准确预测为正类。

2.3 如何理解精确率和召回率?

现在有四个样本点,实际上的标签为[1,0,0,1],分类的标签为[0,0,0,1]
则每个类别的召回率、精确率和对应的混淆矩阵。
在这里插入图片描述

精度:2+1/2+0+1+1=3/4
j精确率:2/2+1=2/3
召回率:2/2+0=1

3 F1分值

通常,查准率与查全率之间是反比关系。所以要想得到好的模型,我们需要另外一个指标( F1-score )。
F1分值是精确率和召回率的调和值(它是精确率和召回率的调和平均数),更接近于两个数较小的那个,所以精确率和召回率接近时,F1分值最大。很多推荐系统的评测指标就是用F值的。
在这里插入图片描述

有时候公式写为如下的形式:
在这里插入图片描述
注:调和平均数(倒数平均数),𝑥_1,𝑥_2………𝑥_𝑛 的调和平均数为:

在这里插入图片描述

3.3 如何了解查准率和查全率?

脑外科手术提供了一个很鲜明的例子。外科医生需要移除所有的肿瘤细胞,因为任何剩余的癌细胞都会再生肿瘤(召回率)。但是,外科医生必须不移除健康的脑细胞,因为这会使病人的脑功能受损(准确率)。
决策1:外科医生有可能会更自由更大胆地在大脑区域中移除癌细胞。这一决定增加查全率,但降低了查准率。
决策2:另一方面,外科医生可能会在大脑中更保守地移除癌细胞。这一决定提高了查准率,但减少了查全率。

4 sklearn模块中classification_report 介绍

sklearn中的classification_report函数用于显示主要分类指标的文本报告.在报告中显示每个类的精确度,召回率,F1值等信息。 主要参数:
y_true:1维数组,或标签指示器数组/稀疏矩阵,目标值。
y_pred:1维数组,或标签指示器数组/稀疏矩阵,分类器返回的估计
labels:array,
shape = [n_labels],报表中包含的标签索引的可选列表。
target_names:字符串列表,与标签匹配的可选显示名称(相同顺序)。
强调: y_true和y_pred位置千万不要对调;

5 例子

#关于精确率和召回率举例
from sklearn.metrics import classification_report,confusion_matrix#metrics
#classification_report(y_true,y_pred)
print(classification_report([1,0,0,1],[0,0,0,1]))
print(confusion_matrix([1,0,0,1],[0,0,0,1]))
#0类别的精确率:2/3=TP/(TP+FP)
#0类别的召回率:2/2
#1类别的精确率:1/1
#1类别的召回率:1/2 =0.5

运行结果:
在这里插入图片描述
recall是召回率,precision是精确率。

混淆矩阵可视化

def cm_plot(y,yp):
    #导入混淆矩阵
    from sklearn.metrics import confusion_matrix
    #输出混淆矩阵
    cm = confusion_matrix(y,yp)
    print(cm)
    print(len(cm))
    #导入画图工具
    import matplotlib.pyplot as plt
    #画图
#     plt.matshow(cm)
    plt.matshow(cm,cmap=plt.cm.Greens)
    plt.colorbar()
    for x in range(len(cm)):
        for y in range(len(cm)):
            plt.annotate(cm[x,y],xy=(y,x),horizontalalignment='center',verticalalignment='center')
    plt.ylabel('True label')# 坐标轴标签
    plt.xlabel('Predicted label')# 坐标轴标签
y = [1,0,0,1]
yp = [0,0,0,1]
cm_plot(y,yp)

运行结果:
在这里插入图片描述

6 具体案例 鸢尾花

6.1 导入模块和相关包

import numpy as np
from sklearn import datasets#训练集
from sklearn.model_selection import train_test_split#划分测试集,训练集
# from sklearn.metrics import classification_report,confusion_matrix
#性能指标(Metrics)是衡量一个模型好坏的关键
#sklearn中的classification_report函数用于显示主要分类指标的文本报告
from sklearn.naive_bayes import MultinomialNB,BernoulliNB,GaussianNB
#高斯模型主要用于处理连续性数据;前两种模型主要用于处理离散型数据
from sklearn.metrics import accuracy_score

6.2 载入数据集

#载入数据集
iris = datasets.load_iris()
print(type(iris))
# print('特征值:',iris.data)

6.3 划分测试集,训练集,建立模型,训练模型

x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target)#划分测试集,训练集
print(len(x_train))
print(len(x_test))
# mul_nb = MultinomialNB()
# mul_nb = BernoulliNB()
mul_nb = GaussianNB()
mul_nb.fit(x_train,y_train)
prediction = mul_nb.predict(x_test)
accuracy_score(prediction,y_test)#accuracy=分对的样本数/总的测试的样本数

运行结果:
在这里插入图片描述

6.4 导入混淆矩阵包,并且输出混淆矩阵

from sklearn.metrics import classification_report,confusion_matrix
# 性能指标(Metrics)是衡量一个模型好坏的关键
# sklearn中的classification_report函数用于显示主要分类指标的文本报告
print(confusion_matrix(y_test,mul_nb.predict(x_test)))

运行结果:
在这里插入图片描述

6.5 混淆矩阵可视化

def cm_plot(y,yp):
    #导入混淆矩阵
    from sklearn.metrics import confusion_matrix
    #输出混淆矩阵
    cm = confusion_matrix(y,yp)
    print(cm)
    print(len(cm))
    #导入画图工具
    import matplotlib.pyplot as plt
    #画图
#     plt.matshow(cm)
    plt.matshow(cm,cmap=plt.cm.Greens)
    plt.colorbar()
    for x in range(len(cm)):
        for y in range(len(cm)):
            plt.annotate(cm[x,y],xy=(y,x),horizontalalignment='center',verticalalignment='center')
    plt.ylabel('True label')# 坐标轴标签
    plt.xlabel('Predicted label')# 坐标轴标签
cm_plot(y_test,mul_nb.predict(x_test))
#错误纠正
#准确率(精度):(13+14+10)/(13+14+10+1)
#0类别的精确率:13/(13+0+0)
#0类别的召回率:13/(13+0+0)
#1类别的精确率:14/(14+0+0)
#1类别的召回率:14/(14+0+1)

运行结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值