精华内容
下载资源
问答
  • 任务完成率公式
    千次阅读
    2020-04-01 14:00:50
    表格数据大概这样
    statusgroup
    1666
    0666
    1666
    0666
    1777
    0777

    需求大概就是占比完成度,从表格看

      分组666的总共4条,完成2个,未完成2个

      分组777的总共2条,完成1个,未完成1个

    SELECT 
    sum(case when status=0 then 1 else 0 end) undone,
    sum(case when status=100 then 1 else 0 end) done,
    count(group) gCount,group groupName 
    FROM `table`    GROUP BY group
    

    在项目里长这个样子

     

    更多相关内容
  • 系统地研究了数学公式识别的全过程,使用自适应字符分割方法和基线结构分析算法成功地实现了一般数学公式的识别,识别比较高,较好地完成公式识别任务。从实验结果中可以看出,这种基于基线结构分析的数学公式...
  • MultiNet共享一个编码器和三个独立的解码器,同时完成场景分类、目标检测和驾驶区域分割三个场景感知任务。它在这些任务上表现良好,并在 KITTI 可行驶区域分割任务上达到了最先进的水平。然而,分类任务在控制车辆...

    关注并星标

    从此不迷路

    计算机视觉研究院

    fb9f921c55b28e872beb2dcb70c6a207.gif

    715f56cc26c1a40962d4eae3201d7f6b.gif

    公众号ID|ComputerVisionGzq

    学习群|扫码在主页获取加入方式

    cff854fe263c99762518172bfbd928d4.png

    paper: https://arxiv.org/abs/2108.11250

    code: https://github.com/hustvl/YOLOP

    计算机视觉研究院专栏

    作者:Edison_G

    YOLOP: You Only Look Once for Panoptic Driving Perception。提出了一个全景驾驶感知网络(YOLOP)来同时执行交通目标检测可行驶区域分割车道检测

    一、前言

    全景驾驶感知系统是自动驾驶的重要组成部分,高精度、实时的感知系统可以辅助车辆在行驶中做出合理的决策。本文提出了一个全景驾驶感知网络(YOLOP)来同时执行交通目标检测、可行驶区域分割和车道检测。它由一个用于特征提取的编码器和三个用于处理特定任务的解码器组成。所提模型在具有挑战性的 BDD100K 数据集上表现非常出色,在准确性和速度方面在所有三个任务上都达到了SOTA。此外,本文通过消融研究验证了所提多任务学习模型对联合训练的有效性,应该第一个可以在嵌入式设备 Jetson TX2(23 FPS)上用一个网络实时同时处理三个视觉感知任务并保持出色精度的工作。

    论文作者 | 华科王兴刚老师团队

    二、YOLOP多任务学习

    全景驾驶感知系统中通常会涉及物体检测,以帮助车辆避开障碍物并遵守交通规则,还需要可行驶区域分割和车道检测,这对于规划车辆的行驶路线至关重要。已经有许多方法在分别处理这些任务,例如,Faster R-CNN 和 YOLOv4 处理对象检测,UNet 、DeepLab 和 PSPNet 来执行语义分割,SCNN 和 SAD-ENet 用于检测车道。

    但在自动驾驶汽车常用的嵌入式设备上部署全景驾驶感知系统时,需要考虑有限的计算资源和延迟,单独处理这些任务需要更长的耗时。另外,交通场景理解中的不同任务往往有很多相关的信息,如图 1 所示,车道往往是可行驶区域的边界,可行驶区域通常紧密围绕着交通目标。多任务网络更适合这种情况,因为(1)它可以通过一次处理多个任务而不是一个接一个地处理来加速图像分析过程,(2)它可以在多个任务之间共享信息,这可以提升每一个任务的性能,因为多任务网络的每个任务通常共享相同的特征提取主干。因此,探索自动驾驶中的多任务方法至关重要。

    6363366269ac678806d967c42e04dd29.png

    图1 多任务模型输出结果

    多任务学习的目标是通过多个任务之间的共享信息来学习更好的表示,尤其是基于CNN的多任务学习方法还可以实现网络结构的卷积共享。Mask R-CNN 扩展了 Faster R-CNN,增加了一个预测对象掩码的分支,有效地结合了实例分割和对象检测任务,这两个任务可以相互提升性能。

    MultiNet共享一个编码器和三个独立的解码器,同时完成场景分类、目标检测和驾驶区域分割三个场景感知任务。它在这些任务上表现良好,并在 KITTI 可行驶区域分割任务上达到了最先进的水平。然而,分类任务在控制车辆方面不如车道检测那么重要。

    DLT-Net继承了编码器-解码器结构,将交通目标检测、可行驶区域分割和车道检测结合在一起,并提出上下文张量来融合解码器之间的特征图,以在任务之间共享指定信息。虽然具有竞争力的性能,但它并没有达到实时性。 

    张等人提出了车道区域分割和车道边界检测之间相互关联的子结构,同时提出了一种新的损失函数来将车道线限制在车道区域的外轮廓上,以便它们在几何上重叠。然而,这个先验的假设也限制了它的应用,因为它只适用于车道线紧紧包裹车道区域的场景。

    更重要的是,多任务模型的训练范式也值得思考。康等人指出只有当所有这些任务确实相关时,联合训练才是合适和有益的,否则需要采用交替优化。所以 Faster R-CNN 采用实用的 4 步训练算法来学习共享特征,这种范式有时可能会有所帮助,但也乏善可陈。

    本文为全景驾驶感知系统构建了一个高效的多任务网络YOLOP,包括目标检测、可行驶区域分割和车道检测任务,并且可以在部署 TensorRT 的嵌入式设备 Jetson TX2 上实现实时。通过同时处理自动驾驶中的这三个关键任务,本文方法减少了全景驾驶感知系统的推理时间,将计算成本限制在一个合理的范围内,并提高了每个任务的性能。

    为了获得高精度和快速的速度,YOLOP设计了一个简单高效的网络架构。本文使用轻量级 CNN 作为编码器从图像中提取特征,然后将这些特征图馈送到三个解码器以完成各自的任务。检测解码器基于当前性能最佳的单级检测网络 YOLOv4,主要有两个原因:(1)单级检测网络比两级检测网络更快,(2) 单级检测器基于网格的预测机制与其他两个语义分割任务相关,而实例分割通常与基于区域的检测器相结合。编码器输出的特征图融合了不同级别和尺度的语义特征,分割分支可以利用这些特征图出色地完成像素级语义预测。

    除了端到端的训练策略外,本文还尝试了一些交替优化范式,逐步训练模型。一方面,将不相关的任务放在不同的训练步骤中,以防止相互限制,另一方面,先训练的任务可以指导其他任务,所以这种范式有时虽然繁琐但效果很好。然而,实验表明本文所提的模型并没有这个必要,因为端到端训练的模型可以表现得足够好。最终,所设计的全景驾驶感知系统在单个 NVIDIA TITAN XP 上达到了 41 FPS,在 Jetson TX2 上达到了 23 FPS;同时,它在 BDD100K 数据集的三个任务上取得SOTA。

    YOLOP主要贡献是:

    (1)提出了一个高效的多任务网络,可以一个网络模型同时处理自动驾驶中的三个关键任务:物体检测、可行驶区域分割和车道检测,减少推理时间的同时提高了每项任务的性能,显著节省计算成本。应该是第一个在嵌入式设备上一个模型同时跑三个任务实现实时性,同时在 BDD100K 数据集上保持SOTA的工作。

    (2)设计了消融实验验证了所提多任务处理方案的有效性,证明了三个任务可以联合学习,无需繁琐的交替优化。

    三、YOLOP方法细节

    本文提出了一个简单高效的前馈网络,可以同时完成交通目标检测、可行驶区域分割和车道检测任务。如图 2 所示,本文的全景驾驶感知单次网络 YOLOP,包含一个共享编码器和三个后续解码器来解决特定任务。不同解码器之间没有复杂和冗余的共享块,这减少了计算消耗并使网络能够轻松地进行端到端的训练。

    f532aedca781ad0c2465dae96a9edcd8.png

    图2 YOLOP网络结构

    A. 编码器

    网络共享一个编码器,它由骨干网络和颈部网络组成。

    1. Backbone

    骨干网络用于提取输入图像的特征。通常将一些经典的图像分类网络作为主干。鉴于YOLOv4在物体检测上的优异性能,本文选择CSPDarknet 作为主干,其解决了优化 Cspnet 时梯度重复的问题。它支持特征传播和特征重用,减少了参数量和计算量,有利于保证网络的实时性。

    2. Neck

    Neck 用于融合 backbone 产生的特征。YOLOP 的 Neck 主要由空间金字塔池(SPP)模块和特征金字塔网络(FPN)模块组成。SPP生成并融合不同尺度的特征,FPN融合不同语义层次的特征,使得生成的特征包含多尺度、多语义层次的信息,采用串联的方法来融合这些特征。

    B. 解码器

    网络中的三个头是三个任务的特定解码器。

    1. Detect Head

    与YOLOv4类似,采用基于anchor的多尺度检测方案。首先,使用一种称为路径聚合网络(PAN)的结构,其是一种自下而上的特征金字塔网络。FPN自顶向下传递语义特征,PAN自底向上传递定位特征,将它们结合起来以获得更好的特征融合效果,直接使用PAN中的多尺度融合特征图进行检测。多尺度特征图的每个网格将被分配三个不同长宽比的先验anchor,检测头将预测位置的偏移量、尺度化的高度和宽度,以及每个类别的对应概率和预测的置信度。

    2. Drivable Area Segment Head & Lane Line Segment Head

    可行驶区域分割头和车道线分割头采用相同的网络结构,将 FPN 的底层馈送到分割分支,大小为 (W/8, H/8, 256)。分割分支非常简单,经过三个上采样过程,将输出特征图恢复到(W, H, 2)的大小,两个通道分别代表了输入图像中每个像素对于可行驶区域/车道线和背景的概率。由于颈部网络中共享SPP,本文没有像其他人通常所做的那样添加额外的SPP模块到分割分支,因为这不会对所提网络的性能带来任何改善。此外,上采样层使用最邻近插值方法来降低计算成本而不是反卷积。因此,模型的分割解码器不仅获得了高精度的输出,而且在推理过程中也非常快。

    C. 损失函数

    由于网络中有三个解码器,因此多任务损失包含三个部分。对于检测损失  ,它是分类损失、目标损失和边界框损失的加权和,如公式(1)所示:

    ααα

    其中  和  采用的是 Focal Loss 损失,用于减少分类良好的样本的损失,从而迫使网络专注于困难的样本。  用于惩罚分类,  用于惩罚一个预测的置信度。  采用的是 CIoU,它考虑了预测框和 ground truth 之间的距离、重叠率、尺度和纵横比的相似性。

    可行驶区域分割的损失  和车道线分割损失  都是包含具有 Logits  的交叉熵损失,旨在最小化网络输出像素和目标之间的分类误差。值得提出的是 IoU loss:   添加到了  ,它对于车道线稀疏类别的预测特别有效。  和  分别定义为等式(2)和(3):

    最终损失函数是三个部分的加权和,如公式 (4) 所示: γγγ

    D. 训练范式

    本文尝试了不同的范式来训练模型。最简单的一种是端到端的训练,可以联合学习三个任务。当所有任务确实相关时,这种训练范式很有用。

    此外,还尝试了一些交替优化算法,逐步训练模型。在每一步中,模型都可以专注于一个或多个相关的任务,而不管那些不相关的任务。即使不是所有的任务都是相关的,所提模型仍然可以通过这种范式对每个任务进行充分的学习。算法 1 说明了一种逐步训练方法的过程。

    c8fb4b23bb314edba86fa4b3899a51a8.png

    算法1 一种逐步训练多任务模型的方法

    四、实验

    A. 设置

    1. 数据集设置

    BDD100K 数据集支持自动驾驶领域多任务学习的研究,拥有 10 万帧图片和 10 个任务的注释,是最大的驾驶视频数据集。由于数据集具有地理、环境和天气的多样性,在 BDD100K 数据集上训练的算法足够健壮,可以迁移到新环境,因此用 BDD100K 数据集来训练和评估网络是很好的选择。BDD100K 数据集分为三部分,70K 图像的训练集,10K 图像的验证集,20K 图像的测试集。由于测试集的标签不是公开的,所以在验证集上进行模型评估。

    2. 实现细节

    为了提高模型的性能,根据经验采用了一些实用的技术和数据增强方法。

    为了使检测器能够获得更多交通场景中物体的先验知识,使用 k-means 聚类算法从数据集的所有检测帧中获取先验锚点。使用 Adam 作为优化器来训练模型,初始学习率、β1 和 β2 分别设置为 0.001、0.937 和 0.999。在训练过程中使用预热(Warm-up)和余弦退火来调整学习率,旨在引导模型更快更好地收敛。

    使用数据增强来增加图像的变化,使模型在不同环境中具有鲁棒性。训练方案中考虑了光度失真和几何畸变,调整图像的色调(hue)、饱和度(saturation)和像素值进行光度失真,使用随机旋转、缩放、平移、剪切和左右翻转进行几何畸变。

    3. 实验设置

    实验中选择了一些优秀的多任务网络和专注于单个任务的网络与本文所提网络进行比较。 

    MultiNet 和 DLT-Net 都同时处理多个全景驾驶感知任务,并且在 BDD100K 数据集上的目标检测和可行驶区域分割任务中取得了很好的性能,Faster-RCNN 是两阶段目标检测网络的杰出代表,YOLOv5 是在 COCO 数据集上实现最先进性能的单级网络,PSPNet凭借其超强的聚合全局信息能力在语义分割任务上取得了出色的表现。通过在 BDD100k 数据集上重新训练上述网络,与本文在目标检测和可行驶区域分割任务上的网络进行比较。

    由于在 BDD100K 数据集上没有合适的现有多任务网络处理车道检测任务,本文将所提网络与 Enet、SCNN 和 Enet-SAD 这三个先进的车道检测网络进行了比较。

    另外,将联合训练范式的性能与多种交替训练范式进行了比较,将经过训练以处理多项任务的多任务模型的准确性和速度与经过训练以执行特定任务的模型进行比较。实验中将BDD100K 数据集中的图像从 1280×720×3 调整为 640×384×3,所有对照实验都遵循相同的实验设置和评估指标,均在 NVIDIA GTX TITAN XP 上运行。

    B. 结果

    通过简单的端到端训练YOLOP,将其与所有三个任务的其他代表性模型进行比较。

    1. 交通目标检测结果

    由于 Multinet 和 DLT-Net 只能检测车辆,我们只考虑BDD100K数据集上5个模型的车辆检测结果。如表 I 所示,使用 Recall 和 mAP50 作为检测精度的评估指标。YOLOP在检测精度上超过了 Faster RCNN、MultiNet 和 DLT-Net,并且可以与实际上使用更多技巧的 YOLOv5s 相媲美。速度上模型可以实时推断,YOLOv5s 更快是因为它没有车道线头和可行驶区域头。交通目标检测的可视化如图 3 所示。

    8b60f775743e7897e260d8897d91fc72.png

    1ca0127f15398cbae9d98770e0baf658.png

    2. 可行驶区域分割结果

    本文将 BDD100K 数据集中的“区域/可行驶”和“区域/替代”类都归为“可行驶区域”,模型只需要区分图像中的可行驶区域和背景。mIoU 用于评估不同模型的分割性能。从结果表II可以看出,YOLOP 分别优于 MultiNet、DLT-Net 和 PSPNet 19.9%、20.2% 和 1.9%,而且推理速度快 4 到 5 倍。可行驶区域分割的可视化结果如图 4 所示。

    35bee4065240e7fd0aed77545ec04d04.png

    d302a954faa0764b3c6422d79478a0b8.png

    3. 车道检测结果

    BDD100K 数据集中的车道线用两条线标注,所以直接使用标注非常棘手。实验遵循侯等人的设置以便进行比较,首先根据两条标线计算中心线,然后将训练集中的车道线宽度设置为8个像素,同时保持测试集的车道线宽度为2个像素,使用像素精度和车道的 IoU 作为评估指标。如表 III 所示,YOLOP的性能大幅超过了其他三个模型。车道检测的可视化结果如图5所示。

    51189f72c13c17027f76b3ff362d8669.png

    1269edfb8f29bbde8eb4c93a0676ed4e.png

    C. 消融研究

    本文设计了以下两个消融实验来进一步说明所提方案的有效性。

    1. End-to-end vs Step-by-step

    表 IV 比较了联合训练范式与多种交替训练范式的性能。可以看出YOLOP通过端到端的训练已经表现得非常好,已经不再需要进行交替优化。有趣的是,端到端范式训练检测任务首先似乎表现更好,这可能主要是因为整个模型更接近一个完整的检测模型,并且模型在执行检测任务时更难收敛(更难的任务用更适配的模型能达到更好的效果)。另外,由三步组成的范式略胜于两步,类似的交替训练可以运行更多的步骤,但改进已可以忽略不计。

    15ad3d24f045cea7847e2087b20ed078.png

    注:E, D, S 和 W 分别表示Encoder, Detect head, two Segment heads and whole network。比如 ED-S-W 表示先只训练 Encoder and Detect head,然后冻结 Encoder and Detect head训练two Segmentation heads,最后联合三个任务训练whole network。

    2. Multi-task vs Single task

    为了验证多任务学习方案的有效性,对多任务方案和单任务方案的性能进行了比较。表 V 显示了这两种方案在每个特定任务上的性能比较,可以看出采用多任务方案训练的模型性能接近于专注单个任务的性能,更重要的是,与单独执行每个任务相比,多任务模型可以节省大量时间。

    63d18fc1a80b80a1aff416fa1200911e.png

    五、总结

    本文提出了一个简单高效的多任务网络YOLOP,它可以同时处理物体检测、可行驶区域分割和车道线检测三个典型的驾驶感知任务,并且可以进行端到端的训练。训练出的模型在具有挑战性的 BDD100k 数据集上表现异常出色,在所有三个任务上都达到或大大超过了最先进的水平,并且可以在嵌入式设备Jetson TX2上进行实时推理,使得模型可以在真实场景中使用。

    © THE END 

    转载请联系本公众号获得授权

    c0a610a1f2eb1a6c90aea00c0f5359bb.gif

    计算机视觉研究院学习群等你加入!

    计算机视觉研究院主要涉及深度学习领域,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!

    e7b0a8159d875b45782b6974344770ff.png

    扫码关注

    计算机视觉研究院

    公众号ID|ComputerVisionGzq

    学习群|扫码在主页获取加入方式

    展开全文
  • 分类任务中的评价指标

    千次阅读 2020-09-05 10:42:19
    文章目录混淆矩阵准确 本文参考:https://blog.csdn.net/hfutdog/article/details/88085878 分类是机器学习中比较常见的任务,对于分类任务一般有二分类、多分类和多标签分类。 多分类:表示分类任务中有多个类别...

    本文参考:https://blog.csdn.net/hfutdog/article/details/88085878

    分类是机器学习中比较常见的任务,对于分类任务一般有二分类、多分类和多标签分类。

    多分类: 表示分类任务中有多个类别,但是对于每个样本有且仅有一个标签,例如一张动物图片,它只可能是猫,狗,虎等中的一种标签(二分类特指分类任务中只有两个类别)

    多标签: **一个样本可以有多个标签 ** 。例如文本分类中,一个文本可以是宗教相关,也可以是新闻相关,所以它就可以有两个标签。

    常见的评价指标有准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 score、ROC曲线(Receiver Operating Characteristic Curve)等,本文将对上述指标进行讲解。

    混淆矩阵

    混淆矩阵是数据科学和机器学习中经常使用的用来总结分类模型预测结果的表,用n行n列的矩阵来表示,将数据集中的记录按照真实的类别和预测的类别两个标准进行汇总。以二分类任务为例,混淆矩阵的结构如下:
    在这里插入图片描述
    在这里插入图片描述

    表中
    TP = True Postive = 真阳性; FP = False Positive = 假阳性
    FN = False Negative = 假阴性; TN = True Negative = 真阴性
    TP表示实际为正被预测为正的样本数量,
    FP表示实际为负但被预测为正的样本数量,
    FN表示实际为正但被预测为负的样本的数量,
    TN表示实际为负被预测为负的样本的数量。

    另外,TP+FP=P’表示所有被预测为正的样本数量,同理FN+TN为所有被预测为负的样本数量,TP+FN为实际为正的样本数量,FP+TN为实际为负的样本数量。

    1.分类模型之混淆矩阵:
    每一行和每一列分别对应样本输出中的每一个类别,行表示实际类别,列表示预测类别。
    在这里插入图片描述
    上述矩阵即为理想的混淆矩阵。不理想的混淆矩阵如下:
    在这里插入图片描述
    查准率 = 主对角线上的值 / 该值所在列的和
    召回率 = 主对角线上的值 / 该值所在行的和

    2.分类模型之分类报告:
    sklearn.metrics提供了分类报告相关API,不仅可以得到混淆矩阵,还可以得到交叉验证查准率、召回率、f1得分的结果,可以方便的分析出哪些样本是异常样本。

    import sklearn.metrics as sm
    
    # 获取混淆矩阵
    m = sm.confusion_matrix(test_y, pred_test_y)
    print('混淆矩阵为:', m, sep='\n')
    
    # 获取分类报告
    r = sm.classification_report(test_y, pred_test_y)
    print('分类报告为:', r, sep='\n')
    
    

    准确率

    准确率是分类正确的样本占总样本个数的比例,即
    在这里插入图片描述
    其中,n_correct为被正确分类的样本个数,n_total为总样本个数。
    结合上面的混淆矩阵,公式还可以这样写:
    在这里插入图片描述
    准确率是分类问题中最简单直观的评价指标,但存在明显的缺陷。
    比如如果样本中有99%的样本为正样本,那么分类器只需要一直预测为正,就可以得到99%的准确率,但其实际性能是非常低下的。也就是说,当不同类别样本的比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。
    下面我们看一下sklearn中计算准确率的示例:

    import numpy as np
    from sklearn.metrics import accuracy_score
    
    y_pred = [0, 2, 1, 3]
    y_true = [0, 1, 2, 3]
    print(accuracy_score(y_true, y_pred))  # 0.5
    print(accuracy_score(y_true, y_pred, normalize=False))  # 2
    
    # 在具有二元标签指示符的多标签分类案例中
    print(accuracy_score(np.array([[0, 1], [1, 1]]), np.ones((2, 2))))  # 0.5
    
    

    函数接口的描述是这样的:

    准确度分类得分

    在多标签分类中,此函数计算子集精度:为样本预测的标签集必须完全匹配y_true(实际标签)中相应的标签集。
    参数
    y_true : 一维数组,或标签指示符 / 稀疏矩阵,实际(正确的)标签.
    y_pred : 一维数组,或标签指示符 / 稀疏矩阵,分类器返回的预测标签.
    normalize : 布尔值, 可选的(默认为True). 如果为False,返回分类正确的样本数量,否则,返回正 确分类的得分.
    sample_weight : 形状为[样本数量]的数组,可选. 样本权重.

    返回值 score : 浮点型
    如果normalize为True,返回正确分类的得分(浮点型),否则返回分类正确的样本数量(整型).
    当normalize为True时,最好的表现是score为1,当normalize为False时,最好的表现是score未样本数量.

    代码的输出我已经写在注释中了,需要注意的是最后一行代码中,y_true为[0111],,y_pred为[1111],矩阵的行表示样本,列表示标签(样本具有两个标签,标签0和1共同确定样本类别),那么这时实际上只有一个样本是预测正确的,因此准确率为1/2 ,即0.5。
    另外,因为准确率的缺陷比较明显,所以在多分类问题中一般不直接使用整体的分类准确率,而是使用每个类别下的样本准确率的算术平均作为模型的评估指标。

    精确率

    精确率指模型预测为正的样本中实际也为正的样本占被预测为正的样本的比例。计算公式为:
    在这里插入图片描述
    sklearn中的函数接口precision_score的描述如下:

    计算精确率

    精确率是 tp / (tp + fp)的比例,其中tp是真正性的数量,fp是假正性的数量.
    精确率直观地可以说是分类器不将负样本标记为正样本的能力.
    精确率最好的值是1,最差的值是0.

    参数
    y_true : 一维数组,或标签指示符 / 稀疏矩阵,实际(正确的)标签.
    y_pred : 一维数组,或标签指示符 / 稀疏矩阵,分类器返回的预测标签.
    labels : 列表,可选值. 当average != binary时被包含的标签集合,如果average是None的话还包含它们的顺序.在数据中存在的标签可以被排除,比如计算一个忽略多数负类的多类平均值时,数据中没有出现的标签会导致宏平均值(marco average)含有0个组件. 对于多标签的目标,标签是列索引. 默认情况下,y_true和y_pred中的所有标签按照排序后的顺序使用.
    pos_label : 字符串或整型,默认为1. 如果average = binary并且数据是二进制时需要被报告的类. 如果数据是多类的或者多标签的,这将被忽略;设置labels=[pos_label]和average !=binary就只会报告设置的特定标签的分数.
    average : 字符串,可选值为[None, ‘binary’ (默认), ‘micro’, ‘macro’, ‘samples’, ‘weighted’]. 多类或 者多标签目标需要这个参数.如果为None,每个类别的分数将会返回. 否则,它决定了数据的平均值类型.
    ‘binary’: 仅报告由pos_label指定的类的结果. 这仅适用于目标(y_{true, pred})是二进制的情况.
    > ‘micro’: 通过计算总的真正性、假负性和假正性来全局计算指标.
    ‘macro’: 为每个标签计算指标,找到它们未加权的均值. 它不考虑标签数量不平衡的情况.
    ‘weighted’:为每个标签计算指标,并通过各类占比找到它们的加权均值(每个标签的正例数).它解决了’macro’的标签不平衡问题;它可以产生不在精确率和召回率之间的F-score.

    ‘samples’: 为每个实例计算指标,找到它们的均值(只在多标签分类的时候有意义,并且和函数accuracy_score不同).
    sample_weight : 形状为[样本数量]的数组,可选参数. 样本权重. 返回值 precision :浮点数(如果average不是None) 或浮点数数组, shape =[唯一标签的数量]
    二分类中正类的精确率或者在多分类任务中每个类的精确率的加权平均.

    from sklearn.metrics import precision_score
    
    y_true = [0, 1, 2, 0, 1, 2]
    y_pred = [0, 2, 1, 0, 0, 1]
    print(precision_score(y_true, y_pred, average='macro'))  # 0.2222222222222222
    print(precision_score(y_true, y_pred, average='micro'))  # 0.3333333333333333
    print(precision_score(y_true, y_pred, average='weighted'))  # 0.2222222222222222
    print(precision_score(y_true, y_pred, average=None))  # [0.66666667 0.         0.        ]
    
    

    直接看函数接口和示例代码还是让人有点云里雾里的,我们这里先介绍两个与多分类相关的概念,再说说上面的代码是如何计算的。

    • Macro Average 宏平均是指在计算均值时使每个类别具有相同的权重,最后结果是每个类别的指标的算术平均值。
    • Micro Average 微平均是指计算多分类指标时赋予所有类别的每个样本相同的权重,将所有样本合在一起计算各个指标。

    根据precision_score接口的解释,我们可以知道,当average参数为None时,得到的结果是每个类别的precision。上面的y_true有3个类别,分别为类0、类1、类2。我们将每个类别的TP、FP、FN列在下表中。
    在这里插入图片描述
    那么每个类别的precision也就得到了,如下所示:

    在这里插入图片描述
    虽然,我们是主要讲精确率的,但是宏平均和微平均的概念也很重要,这里顺便对比一下。

    • 如果每个类别的样本数量差不多,那么宏平均和微平均没有太大差异
    • 如果每个类别的样本数量差异很大,那么注重样本量多的类时使用微平均,注重样本量少的类时使用宏平均
    • 如果微平均大大低于宏平均,那么检查样本量多的类来确定指标表现差的原因
    • 如果宏平均大大低于微平均,那么检查样本量少的类来确定指标表现差的原因

    召回率

    召回率指实际为正的样本中被预测为正的样本所占实际为正的样本的比例。
    在这里插入图片描述

    sklearn中recall_score方法和precision_score方法的参数说明都是一样的,所以这里不再重复,只是把函数和返回值说明贴在下面:

    计算召回率

    召回率是比率tp / (tp + fn),其中tp是真正性的数量,fn是假负性的数量.
    召回率直观地说是分类器找到所有正样本的能力. 召回率最好的值是1,最差的值是0.
    返回值
    recall :浮点数(如果average不是None) 或者浮点数数组,shape = [唯一标签的数量]
    二分类中正类的召回率或者多分类任务中每个类别召回率的加权平均值.

    from sklearn.metrics import recall_score
    
    y_true = [0, 1, 2, 0, 1, 2]
    y_pred = [0, 2, 1, 0, 0, 1]
    print(recall_score(y_true, y_pred, average='macro'))  # 0.3333333333333333
    print(recall_score(y_true, y_pred, average='micro'))  # 0.3333333333333333
    print(recall_score(y_true, y_pred, average='weighted'))  # 0.3333333333333333
    print(recall_score(y_true, y_pred, average=None))  # [1. 0. 0.]
    
    

    P-R曲线

    评价一个模型的好坏,不能仅靠精确率或者召回率,最好构建多组精确率和召回率,绘制出模型的P-R曲线。
    下面说一下P-R曲线的绘制方法。P-R曲线的横轴是召回率,纵轴是精确率。P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。整条P-R曲线是通过将阈值从高到低移动而生成的。原点附近代表当阈值最大时模型的精确率和召回率。

    ROC曲线

    参考:https://blog.csdn.net/hfutdog/article/details/88079934

    F1 score

    F1 score是精确率和召回率的调和平均值,计算公式为:
    在这里插入图片描述

    Precision体现了模型对负样本的区分能力,Precision越高,模型对负样本的区分能力越强;Recall体现了模型对正样本的识别能力,Recall越高,模型对正样本的识别能力越强。F1 score是两者的综合,F1 score越高,说明模型越稳健。

    sklearn中f1_score方法和precision_score方法、recall_score方法的参数说明都是一样的,所以这里不再重复,只是把函数和返回值说明贴在下面:

    计算F1 score,它也被叫做F-score或F-measure.
    F1 score可以解释为精确率和召回率的加权平均值.
    F1 score的最好值为1,最差值为0. 精确率和召回率对F1 score的相对贡献是相等的. F1 score的计算公式为:
    F1 = 2 * (precision * recall) / (precision + recall)
    在多类别或者多标签的情况下,这是权重取决于average参数的对于每个类别的F1 score的加权平均值.
    返回值
    f1_score : 浮点数或者是浮点数数组,shape=[唯一标签的数量]
    二分类中的正类的F1 score或者是多分类任务中每个类别F1 score的加权平均.

    from sklearn.metrics import f1_score
    
    y_true = [0, 1, 2, 0, 1, 2]
    y_pred = [0, 2, 1, 0, 0, 1]
    print(f1_score(y_true, y_pred, average='macro'))  # 0.26666666666666666
    print(f1_score(y_true, y_pred, average='micro'))  # 0.3333333333333333
    print(f1_score(y_true, y_pred, average='weighted'))  # 0.26666666666666666
    print(f1_score(y_true, y_pred, average=None))  # [0.8 0.  0. ]
    
    

    PRF值-微平均(Micro Average)

    **"Micro"是通过先计算总体的TP, FP和FN的数量,然后计算PRF。**即先将多个混淆矩阵的TP,FP,TN,FN对应的位置求和,然后按照PRF值公式及逆行计算。公式如下:
    在这里插入图片描述
    下面通过一个简单的例子来理解,假设是三个类别的分类模型:

    y_true=[1,2,3]
    
    y_pred=[1,1,3]
    

    (1)如下,将第一个类别设置为True(1),非第一个类别设置为False(0),

    y_true=[1,0,0]
    y_pred=[1,1,0]
    

    由此我们统计得到第一个类别的混淆矩阵:

    在这里插入图片描述
    (2)如下,将第二个类别设置为True(1),非第二个类别设置为False(0),

    y_true=[0,1,0]
    y_pred=[0,0,0]
    

    由此我们统计得到第二个类别的混淆矩阵:

    在这里插入图片描述
    (3)如下,将第三个类别设置为True(1),非第三个类别设置为False(0),

    y_true=[0,0,1]
    y_pred=[0,0,1]
    

    由此我们统计得到第三个类别的混淆矩阵:
    在这里插入图片描述
    (4)根据微平均算法公式我们得到最终的混淆矩阵,如下:

    在这里插入图片描述
    在这里插入图片描述
    其实可以参考上面介绍精确率时提到的方法,将每一类的TP,FP,FN,TN分别计算出来,再按照类别进行求和,然后按照公式计算。如下:

    在这里插入图片描述

    PRF值-宏平均(Macro Average)

    “Macro”是分别计算每个类别的PRF,然后分别求平均得到PRF。 即对多个混淆矩阵求PRF,然后求PRF的算术平均。公式如下:
    在这里插入图片描述
    同样借助上面例子,假设是三个类别的分类模型:(若除法过程中,分子分母同时为0,则结果也为0)

    y_true=[1,2,3]
    
    y_pred=[1,1,3]
    

    (1)如下,将第一个类别设置为True(1),非第一个类别设置为False(0),

    y_true=[1,0,0]
    y_pred=[1,1,0]
    

    由此我们统计得到第一个类别的混淆矩阵:

    在这里插入图片描述
    在这里插入图片描述
    (2)如下,将第二个类别设置为True(1),非第二个类别设置为False(0),

    y_true=[0,1,0]
    y_pred=[0,0,0]
    

    由此我们统计得到第二个类别的混淆矩阵:

    在这里插入图片描述
    在这里插入图片描述
    (3)如下,将第三个类别设置为True(1),非第三个类别设置为False(0),

    y_true=[0,0,1]
    y_pred=[0,0,1]
    

    由此我们统计得到第三个类别的混淆矩阵:
    在这里插入图片描述
    (4)对P1, P2, P3取平均得到P, 对R1, R2, R3取平均得到R, 对F1_1, F1_2, F1_3求平均得到F1:
    在这里插入图片描述
    一般macro-f1和micro-f1都高的分类器性能好

    PRF值-权重(Weighted)

    weighted计算方法就是对于macro中的每一类的PRF给予不同的权重
    从计算的角度讲,先对每个类求值,再取平均得到Macro Average会比较容易.但是当数据集中存在严重类别不平衡的问题时,就不适宜单纯使用Macro Average.此时可以采取weighted average. 具体来说当我们计算Macro Average时候我们给每个类赋予相同的权重,但是当样本不平衡时,不适宜给每个类赋予同样的权重,我们可以根据每个类的样本量,给每个类赋予不同的权重,这就是weighted average的计算方法.

    参考资料

    sklearn计算准确率、精确率、召回率、F1 score
    sklearn ROC曲线使用
    多分类的评价指标PRF(Macro-F1/MicroF1/weighted)详解
    二分类和多分类问题的评价指标总结
    sklearn之分类模型混淆矩阵和分类报告

    展开全文
  • 机器学习之随机森林(手推公式版)

    千次阅读 2021-04-21 18:18:41
    本篇博文主要介绍了机器学习里面的随机森林算法,并给出了相关的计算过程,最后使用主流的机器学习库sklearn来实现随机森林。机器学习(手推公式版)系列持续更新中...

    前言

      随机森林 ( R a n d o m (Random (Random F o r e s t , R F ) Forest,RF) Forest,RF)是非常具有代表性的 B a g g i n g Bagging Bagging集成算法,在以决策树为基学习器(评估器)的基础之上,进一步在决策树的训练过程中引入随机特征选择(不然也不叫“随机”森林了,哈哈哈哈)。本篇博客就来简单介绍一下随机森林的相关知识及其在分类问题上的应用。

      基学习器,即若集成器中只包含同种类型的个体学习器,则该个体学习器称为基学习器,相应的学习算法称为基学习算法。
      弱学习器,常指泛化性能略优于随机猜测的学习器,即精度略高于50%的学习器。一般基学习器也称为弱学习器。
      个体学习器,通常是由一个现有的学习算法从训练数据中产生的。

    1. 集成学习

      集成学习 ( E n s e m b l e (Ensemble (Ensemble L e a r n i n g ) Learning) Learning)本身不是一个单独的机器学习算法,而是通过构建并结合多个学习器(评估器)来完成学习任务。集成算法会考虑多个评估器的建模结果,汇总之后得到一个综合的结果,以此来获取比单个模型更好的分类或回归表现。

    1.1 Boosting

       B o o s t i n g Boosting Boosting是一种可将弱学习器提升为强学习器的算法,所以也称为提升法,工作机制为:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器预测错的训练样本在后续训练中受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;不断重复上述过程,直至基学习器数目达到实现指定的值,最终将这指定数目的基学习器进行加权结合。
      所以, B o o s t i n g Boosting Boosting集成算法是一种串行式算法,即后面的基学习器依赖于前面的基学习器。

       B o o s t i n g Boosting Boosting算法中最著名的代表是 A d a B o o s t AdaBoost AdaBoost算法。

    1.2 Bagging

       B a g g i n g Bagging Bagging是一种并行式的集成算法,即多个基学习器之间没有依赖关系,是相互独立的。如何使基学习器之间相互独立呢?该算法是这样做的:先对训练集进行采样(自助采样法),需要多少个基学习器,就采样出多少个训练子集(采样集),然后基于每个采样出来的训练子集来训练一个基学习器,再将这些基学习器进行结合,在对预测输出进行结合时,分类任务通常要采用投票法,回归任务使用平均法。

       B a g g i n g Bagging Bagging算法中最著名的代表是 R F RF RF算法。

      自助采样法 ( B o o t s t r a p (Bootstrap (Bootstrap S a m p l i n g ) Sampling) Sampling):给定包含 m m m个样本的数据集 D D D,我们先从中随机选取一个样本放入到采样集 D ′ D^\prime D中,然后再把该样本放回到原始数据集 D D D中,使得下次采样时该样本仍有可能被选中,这样,经过 m m m次随机采样操作,我们得到了含 m m m个样本的采样集 D ′ D^\prime D。显然,原始数据集 D D D中会有一部分样本在 D ′ D^\prime D中多次出现,而另一部分样本不会出现。可以做一下简单的估计:每个样本被采样到的概率为 1 m \frac {1} {m} m1,那么不会被采样到的概率就是 1 − 1 m 1-\frac {1} {m} 1m1,那么样本在 m m m次采样中一次也没被采样到的概率为 ( 1 − 1 m ) m (1-\frac {1} {m})^m (1m1)m,取极限可得 lim ⁡ m → ∞ ( 1 − 1 m ) m = 1 e ≈ 0.368 \lim_{m \to \infty} (1-\frac {1} {m})^m=\frac {1} {e} \approx 0.368 mlim(1m1)m=e10.368在这里插入图片描述
      通过自主采样法,初始数据集 D D D中约有36.8%的样本未出现在数据集 D ′ D^\prime D中,于是我们可以将 D ′ D^\prime D用作训练集, D − D ′ D-D^\prime DD用做测试集,这样的测试称为包外估计(out-of-bag estimate,oob)

    2. 随机森林

      传统决策树在选择划分特征时是在当前结点的特征集合中选择一个最优特征(假设有 d d d个特征),而在随机森林中,对基决策树的每个结点,先从该结点的特征集中随机选择一个包含 k k k个特征的子集,然后再从这个子集中选择一个最优特征用于划分。
      在上面介绍随机森林的时候我们引入了一个参数 k k k来控制随机性的引入程度:若令 k = d k=d k=d,则及决策树的构建与传统决策树相同;若令 k = 1 k=1 k=1,则是随机选择一个特征进行划分;一般情况下,推荐值 k = log ⁡ 2 d k=\log_2d k=log2d
      下面来看看集成算法是如何保证集成的效果一定好于单个学习器的:
      假设集成包含 T T T个基学习器 { h 1 , h 2 , … , h T } \{h_1,h_2,\dots,h_T\} {h1,h2,,hT},其中 h i h_i hi在示例 x \bm x x上的输出为 h i ( x ) h_i(\bm x) hi(x)

    2.1 投票法

      对分类任务来说,最常使用的结合策略是投票法 ( v o t i n g ) (voting) (voting)。假设类别的集合为 { c 1 , c 2 , … , c N } \{c_1,c_2,\dots,c_N\} {c1,c2,,cN},为方便讨论,这里将 h i h_i hi在样本 x \bm x x上的预测输出表示为一个 N N N维向量 ( h i 1 ( x ) , h i 2 ( x ) , … , h i N ( x ) , ) T \big(h_i^1(\bm x), h_i^2(\bm x), \dots,h_i^N(\bm x), \big)^T (hi1(x),hi2(x),,hiN(x),)T,其中 h i j ( x ) h_i^j(\bm x) hij(x)表示 h i h_i hi在类别 c j c_j cj上的输出。
       ∙ \bullet 绝对多数投票法 ( m a j o r i t y (majority (majority v o t i n g ) voting) voting)
    H ( x ) = { c j , ∑ i = 1 T h i j ( x ) > 0.5 ∑ k = 1 N ∑ i = 1 T h i k ( x ) r e j e c t , 其 他 H(\bm x)=\begin{cases} c_j, & \sum_{i=1}^Th_i^j(\bm x)>0.5 \sum_{k=1}^N\sum_{i=1}^Th_i^k(\bm x)\\ \\ reject, & 其他 \end{cases} H(x)=cj,reject,i=1Thij(x)>0.5k=1Ni=1Thik(x)  即若某个标记得票过半数,则预测为该类别,否则拒绝预测。
       ∙ \bullet 相对多数投票法 ( p l u r a l i t y (plurality (plurality v o t i n g ) voting) voting)
      即预测为得票最多的类别,若同时有多个类别获得最高票,则从中随机选取一个。
       ∙ \bullet 加权投票法 ( w e i g h t e d (weighted (weighted v o t i n g ) voting) voting)
      与加权平均法类似

    2.2 平均法

      对数值型输出 h i ( x ) ∈ R h_i(\bm x)\in \mathbb {R} hi(x)R,最常见的结合策略是平均法 ( a v e r a g i n g ) (averaging) (averaging)
       ∙ \bullet 简单平均法 ( s i m p l e (simple (simple a v e r a g i n g ) averaging) averaging)
    H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(\bm x)=\frac {1} {T}\sum_{i=1}^Th_i(\bm x) H(x)=T1i=1Thi(x)   ∙ \bullet 加权平均法 ( w e i g h t e d (weighted (weighted a v e r a g i n g ) averaging) averaging)
    H ( x ) = 1 T ∑ i = 1 T w i h i ( x ) H(\bm x)=\frac {1} {T}\sum_{i=1}^Tw_ih_i(\bm x) H(x)=T1i=1Twihi(x)  其中 w i w_i wi是个体学习器 h i h_i hi的权重,通常要求 w i ≥ 0 , ∑ i = 1 T w i = 1 w_i\geq 0,\sum_{i=1}^Tw_i=1 wi0,i=1Twi=1

      很显然,简单平均法是加权平均法令 w i = 1 T w_i=\frac {1} {T} wi=T1的特例。加权平均法的权重一般是从训练数据中学习得到的,现实任务中的训练样本通常不充分或存在噪声,这将使得学习得到的权重不完全可靠。一般而言,在个体学习器性能相差较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法。

    3. 模型实现

      这里使用sklearn.ensemble里的RandomForestClassifier进行决策树建模来解决分类问题,数据集为sklearn自带的酒数据集winedata,数据集详情可参考决策树这篇博客,这里不再叙述。

    	from sklearn.ensemble import RandomForestClassifier
    	from sklearn.datasets import load_wine
    	from sklearn.model_selection import train_test_split, cross_val_score
    	import matplotlib.pyplot as plt
    	import pandas as pd
    	
    	winedata = load_wine()
    	
    	x_train, x_test, y_train, y_test = train_test_split(winedata.data, winedata.target, test_size=0.3, random_state=1024)
    	
    	# n_estimators 森林中树木的数量, 即评估器的数量 往往越大越好[1, 200]
    	# bootstrap 有放回随机抽样 默认为True, 一般保持默认
    	# oob_score True 使用袋外数据来测试模型, 即可以不用划分数据集了
    	# random_state 控制随机森林的生成模式
    	model = RandomForestClassifier(n_estimators=100, criterion='gini', random_state=1024)
    	model.fit(x_train, y_train)
    	
    	score = model.score(x_test, y_test)
    	# score: 0.9815
    	print('score:', score)
    

      我们构建了一个含有100棵决策树的随机森林,在没有调参的情况下,在winedata数据集上的进度就达到了0.98,明显高于单棵决策树的0.9074。下面来看一下参数n_estimators对随机森林的影响:

    	score_list = []
    	for i in range(200):
    	    model = RandomForestClassifier(n_estimators=i+1, criterion='gini', random_state=1024)
    	    score = cross_val_score(model, winedata.data, winedata.target, cv=10).mean()
    	    score_list.append(score)
    	plt.figure(figsize=(20, 5))
    	plt.plot(range(1, 201), score_list)
    	# plt.xticks(range(1, 201))
    	plt.show()
    

    在这里插入图片描述

      下面不用手动划分数据集了,我们根据上述的介绍,使用oob来训练模型:

    	# 使用oob
    	model = RandomForestClassifier(n_estimators=100, criterion='gini', random_state=1024, oob_score=True)
    	model.fit(winedata.data, winedata.target)
    	
    	# # 查看各个基评估器
    	# model.estimators_
    	# # 看看精度0.9831
    	# model.oob_score_
    

    在这里插入图片描述

      随机森林是基于决策树的,所以其参数选择有些多,有关RandomForestClassifier的详细参数说明可参考官方手册

    结束语

      持续充电中,博客内容也在不断更新补充中,如有错误,欢迎来私戳小编哦!共同进步,感谢Thanks♪(・ω・)ノ

    在这里插入图片描述

    展开全文
  • 2.10 流水线吞吐计算

    千次阅读 2021-06-07 19:51:46
    是指单位时间内流水线所完成任务数量或输出的结果数量。 上图为例。 指令条数 = 100,流水线执行时间 = 203 吞吐 = 100/203 最大吞吐 理想状态的情况。忽略流水线建立时间,建立之后每个流水线周期就能完成...
  • 引言: 著名哲学家沃斯基索德说过,人类就是在不断的自我摧毁与自我重塑中建立起来。...不知道从何开始,这个iii就心安理得地混进你学的各类学科的各类公式,当然,你也不是不懂它啥含义——如果iii在自然对数e的幂
  • Mathpix(全名Mathpix Snipping Tool)是一款跨平台(Windows、macOS、Linux)的公式提取软件,其底层使用机器学习算法进行识别,准确相当之高。目前,最新版的Mathpix需要注册登录才能使用,注册地址点击右侧链接...
  • 网络工程师考试常用计算公式汇总 一、单位的换算 1字节(B)=8bit 1KB=1024字节 1MB=1024KB 1GB=1024MB 1TB=1024GB 通信单位中 K=千 , M = 百万 计算机单位中 K=2^10 , M= 2^20 倍数刚好是1.024的幂 ^ 为次方; /...
  • 指令系统计算机的基本概念指令系列机AmdahlAmdahlAmdahl定律CPU性能公式系统结构的评价标准等效指令速度指令系统主流指令系统指令系统的设计与优化指令组成指令系统的优化指令字格式的优化缩短地址码地址码优化指令...
  • ③ 准确 : 使用模式分类的结果 , 与测试集真实数据 , 分类正确的比例是 准确 ; ④ 测试集要求 : 测试集 与 训练集 不相关 ; IV . 分类过程中使用的数据集 ( 训练集 | 测试集 | 新数据 ) 1 . 分类过程中使用的...
  • 计算linux服务器CPU利用

    万次阅读 2019-06-20 15:25:00
    文章目录一 通过top查看cpu各类占用信息二 通过/proc/stat文件查看cpu信息三 cpu占用计算公式四 代码实现 一 通过top查看cpu各类占用信息 如下图所示: us User time 用户时间 表示CPU 执行用户...
  • 这篇文章号称极大的缓解了多任务学习中存在的两大顽疾:负迁移(negative transfer)现象和跷跷板(seesaw phenomenon),由此带来了相比较其他MTL模型比较大的性能提升。从论文呈现的实验结果也确实是这样的,但从...
  • 线程池最优大小计算公式

    千次阅读 2020-03-16 22:37:53
    线程数量=cpu的数量*cpu期望利用*(1 + 任务等待时间/任务处理时间)。 比如一个8核CPU,希望这部分工作的CPU使用20%,任务等待时间允许200ms,每个任务执行10ms。 那么线程数量=8*0.2*(1+200/10)= 33 ...
  • ROI计算公式可以是总利润/(内容营销成本*各类广告营销成本),所以提升ROI...也必须有一种方法来计算内容营销的投资回报。通过一系列内容营销节点产生的数据进行研究分析后,对ROI计算公式中内容营销模块效果分析作...
  • 基于多维度空间分配算法实现APP任务定价 基于多维度空间分配算法实现APP任务定价 摘要 一、问题重述 1.1 问题引言 1.2 题目数据及信息说明 1.3 提出问题 二、问题分析 2.1 问题的总体分析及思维导图 2.2 问题...
  • 应用服务器配置测算及计算公式

    万次阅读 2019-01-15 10:06:27
    应用服务器配置测算及计算公式 1 术语和定义 1.1 信息系统 由计算机、通信设备、处理设备、控制设备及其相关的配套设施构成,按照一定的应用目的和规则,对信息进行采集、加工、存储、传输、检索等处理的人机系统。...
  • 计算机网络常用公式

    千次阅读 2019-05-30 11:04:26
    流水线吞吐=任务数/完成时间 流水线加速比=不采用流水线的执行时间/采用流水线的执行时间 流水线的总时间=(指令总数+2) 周期值 七、存储器计算 存储器带宽:每秒能访问的位数 单位ns=10-9秒 存储器带宽=1秒...
  • 任务学习通常通过隐藏层的 Hard 或 Soft 参数共享来完成。 共享 Hard 参数是神经网络 MTL 最常用的方法,可以追溯1993年Caruana所发表的论文。在实际应用中,通常通过在所有任务之间共享隐藏层,同时保留几个特定...
  • 提高带宽利用!为什么要Pacing?

    千次阅读 2018-10-17 22:44:11
    这注定单条TCP的带宽利用极低,因此HTTP协议一般会采用多条TCP流捆绑的方式来传输Web服务器的数据以增加带宽,然而多TCP连接意味着连接管理的开销会增大,同时数据同步的开销也会增加,这导致了人们倾向于使用单独...
  • 在多任务优化的情景下,如果任务之间存在潜在关系,那么高质量的解在这些任务之间的转移可以显著提高算法的性能。然而有的时候缺乏关于任务间协同作用的任何先验知识(黑盒优化),主要是负迁移导致算法的性能受损,...
  • 如何判断众多模型的好坏(损失函数的确定)3.2.1 收集和查看训练数据3.2.2 如何判断众多模型的好坏(Loss Function)3.2.3 公式推导3.3 模型优化,如何筛选最优的模型(梯度下降)3.3.1 如何筛选最优的模型w,bw,bw,b...
  • CNN卷积层相关计算公式

    万次阅读 2017-09-24 21:09:41
    我们也有目标检测的任务,这需要图片上所有目标的定位任务都已完成。 因此,你将获得多个边界框和多个类标签。 最终,我们将执行目标分割的任务:我们需要输出类标签的同时输出图片中每个目标的...
  • 然而在线手写数学公式识别框架还未被提出,论文TAP则是首个基于深度学习的端到端在线手写数学公式识别模型,且针对数学公式识别的任务特性提出了多种优化。 二、TAP原理简述 Fig.1. Overall architecture Fig 1是...
  • 超硬核!数据结构学霸笔记,考试面试吹牛就靠它

    万次阅读 多人点赞 2021-03-26 11:11:21
    算法五个特性: 有穷性:有穷的时间内完成,或者可以说是可接受的时间完成 确定性:对于相同的输入只能得到相同的输出 可行性:描述的操作都可以执行基本操作有限次来实现 输入:零个或多个输入。取自于某个特定...
  • 线程池 核心线程数设定公式

    千次阅读 2020-03-22 17:21:18
    0.8,CPU核数为4 则核心线程数为20 注:阻塞系数公式 Blocking Coefficient(阻塞系数) = 阻塞时间/(阻塞时间+使用CPU的时间) CPU密集型: CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,...
  • Mathpix Snip--图片中识别公式

    万次阅读 2019-05-06 10:49:29
    title: 数学公式神器Mathpix Snip—妈妈再也不用担心我不会写数学公式了! 数学公式神器Mathpix Snip 本文转载自机器之心—《最好用的文字与公式编辑器,这套数学笔记神器送给你》,原文链接点击这儿。 在平时写博客...
  • 带你彻彻底底搞懂朴素贝叶斯公式

    万次阅读 多人点赞 2018-03-10 17:29:50
    本文参考了该博客的实例,但该博客中的朴素贝叶斯公式计算错误,评论中的也不对,所以,重新写一篇。一. 朴素贝叶斯 朴素贝叶斯中的朴素一词的来源就是假设各...就相当于完成了我们的任务。 则,朴素贝特斯公式...
  • 增量式PID计算公式4个疑问与理解

    万次阅读 多人点赞 2018-11-02 20:30:34
     case 0://任务未开始  setOutput(Roll_Middle, Pitch_Middle, Thro_Middle, Yaw_Middle);  thisleft = current_disLeft;  //thisfront=current_disFront;  break;  case 1://第一步,起飞悬停  ...
  • 在机器学习、数据挖掘、推荐系统完成建模之后,需要对模型的效果做评价。 业内目前常常采用的评价指标有准确(Precision)、召回(Recall)、F值(F-Measure)等,下图是不同机器学习算法的评价指标。下文讲对其中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,768
精华内容 19,507
关键字:

任务完成率公式