zoukankan      html  css  js  c++  java
  • 【1】模型评估与选择方法

    吃西瓜 [ 1 ] 模型评估与选择方法

    1.1 经验误差与过拟合

    • 错误率 error rate : 分类错误的样本数 a 占样本总数 m 的比例(E=frac{a}{m}),相应的 “(精度=1-E)

    学习器的预测输出与样本的真实输出之间的差异称为”误差“,在训练集上的误差称为”训练误差“,而在新样本上的误差称为”泛化误差(generalization error)”,我们实际希望的,是在新样本上能表现得很好的学习器,为了达到这个目的我们需要从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,而当学习能力过强时,很有可能把训练样本自身的一些特点当作所有潜在样本都会具有的一般性质,这样会使泛化性能下降,这种现象称为“过拟合(overfitting)”。

    过拟合是机器学习面临的关键障碍,各类算法必然带有一些针对过拟合现象的措施,然而必须意识到,过拟合无法彻底避免,我们只能减小其风险。

    模型选择问题的理想解决方案是对候选模型的泛化误差进行评估,选择泛化误差最小的那个模型,那么我们在现实中该如何进行模型评估和选择呢?

    1.2 评估方法

    通常我们可以通过实验测试,来对学习器的泛化误差进行评估,并进而做出选择,因此我们需要一个“测试集(testing set)“来测试学习器对新样本的判别能力,然后以测试集上的”测试误差{testing error)“作为泛化误差的近似。我们假设测试样本也是从样本真实分布中独立同分布采样而得。

    需要注意的是,测试集应尽可能与训练集互斥,即测试样本尽量不在测试集中出现、未在训练过程中使用过。

    对于一个包含 m 个样例的数据集(D={(x_1,y_1),(x_2,y_2),cdots,(x_m,y_m)}),通过对 D 进行适当的处理,从中产生训练集 S 和测试集 T 。下面是几种常见做法

    1.2.1 留出法 hold-out

    将数据集 D 划分为两个互斥的集合,即(D=Sigcup T,Sigcap T=empty),需要注意的是,测试、训练集的划分要尽可能保持数据分布的一致性,避免由于数据划分引入额外的偏差。(训练集一般 2/3 ~ 4/5)。

    1.2.2 交叉验证法 cross validation

    先将数据集 D 划分为 k 个大小相似的互斥子集,即 (D=D_1igcup D_2igcupdotsigcup D_k,D_iigcap D_j=empty(i eq j))每个子集(D_i)都尽可能保持数据分布的一致性,即从D 中通过分层采样得到,然后每次用 (k-1) 个子集的并集作为训练集,余下的那个子集作为测试集。

    这种方法可以获得 k 组训练/测试集,从而可进行 k 次训练和测试,最终返回的是这 k 个测试结果的均值,显然,交叉验证法评估结果的稳定性和包振兴在很大程度上取决于 k 的取值,故我们通常把这种方法叫做” k折交叉验证“

    k最常用的取值为 10,当 k = m 时,被称为 ” 留 1 法(leave-one-out ,LOO)“

    1.2.3 自助法 boostrapping

    使用留出发和交叉验证法会导致实际评估的模型所使用的训练集比 D 校,这必然会引入一些因训练样本规模不同而导致的估计偏差,而留一法计算成本又太高了,两种方法的优点共存便是自助法。

    给定包含 m 个样本的数据集 D ,我们对他进行采样产生数据集 D': 每次随机从 D 中挑选一个样本,将其拷贝到 D' ,然后再将该样本放回初始数据集 D 中,使得样本在下次采样时仍有可能杯采到; 此过程重复 m 次后,我们就得到了包含 m 个样本的数据集 D' 。

    [样本在m次采样中始终不被采到的概率的极限为:\ lim_{m arrinfty}(1-frac{1}{m})^m=frac{1}{e}approx0.368 ]

    即通过自助采样方法,初始数据集中约有 36.8%的样本从未出现在采样数据集 D' 中,于是将其用作训练集,DD' 用作测试集,这样实际评估的模型与期望评估的模型都使用 m 个训练样本。

    自助法在数据集较小,难以有效划分训练测试集时很有用,然而自助法产生的数据集改变了初始数据集的分布,会引入估计误差,因此,在数据量足够的时候,多用留出发和交叉验证法。

    1.3 性能度量 performance measure

    什么样的模型是好的,不仅仅取决于算法和数据,还决定与任务需求。

    • 在预测任务中,给定样例集(D={(x_1,y_1),(x_2,y_2),dots,(x_m,y_m)}),其中(y_i)是示例(x_i)的真实标记,要评估学习器 f 的性能,就要把学习器预测结果(f(x)与真实标记 y)进行比较;
    • 回归任务中,最常用的性能度量是"均方误差"(mean squared error)

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

    更一般的,对于数据分布 (D)和概率密度函数(p(.)),均方误差可描述为:

    [E(f;D)=int_{xsim D}(p(x)-y)^2p(x)dx ag{3.2} ]

    1.3.1 错误率与精度

    错误率和精度是分类任务重最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务,对样例集 D,分类错误率定义为:

    [E(f;D)=frac{1}{m}sum_{i=1}^{m}I(f(x_i) eq y_i) ag{3.3}\ 若 f(x_i) eq y_i,则指示函数 I(f(x_i) eq y_i)=1 ]

    精度定义为:

    [acc(f;D)=frac{1}{m}sum_{i=1}^{m}I(f(x_i)=y_i)=1-E(f;D) ag{3.4} ]

    1.3.2 查准率,查全率与 F1

    对于二分类问题,可将样例根据其真实类别、与学习器预测类别的组合划分为:真正例,假正例,真反例,假反例,分别对应着$$TP+FP+TN+FN=样例总数 N$$,分类问题的混淆矩阵如下:

    真实情况 预测结果
    正例 反例
    正例 TP(真正例) FN(假反例)
    反例 FP(假正例) TN(真反例)

    查准率P (precesion),与查全率 R (recall) 分别定义为:

    [查准率 P=frac{TP}{TP+FP} ,(针对结果而言)\ ag{3.5-3.6} 查全率 R=frac{TP}{TP+FN}=frac{1}{1+frac{FN}{TP}} ,(针对原样本而言) ]

    img
    >Precision值和Recall值是既矛盾又统一的两个指标,为了提高Precision值,分类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致Recall值降低。 > >当一个学习器的 P-R曲线被另一个学习器的曲线完全包住,则我们可以断言后者的学习性能更由于前者,若两个学习器的曲线发生交叉,则很难说。这时一般通过比较曲线下面积的大小,尽管这个值不太容易估算,人们还是设计了一些综合考察查准率和查全率的性能度量;
    • 平衡点 Break-Even Point,BEP 就是这样一个度量,他是” 查准率 = 查全率”时的取值,因为过于简化,我们更常使用的是F1 度量

    [F_1=frac{2 imes P imes R}{P+R}=frac{2 imes TP}{N+TP-TN} ]

    • 在商品推荐系统中,查准率对我们来说更加重要;而在于逃犯检索系统中,为了不放过漏网之鱼,查全率对于我们来说更加重要。F1度量的一般形式”,(F_eta=frac{(1+eta^2) imes P imes R}{(eta^2 imes P)+R},0<eta<1时对于查准率有更大影响)“ ;能让我们表达出对查准率和查全率的不同偏好。

    [frac{1}{F_eta}=frac{1}{1+eta^2}(frac{1}{P}+frac{eta^2}{R}),调和平均相对于算术平均几何平均更加重视较小值 ]

    • 很多时候我们有多个二分类混淆矩阵,若我们希望估计算法的“全局”性能,一种直接的做法是先在个混淆矩阵上分别计算出查准率和查全率,记为((P_i,R_i)),在计算平均值,这样就得到“宏查准率 macro-P,宏查全率 macro-R,以及相应的 宏F1 macro-F1”:

    [macro\_P=frac{1}{n}sum_{i=1}^{n}P_i\ macro\_R=frac{1}{n}sum_{i=1}^{n}R_i\ macro\_F_1=frac{2 imes macro\_P imes macro\_R}{macro\_P+ macro\_R} ]

    • 同样也可以先讲个混淆矩阵的对应元素进行平均,得到(overline{TP},overline{FP},overline{TN},overline{FN}),在基于这些平均值去计算微查准率等等...

    [micro\_P=frac{overline{TP}}{overline{TP}+overline{FP}}\ micro\_R=frac{overline{TP}}{overline{TP}+overline{FN}}\ micro\_F_1=frac{2 imes micro\_P imes micro\_R}{micro\_P+ micro\_R} ]

    1.3.3 ROC 与 AUC

    很多学习器是为测试样本产生一个实值或一个概率预测,然后将这个预测值与一个分类阈值(threshold)相比较,若大于阈值则分为正类,否则反类。我们可以根据这个实值我们可以将测试样本进行排序,分类过程就相当于在这个排序中以某个“截断点”将样本分为两部分,前一部分判做正例。

    排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化能力”好坏,ROC曲线(Receiver Operating Characteristic,受试者工作特征曲线)则是从这个角度出发来研究学习器泛化性能的有力工具。

    • 纵轴:真正例率(True Positive Rate,TPR)(TPR=frac{TP}{TP+FN})
    • 横轴:假正例率(False Positive Rate,FPR)(FPR=frac{FP}{TN+FP})
    img
    通过两个模型ROC曲线下的面积,可以较为合理的比较两者孰优孰劣,即AUC(Area Under ROC Curve) $$ 假定ROC曲线是由坐标为{(x_1,y_1),dots,(x_m,y_m)}的点按序连接而形成(x_1=0,x_m=1),则AUC可估算为\ egin{align} AUC&=frac{1}{2}sum_{i=1}^{m-1}(x_{i+1}-x_i).(y_i+y_{i+1})\ &=1-ell_{rank} end{align} $$ AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系,给定$m^+$个正例和$m^-$个反例,令$D^+$和$D^-$表示正、反例集合,则排序“损失”(loss)定义为: $$ ell_{rank}=frac{1}{m^+m^-}sum_{x^+in D^+}sum_{x^-in D^-}{I[f(x^+)1.3.4 代价敏感错误率与代价曲线

    1.4 比较检验

    1.4.1 假设检验

    1.4.2 交叉验证 t-检验

    1.4.3 McNemer 检验

    1.4.4 Friedman 检验 与 Nemenyi后续检验

    1.5 偏差与方差

    参考资料:

  • 相关阅读:
    netty的基本使用
    netty 实现简单的rpc调用
    NIO 的基本使用
    BIO实现 Socket 通信
    springboot使用ElasticSearch
    docker-compose安装rabbitmq集群(主从集群---》镜像集群)
    杂谈:面向微服务的体系结构评审中需要问的三个问题
    使用Spring Boot和RxJava的构建响应式REST API
    JVM体系结构详解
    如何成为更好的程序员?
  • 原文地址:https://www.cnblogs.com/rrrrraulista/p/12240414.html
Copyright © 2011-2022 走看看