模型评估方法(交叉验证,混淆矩阵,阈值,ROC曲线)

本文介绍了如何使用scikit-learn库中的工具进行手写数字识别,包括数据集加载、数据切分、交叉验证方法、模型训练(如SGDClassifier)以及性能评估指标如混淆矩阵、ROC曲线和F1分数。作者详细展示了如何使用这些技术调整模型参数和理解阈值对结果的影响。

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

        前言

        工具包地址:https://scikit-learn.org

        

        这里有sklearn各种算法,数据集的调用方法,例子,读者可以使用右上角的搜索框。

数据集切分

        本文用手写数字识别作为例子。

#导入工具包
import numpy as np
import os
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warnings
warnings.filterwarnings('ignore')
np.random.seed(42)

#加载数据集 值得注意的是 28x28x1的灰度图 
from sklearn.datasets import fetch_openml
X, y = fetch_openml(
    "mnist_784", version=1, return_X_y=True, as_frame=False, parser="pandas"
)
print(X.shape) #(70000,784) 70000个样本 784个特征值

X_train,X_test,y_train,y_test = X[:60000],X[60000:],y[:60000],y[60000:]#划分数据集

 洗牌操作(把数据打乱顺序,数据之间独立)

shuffle_index = np.random.permutation(60000)
X_train,y_train = X_train[shuffle_index],y_train[shuffle_index]

交叉验证

        前60000分样本划分为训练集 用来作为交叉验证 调整模型参数

        在使用训练集对参数进行训练的时候,通常会将一整个训练集分为三个部分(比如mnist手写训练集)。一般分为:训练集(train_set),评估集(valid_set),测试集(test_set)这三个部分。这其实是为了保证训练效果而特意设置的。其中测试集很好理解,其实就是完全不参与训练的数据,仅仅用来观测测试效果的数据。而训练集和评估集则牵涉到下面的知识了。

        因为在实际的训练中,训练的结果对于训练集的拟合程度通常还是挺好的(初始条件敏感),但是对于训练集之外的数据的拟合程度通常就不那么令人满意了。因此我们通常并不会把所有的数据集都拿来训练,而是分出一部分来(这一部分不参加训练)对训练集生成的参数进行测试,相对客观的判断这些参数对训练集之外的数据的符合程度。这种思想就称为交叉验证(Cross Validation)。

        交叉验证(Cross Validation),有的时候也称作循环估计(Rotation Estimation),是一种统计学上将数据样本切割成较小子集的实用方法。

        在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。这个过程一直进行,直到所有的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值