zoukankan      html  css  js  c++  java
  • 一 代码解析

    整体框架

     训练流程

    1.初始化网络:class NetWork;

    2.实例化实际的boosting树:依据参数选择不同模型,如GBDT、DART、GOSS、RF;

    3.实例化实际的目标函数:依据参数选择不同类型,如RegressionL2loss、BinaryLogloss、MulticlassSoftmax、LambdarankNDCG等;

    4.加载训练数据;

    5.初始化实例化后boosting树;

    6.初始化实例化后的目标函数;

    7.训练模型并保存;

    预测流程

    细分模块

    通信模块:

    树结构

    目标函数

    数据加载

    训练数据加载时,单机和并行处理的方式有所不同。在单机下,DatasetLoader::LoadFromFile(..)函数实例化Dataset类,然后可以选择利用DatasetLoader::LoadFromBinFile(...)导入二进制数据或者文本文件数据来对该类进行初始化。利用文本文件进行Dataset初始化时,Parser::CreateParser()通过预读取两行训练数据来确定数据格式(libsvm、tsv、csv)并实例化实际的数据解析器(LibSVMParser、TSVParser、CSVParser),随后当文件不大时利用DatasetLoader::LoadTextDataToMemory直接加载入内存并用SampleTextDataFromMemory采样或者直接调用SampleTextDataFromFile采样样本数据,得到采样数据后使用ConstructBinMappersFromTextData()构造Bin Mapper,随后初始化样本标签元数据,利用ExtractFeaturesFromMemory()或ConstructBinMappersFromTextData()提取特征数据,完成训练数据的加载。

    -------

    1) class Metadata: 存储非特征性质的元数据,例如样本标签、样本权重、boosting时的初始分;

    2) class Parser: 样本数据解析接口基类,会调用Parser::CreateParser()依据数据格式自动实例化不同类型的解析器,例如class LibSVMParser、class TSVParser、class CSVParser,对应的在各派生类中会分别实现ParseOneLine()函数来按行解析不同格式的样本数据;

    3) class Dataset: 用于训练或验证的数据集主类,class DatasetLoader是其友元类,主要的特征样本存放在class FeatureGroup类型的容器内;

    4) class DatasetLoader: 包含一系列方法用于驱动样本数据从文件/内存加载到class Dataset类对象中,调用接口从DatasetLoader::LoadFromFile()开始,在该函数内部首先读取数据(1.小文件,运用DatasetLoader::LoadTextDataToMemory()间接调用TextReader::ReadAllLines()按行读取数据行到string类型容器内以全部导入内存,再用DatasetLoader::SampleTextDataFromMemory()采样;2.大文件,直接调用DatasetLoader::SampleTextDataFromFile()并间接使用TextReader::SampleTextDataFromFile()从

    文件采样得到部分样本保存到string容器内;)。得到按行存放在string类型的容器内的采样样本后,DatasetLoader::ConstructBinMappersFromTextDa()调用解析器对数据按行进行解析,并将特征数据按列临时存储到二维数组中,然后按单机/多机对各个特征列对应的class BinMapper对象进行实例化,并用BinMapper::FindBin()找到bin内各个小区间切分的连续特征的上边界或者离散特征的映射关系,即bin_mapper容器。得到不同特征列具体特征值向bin映射的映射关系后,使用Dataset::Construct()

    5) class FeatureGroup: 用于存储特征数据,class Dataset和class DatasetLoader是其友元类,数据存放在class Bin类型的对象内,而class BinMapper类型的容器实现对各子特征实际数值向bin值的映射;

    6) class BinMapper:用于将实际的特征样本值转化为bin结构,其主要接口BinMapper::FindBin()实现按特征列查找bin,它首先处理当前列中的无效数据(MissingType::Zero、MissingType::None、MissingType::NaN),然后存储该列特征不同的取值及其出现的次数。当该列特征对应于BinType::NumericalBin,则函数内部再通过BinMapper::FindBinWithZeroAsOneBin()并间接调用BinMapper::GreedyFindBin()实际计算bin内子区间的上边界存到std::vector<double> bin_upper_bound_

    上边界的具体计算需详细分析;当该列特征对应于BinType::CategoricalBin,离散特征的数值默认均为整型,则存放到std::unordered_map<int, unsigned int> categorical_2_bin_,此过程会移除数目较少的离散值,然后按照该列特征离散值(distinct)计数建立离散值与bin位置间的相互映射;

  • 相关阅读:
    RT-SA-2019-005 Cisco RV320 Command Injection Retrieval
    RT-SA-2019-003 Cisco RV320 Unauthenticated Configuration Export
    RT-SA-2019-004 Cisco RV320 Unauthenticated Diagnostic DataRetrieval
    RT-SA-2019-007 Code Execution via Insecure Shell Functiongetopt_simple
    APPLE-SA-2019-3-25-1 iOS 12.2
    APPLE-SA-2019-3-25-5 iTunes 12.9.4 for Windows
    APPLE-SA-2019-3-25-6 iCloud for Windows 7.11
    APPLE-SA-2019-3-25-4 Safari 12.1
    Mybatis下的sql注入
    java代码审计中的一些常见漏洞及其特征函数
  • 原文地址:https://www.cnblogs.com/bytedance/p/10346392.html
Copyright © 2011-2022 走看看