机器学习——模型评估、样本分组、性能度量(Iris数据集)

本文介绍了机器学习中模型评估的关键概念,包括样本分组的留出法、交叉验证法和自助法。通过使用Iris数据集,详细展示了如何运用SVM算法,并使用错误率、精度、查准率、查全率和F1等性能度量进行实验分析。此外,还探讨了不同性能度量的适用场景和优缺点。
摘要由CSDN通过智能技术生成

第三周的理论课课后作业,对模型进行评估

对Iris数据集,分别采用SVM算法的线性核、高斯核函数,数据集划分方法分别采用留出法、10折交叉验证法、自助法(可选),性能度量分别采用计算错误率、精度、第一类的查准率和查全率、F1、ROC绘制(可选)进行实验。以表格形式呈现结果,并适当进行分析讨论。(参考网址:https://www.cnblogs.com/luyaoblog/p/6775342.html)

概述

我们通常把学习器的预测和真实值之间的差异成为误差,在训练集上的误差成为训练误差,而在新样本(测试集)上的误差成为泛化误差。显然我们希望得到的是泛化误差小的学习器。本次学习的重点,便是如何利用一组样本,来训练和测试学习器的性能,其中使用到样本的分组方法和性能的度量方法。

一、样本分组

样本分组要尽可能满足训练集和测试集互斥,因为我们更希望测试学习器“举一反三”的能力。若测试集与训练集部分重合,相当于“泄题”。

留出法

简单地说就是选取一部分样本作为训练集,剩余的样本为测试集

在使用留出法时,需要注意:

  • 要有足够的样本量,以保证训练模型的效果
  • 在划分时注意保证数据分布的一致性(如:500个样本 中正例和反例的比为2:3,则在训练集和测试集中正例和反例的比也要求为2:3),只需要采用随机分层抽样即可
  • 为了减弱随机划分的影响,重复划分训练集和测试集,对得到的多次结果取平均作为最后的结果
  • 一般训练集和测试集的比例在8:2或者7:3

当然留出法的缺点也非常明显,即它会损失一定的样本信息;同时需要大样本

代码

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1, train_size=0.7)

train_test_split返回的是样本的内容,而非索引

random_state:随机种子数,当设定值(一般为0)后可方便调参,因为每次生成的数据集相同
train_size:小于1是训练组占全体的百分比,大于1的整数是训练组样本个数

交叉验证法

交叉验证法(cross validation)可以很好地解决留出法的问题,它对数据量的要求不高,并且样本信息损失不多。

交叉验证法把样本分为k个大小相同的互斥子集,选取一个子集作为测试集而其他作为训练集,那么就得到了k组训练集/测试集。

在这里插入图片描述显然,交叉验证法结果的稳定性和保真性很大程度取决于k的选择,为了强调这一点,交叉验证法也称作“k折交叉验证法”,k最常取的是10,也有取5或者20的。(图示k=5)

如果想对数据集重复几次使用交叉验证法划分的话,使用RepeatedKFold函数即可,其中多了一个参数n_repeats

与留出法相比,交叉验证法的数据损失较小,更加适合于小样本,但是其计算复杂度变高,存储空间变大。极端的说来,如果将数据集D(m个样本)分成m份,每次都取m-1个样本为训练集,余下的那一个为测试集。共进行m次训练和测试。这种方法被叫做留一法。

代码

from sklearn.model_selection import KFold, StratifiedKFold
kf1 = StratifiedKFold(n_splits=10, shuffle=False, random_state=None)
kf2 = KFold(n_splits=10, shuffle=False, random_state=None)

for train, test in kf1.split(x, y):
        x_train, x_test, y_train, y_test = x[train], x[test], y[train], y[test]
        clf.fit(x_train, y_train.ravel())
        y_hat = clf.predict(x_test)

函数返回的是样本序号。

StratifiedKFold和KFold都能实现交叉验证法,其中StratifiedKFold是分层分组,KFold不分层

n_splits:分组数
shuffle:在每次划分时,是否进行洗牌
若为False,其效果相当于random_state为整数(含零),每次划分的结果相同
若为True,每次划分的结果不一样,表示经过洗牌,随机取样的
random_state:随机种子数,当设定值(一般为0)后可方便调参,因为每次生成的数据集相同

自助法

暂略

二、性能度量

性能度量(performance measure)是衡量模型泛化能力的评价标准。
性能度量反映了任务需求,对于一个模型,使用不同的性能度量进行评判往往会得到不同的结果。这意味着模型好坏的是对的,一个模型是好的,不仅取决于算法和数据,还取决于任务需求。

回归任务常用的性能度量是均方误差
E = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E=1m \sum_{i=1}^{m} (f(x_i)-y_i)^2 E=1mi=1m(f(xi)yi)2
分类任务常用的性能度量有错误率、精度查、准率、查全率、F1

混淆矩阵

对于二分类问题,可以将样例分为真正类(true positive)、假正类(false positive)、正负类(true negative)、假负类(false negative)。分类结果如混淆矩阵(ocnfusion matrix)所示

在这里插入图片描述显然,
正类样本个数=TP+FN
负类样本个数=FP+TN
预测为正类样本个数=TP+FP
预测为负类样本个数=FN+TN

对于多分类问题,如有类0、类1、类2,那么对于类0而言,类0是正类,类1、类2是负类

错误率与精度

  • 错误率(error)
    错误率即预测错误的样本个数占全体样本的比值
    E = n c o r r e c t n t o t a l = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 \begin{aligned} E= & \frac {n_{correct}} {n_{total}}\\ =& \frac 1m \sum_{i=1}^{m} (f(x_i)-y_i)^2 \end{aligned} E==ntotalncorrectm1i=1m(f(xi)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值