学习使用 sklearn 的模型度量方法,来量化预测结果

本文介绍了如何使用sklearn的模型度量方法来评估分类模型的效果,包括准确率、召回率、F1分数和混淆矩阵等关键指标的计算方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 任务描述

在前面的关卡,我们已经学会了如果使用 sklearn 训练分类模型,那如何评估模型的分类效果?本关卡将学习使用 sklearn 的模型度量方法,来量化预测结果。

2. 相关知识

相关知识
sklearn 中有三种不同的 API 来评估模型的预测质量:

Estimator score method :在评估器(比如一个分类模型)中有score函数提供默认的评估标准,比如支持向量机sklearn.svm.SVC中的score函数,通过计算预测准确率来评估模型,如下图所示。
在这里插入图片描述
Scoring parameter:cross-validation的模型评估工具比如model_selection.GridSearchCV,可通过设置类的参数scoring来指定评估模型,如下图所示。
在这里插入图片描述

Metric functions: metrics模块实现了一些函数,用来评估预测误差,并且针对不同的目标(分类、回归或聚类问题等)有不同的评估类,具体如下图所示。
在这里插入图片描述

前两种评估方法可以在具体的评估器和交叉验证工具中设置,在这里不过多讨论。我们主要关注 metrics 模块,旨在让同学们学会如何使用常见的指标对分类结果分析评价。

sklearn.metrics 的详细使用可参考官方文档,以下将简单介绍几种常用的评价指标。
在这里插入图片描述
accu\fracy_score(y_true, y_pred, normalize=True, sample_weight=None)
计算分类精度,示例如下图所示:
在这里插入图片描述
其中normalize=True时返回正确分类的比例,设为 False 时返回正确分类的样本个数。

recall_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)
返回模型分类的召回率,示例如下图所示:
在这里插入图片描述
参数:
y_true:实际值;
y_pred:预测值;
pos_label: 仅当 average=’binary’ 时该参数才有效,即仅对二分类有效。参数的值为正类标签或负类标签,指定计算的是正类还是负类;
average:当涉及到二分类/多分类/多标签等不同的问题时,可以通过设置该参数指定计算方式,可取的值包括[None, ‘binary’ (default), ‘micro’, ‘macro’, ‘samples’, ‘weighted’]。

f1_score、precision_score的使用方式和recall_score类似。

confusion_matrix
计算混淆矩阵,示例如下图所示:

在这里插入图片描述
classification_report
该函数建立了一份文本报告展示主要的分类度量指标,比如准确率、召回率、f 值等。示例如下图所示:

在这里插入图片描述
precision_recall_fscore_support
为每个类别计算准确率、召回率、f 值、support 值,示例如下图所示:
在这里插入图片描述

3. 编程要求

编程要求
根据要求,补全右侧编辑器Begin-End区间的代码。本次任务希望对二分类和多分类模型进行评估,本关具体分成为两个子任务:

1.评估二分类模型:训练数据集为二类别数据,通过构建简单的 svm 模型(初始化模型在代码中已给出),对测试数据进行预测,并返回模型正确分类的样本个数、正类的预测准确率、正类的召回率、正类的 f 值。该样本数据中 y = {1,-1},1 表示正类,-1 表示负类;

要补充的代码块如下:

def bin_evaluation(X_train, y_train, X_test, y_test):
‘’’
评估二分类模型
:param X_train: 训练数据集
:param y_train: 训练集类别
:param X_test: 测试数据集
:param y_test: 测试集实际类别
:return:
correct_num - 正确分类的样本个数
prec - 正类的准确率
recall - 正类的召回率
f_score - 正类的f值
‘’’
classifier = LinearSVC()
correct_num, prec, recall, fscore = None, None, None, None
# 请在此添加实现代码 #
# ********** Begin *********#
# ********** End **********#
2.评估多分类模型:数据集为多类别数据,通过构建简单的 svm 模型(初始化模型在代码中已给出),对测试数据进行预测,并返回模型的精度、准确率和 f 值。其中准确率和 f 值的计算方式设定为’macro’。

要补充的代码块如下:

def multi_evaluation(X_train,y_train,X_test,y_test):
‘’’
评估多分类模型
:param X_train: 训练数据集
:param y_train: 训练集类别
:param X_test: 测试数据集
:param y_test: 测试集实际类别
:return:
acc - 模型的精度
prec - 准确率
f_score - f值
‘’’
#初始化
acc,prec,f_score = None,None,None
classifier = SVC(kernel=‘linear’)
# 请在此添加实现代码 #
# ********** Begin *********#
# ********** End **********#

测试说明

平台将运行您补全的代码文件,比对您所编写函数的返回值与正确的数值,只有所有数据全部计算正确才能进入下一关。

开始你的任务吧,祝你成功!

from sklearn.metrics import recall_score,accuracy_score,precision_score,f1_score,precision_recall_fscore_support
from sklearn.svm import LinearSVC,SVC
def bin_evaluation(X_train, y_train, X_test, y_test):
    '''
    评估二分类模型
    :param X_train: 训练数据集
    :param y_train: 训练集类别
    :param X_test: 测试数据集
    :param y_test: 测试集实际类别
    :return:
    correct_num - 正确分类的样本个数
    prec - 正类的准确率
    recall - 正类的召回率
    f_score - 正类的f值
    '''
    classifier = LinearSVC()
    correct_num, prec, recall, fscore = None, None, None, None
    #   请在此添加实现代码   #
    # ********** Begin *********#
    #训练分类器
    classifier.fit(X_train,y_train)
    
    #使用分类器
    y_predicted = classifier.predict(X_test)

    #测试分类器

    correct_num =  accuracy_score(y_test,y_predicted,normalize=False)
    prec =   precision_score(y_test,y_predicted) 
    recall =  recall_score(y_test,y_predicted,average ='binary')
    fscore = f1_score(y_test,y_predicted)

    return correct_num,prec,recall,fscore

    # ********** End **********#
def multi_evaluation(X_train,y_train,X_test,y_test):
    '''
    评估多分类模型
    :param X_train: 训练数据集
    :param y_train: 训练集类别
    :param X_test: 测试数据集
    :param y_test: 测试集实际类别
    :return:
    acc - 模型的精度
    prec - 准确率
    f_score - f值
    '''
    #初始化
    acc,prec,f_score = None,None,None
    classifier = SVC(kernel='linear')
    #   请在此添加实现代码   #
    # ********** Begin *********#
    #训练分类器
    classifier.fit(X_train,y_train)
    
    #使用分类器
    y_predicted = classifier.predict(X_test)

    #测试分类器

    acc =  accuracy_score(y_test,y_predicted)
    prec =   precision_score(y_test,y_predicted,average ='macro') 
    f_score = f1_score(y_test,y_predicted,average ='macro')

    return acc,prec,f_score
    # ********** End **********#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值