• 模型评估方法


    1. 前言

    模型的评估方法主要是针对有监督学习的。

    2. 数据集划分方法

    我们在拿到数据的时候,数据的表现形式会呈现多种多样性,我们首先需要做的是把数据格式化,把数据处理成计算机可以认识的结构。处理数据的过程叫做特征工程,特征工程是一个在机器学习的过程中,非常重要的一个过程,特征工程做的好坏,会直接影响到最后的模型准确度的一个上限。特征工程我后面会详细介绍,今天介绍的是在特征工程处理完后的,数据集的划分和性能的度量方式。

    2.1 留出法

    留出法就是把数据集切分成训练集和测试集,留出法最重要的一点是要保证训练集和测试集的数据分布要相同,避免因为数据划分不均匀而引入的额外的偏差。从样本采样的角度来看待数据集的划分过程,则保留类别比例的采样方式叫做“分层采样”。为了让留出法能够有比较好的效果一般会重复多次进行平均。

    2.2 交叉验证

    交叉验证一般是在训练集的基础上进行的。因为测试集是最后用来评价模型的好坏的,不能让模型提前看到测试集。

    交叉验证有一个超参数K。K代表的意思是从训练集D中,分层采样的方式得到K个互斥的(D_i)(K折交叉验证)。然后通过K-1个子数据集的并集进行训练,用剩下的一个子数据集进行验证。就可以得到K个模型,最后返回K个模型的平均值。
    过程如下图所示:
    image

    交叉验证中有一个特殊的方法交“留一法”,它的意思是如果训练集中有m个数据,那我就进行“m折交叉验证”,每次用一个数据进行验证,这样最大的好处是避免了随机样本划分来带的影响。留一法的结果往往认为是准确的。但是留一法也是计算开销最大的一种方式,一般只会在学术论文中为了追求最好的效果才可能去尝试的办法。

    2.3 自助法

    我们希望评估的是用整个训练集D训练出来的模型,但是无论是留一法还是交叉验证法,都会切分一部分数据为测试数据,这必然会引入一定的误差。

    自助法直接以自助采样(bootstrap sample)为基础。自助采样是每次在数据集D中随机采样产生子数据集D1,然后放回,这个过程重复进行m次采样,获得m个子数据集D1,再对m个子数据集进行训练,获得一个平均的模型。

    自助法会有一部分数据一直没有被训练到。这部分数据称为“包外估计”简称OOB,这部分数据量约为36.8%。自助法现在一般运用在随机森林(Random Forest)里面比较多。

    3. 性能度量

    性能度量是用来衡量模型泛化能力的评价标准。

    性能度量可以用来在对同一个问题,评价不同模型的泛化能力的好坏,也可以针对同一个模型的泛化能力是否有所提升。

    假定在预测任务中,给定的样本集(D={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}),其中(y_i)(x_i)的标记,(f(x))是模型对x的预测值。

    3.1 回归任务

    回归任务中,常用的是均方误差

    [E(f,D)=frac{1}{m}sum_{i=1}^m(f(x_i)-y_i)^2 ]

    更一般的情况,对于数据分布D和概率密度P,均方误差可以改写为

    [E(f,D)=int_{xin{D}}(f(x)-y)^2*p(x)dx ]

    3.2 分类任务

    3.2.1 准确度

    在分类任务中,如果类别的个数是平衡,那么最普遍的一个度量性能的方法是准确度,准确度代表的意思是,预测类别和真实类别进行比较,统计分对的类别的比例。

    [Acc(f,D)=frac{1}{m}sum_{i=1}^mI(f(x_i)= y_i)=1-E(f,D) ]

    更一般的情况,对于数据分布D和概率密度P,准确度可以改写为

    [Acc(f,D)=int_{xin{D}}I(f(x)= y)*p(x)dx=1-E(f,D) ]

    3.2.2 精准率、召回率、F1

    在分类任务中,有一类比较常见的问题,就是数据不平衡的问题。比如癌症预测,针对癌症预测这个问题,本身癌症的发病数相对身体正常的数要低很多。

    假设我们的数据是10000个样本,里面有9990个正常值,10个是癌症患者(0代表正常,1代表癌症患者)。如果我们什么都不做的情况下,预测所有人都是0,那正确率是99.9%,感觉是不是准确度已经很高啦,模型已经很不错了?但是这个模型真的有用吗,其实真正的情况是,我们一个癌症患者都没预测出来。所以在这种情况下,用准确度来度量模型的好坏是不对的。我们需要用另外的一种性能度量方式,精准率,召回率和F1值。精准率又叫做查准率,召回率又叫做查全率。

  • 相关阅读:
    DDD:管理“工作单元实例”的两种模式
    DDD:DDD+CQRS+高伸缩性的分布式架构
    ExtJS4.2:快捷键支持(没有你想象的那么简单)
    DDD:用 “四色原型” 进行 “职责分配”
    .NET:处理数据库事务中的并发
    Javascript:必须知道的Javascript知识点之“单线程事件驱动”
    技术交流:20130413线下交流总结,不再做苦逼的程序员
    Javascript:必须知道的Javascript知识点之“原型链”
    DDD:主键映射,你一直在使用的企业应用模式
    设计原则:重复的方式以及如何消除重复
  • 原文地址:https://www.cnblogs.com/huangyc/p/9686119.html
Copyright © 2020-2023  润新知