.. Silas documentation master file, created by sphinx-quickstart on Mon Nov 19 12:49:44 2018. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. 准备与设置 ========================= .. toctree:: :maxdepth: 2 :caption: Contents: Silas机器学习需要三个配置文件才能正确运行: * :ref:`sec-metadata-settings`: 定义每个 :ref:`attribute ` 的数据类型和丢失值的字符串。 * :ref:`sec-metadata`: 给出每个 :ref:`feature ` 的详细信息。 * :ref:`sec-ml-settings`: 定义机器学习的参数。 我们将使用下列形式的命令模板:: silas command [OPTIONS] [para1] [para2] ... 其中OPTIONS包括可选参数,para1、para2等为必选参数。 可以跳过本章节, :ref:`generate all these files automatically `。 .. _sec-metadata-settings: 元数据设置 ----------------- 元数据设置包括两个字段: * 属性设置:列出每个属性的数据类型。 * 缺少的值占位符:列出缺少的值的字符串占位符。 这些设置保存为JSON格式。元数据设置的目的是生成 :ref:`sec-metadata`. 以下是元数据设置文件的例子:: "attribute-settings": [ { "type": "nominal", "name": "Month" }, { "type": "numerical", "name": "DayofMonth" } ], "missing-value-place-holders": [ "", "NA", "?" ] .. _sec-attribute-type: 属性类型 ^^^^^^^^^^^^^^ Silas支持两种属性类型: * 数字:当属性的值是实数/连续的数字时使用。 * 名词:当一个属性的值是离散的时候使用。例如:东、西、南、北。 .. _sec-gen-metadata-settings: 自动生成元数据设置 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 使用以下命令生成元数据设置文件:: silas gen-metadata-settings [OPTIONS] [data_files...] 其中data_files是数据集的文件路径列表,OPTIONS包括: * -h: 输出帮助信息和退出 * -o file_path: 输出给定文件中的元数据设置。如果没有提供这个选项,元数据设置将被存储在当前目录下的metadata-settings.json中。 * -\\-nh: 一个标志,表示数据集文件没有标题。在这种情况下,Silas将生成包含相同数据且有标题的新数据集文件。新的数据集文件将被保存在与原始数据集文件相同的目录中,文件名将以"-w-headers "结尾。 如果有多个数据集文件,可以使用下面的任何一个命令。例如,要从data/dataset1.csv生成一个元数据设置文件,并在data/metadata-settings.json中输出设置,运行以下命令:: silas gen-metadata-settings -o data/metadata-settings.json data/dataset1.csv 建议用户检查元数据设置文件,手动选择特征的数据类型。 .. _sec-metadata: 元数据 --------- 一个 :ref:`metadata ` 文件给出特征和属性的详细信息。这些信息存储为JSON格式。 以下内容可以忽略,并跳转到 :ref:`sec-gen-metadata` 章节。 .. _sec-attribute: 属性的元数据 ^^^^^^^^^^^^^^^^^^^^^^^ :ref:`metadata ` 文件包括一个属性的列表以及它们的详细信息。 一个属性定义了 :ref:`type ` ,它的名字,它在C++中的数据类型和值(的范围)。 如果属性的类型是数字,那么该属性的定义包括属性的名称、C++数据类型、最小值和最大值。例如,对属性 "比率 "的定义如下,其中 "f32"表示32位浮点数:: "type": "numerical", "name": "ratio", "data-type": "f32", "bounds": { "min": 0.0, "max": 1.0 } 如果一个属性的类型是名词,那么它的定义包括属性的名称、C++数据类型、它的值是否可以被排序以及值的列表。例如,我们对属性 "size"的定义如下:: "type": "nominal", "name": "size", "data-type": "u8", "ordered": true, "values": [ "Short", "Tall", "Grande" ] 支持的C++数据类型包括: * bool: 布尔型。 * u8:8位无符号整数。 * u16: 16位无符号整数。 * u32: 32位无符号整数。 * u64:64位无符号整数。 * i8:8位有符号整数。 * i16:16位有符号整数。 * i32:32位有符号整数。 * i64:64位有符号整数。 * f32:32位浮点。 * f64:64位浮点。 建议尽可能使用能表示所有值的最小数据类型。 .. _sec-feature: 特征 ^^^^^^^ 每个特征定义为它的名字和 :ref:`attribute ` 。例如,飞行数据集的某些特征定义为:: { "feature-name": "Dest", "attribute-name": "Location" }, { "feature-name": "Origin", "attribute-name": "Location" }, { "feature-name": "Distance", "attribute-name": "Distance" }, { "feature-name": "Month", "attribute-name": "Month" }, 在这里区分特征和属性的原因是,有些特征,例如Dest和Origin,具有相同的属性。因此,这种信息的组织方式减少了冗余。 .. _sec-gen-metadata: 自动生成元数据 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Silas自带的工具可以从数据集自动生成元数据。命令如下:: silas gen-metadata [OPTIONS] [metadata_settings] [data_files...] 此处,metadata_settings是 :ref:`sec-metadata-settings` 的文件路径,data_files是数据集的文件路径列表,OPTIONS包括: * -h: 打印帮助信息并退出。 * -o file_path: 输出指定文件中的元数据。如果没有提供这个选项,元数据将被存储在当前目录下的metadata.json中。 例如,使用data/metadata-settings1.json中的元数据设置和数据集文件data/dataset1.csv和data/dataset2.csv来输出metadata1.json中的元数据,可用以下命令:: silas gen-metadata -o metadata1.json data/metadata-settings1.json data/dataset1.csv data/dataset2.csv 注意,gen-metadata命令也会在输出文件所在的目录中输出feature-stats.json中的特征统计数据。 .. _sec-draw-stats: 绘制特征统计图表 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 可以使用以下命令生成简单的数据集可视化:: silas draw [OPTIONS] data_stats_file 其中data_stats_file是由silas gen-metadata生成的特征统计文件,而OPTIONS包括一个-h标志,用于显示帮助信息。 .. _sec-ml-settings: 机器学习设置 ------------------------- .. _sec-ml-settings-parameters: 设置参数 ^^^^^^^^^^^^^^^^^^^^^^ 机器学习设置文件定义了Silas机器学习的参数。这些设置以JSON格式存储。这些参数包括。 * output-feature: 要预测或分类的特征。在有些文献中称为类或目标。 * metadata-file: 元数据文件的路径。 * ignored-features: 在训练中不使用的特征的列表。 * learner-settings: 机器学习过程的设置。 * mode: classification(分类)或regression(回归),二选一。 * reduction-strategy: 多分类的策略。允许的值是: * none: 使用决策树对多个类别进行原生分类。这个过程只建立1个森林。 * one-vs-rest: 每类建立1个森林。通过加权投票获得预测结果。 * one-vs-one: 为每对类建立一个森林。通过加权投票获得预测结果。 * grower-settings: 训练决策树和森林的设置: * forest-settings: 训练森林的设置: * type: 森林的类型,可选的值包括: * ClassicForest: (也称为UB) 一种类似于随机森林的集合算法,有平衡子抽样。这种方法通常速度快,对不平衡的数据集效果好。只允许在模式为分类时使用。 * PrototypeSampleForest: (也称为PS) 使用受原型选择和最小近邻启发的采样方法,以获得平衡的子样本来构建每棵树。这种方法比ClassicForest慢,但有时表现得更好。对于不平衡的数据集也很有效。只允许在模式为分类时使用。 * SimpleForest: (也称为NB) 在建立每棵树时,只根据抽样比例对训练集进行抽样。这种方法对大致平衡的数据集很有效。只允许在模式为分类时使用。 * SimpleValueForest: (也称为HV) 与SimpleForest相同,只是每个叶子节点存储一个投票结果,而不是一个分布。这大大节省了内存,而且通常在叶子大小为1时效果最好。对于有成千上万个类的数据集,使用这种方法。只允许在模式为分类时使用。 * SimpleRegForest: 使用装袋并进行回归。只有在模式为回归时才允许使用。 * SimpleOOBRegForest: 对每棵树的训练集进行子抽样,并使用OOB样本来计算每棵树的权重。只有在模式为回归时才允许使用。 * AdaBoostForest: (也称为AB) AdaBoosting的一个并行版本,同时训练一批树。 * CascadeForest: (也称为WC) 与平衡级联算法类似,但在训练每一批树后,不删除正确分类的数据点,而增加不正确分类的数据点的权重。 * number-of-trees: 集合模型中决策树的数量。 * sampling-proportion: 用于构建每棵树的子样本中的数据实例的比例(与整个训练集相比)。 * oob-proportion: OOB(袋外)样本中数据实例的比例。如果oob_proportion是0.1,那么10%的抽样数据被用作OOB实例,在构建决策树时不被使用。OOB分割发生在数据集的采样之后。例如:对于一个100万个实例的数据集,如果森林类型是 "ClassicForest",sampling_proportion = 0.7,oob_proportion = 0.1,那么只有630K的实例被用于训练决策树,70K的实例在OOB集中,用于评估决策树。注意:这个参数在0.86版本的分类任务中是禁用的。 * tree-settings: 训练决策树的设置: * type: 树的类型,允许的值包括: * GreedyNarrow1D: (也称为GT) 以贪心算法生成每棵树。为每个特征选择最佳切割点,然后从特征中选择最佳谓词。在选择最佳切割点时,对数据点使用定制的采样策略。只允许在模式为分类时使用。 * RdGreedy1D: (也称为RT) 为每个特征随机选择一个切点,然后从考虑的特征中选择最佳谓词。它比其他决策树生成器更快。当与SimpleForest和采样比例1.0结合使用时,它相当于极限随机树(极限树)。只允许在模式为分类时使用。 * SimpleTreeGrower: 与GreedyNarrow1D类似,但在为每个特征选择最佳切点时不对数据点进行采样。只允许在模式为分类时使用。 * RdGreedyReg1D: 与RdGreedy1D类似,但用于回归。只允许在模式为回归时使用。 * max-depth: 决策树的最大深度。最大深度是n时,树最多有 :math:`2^{n+1} - 1` 个节点,其中有 :math:`2^n` 个叶节点。这个参数被用作停止条件,以控制树的生长。如果max_depth是32,当分支的深度达到32时,就会停止这个分支。 * desired-leaf-size: 每个叶节点需要的数据数 :ref:`instances ` 。这个参数被用作停止条件,以控制树的生长。如果desired_leaf_size是32,当叶子节点包含的数据实例少于32时,就会停止这个分支。 * feature-proportion: 构建决策树时使用的特征数量的比例。允许的值是: * "sqrt": 特征总数的平方根(默认)。 * "log": 特征总数的自然对数。 * "log2": 总特征数的对数,基数为2。 * "golden": 0.618倍的特征总数。 * 0.0和1.0之间的任何浮点数(不带双引号)。 * training-dataset: 训练集的详细信息: * type: 文件的类型。允许值是: * CSV: 逗号分隔值。 * path: 训练集的文件路径。 * validation-settings: 用于验证和测试的设置。 * type: 允许的值是: * CV: 交叉验证。 * TT: 训练和测试。 如果类型是CV,有以下两种设置: * number-of-runs: 实验的运行次数。 * number-of-partitions: 交叉验证中的分块数量。 如果类型是TT,可进行以下设置: * testing-dataset: 测试集的信息。 * type: 文件的类型。允许值是: * CSV: 逗号分隔值。 * path: 训练集的文件路径。 .. _sec-gen-ml-settings: 自动生成机器学习设置 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 要自动生成一个设置文件,请使用以下命令:: silas gen-settings [OPTIONS] [metadata_file] [data_files...] 其中metadata_file指定元数据文件路径,data_files是一个数据集文件路径的列表,OPTIONS包括: * -h: 打印帮助信息并退出。 * -v validation_mode: 指定验证模式。如果没有提供这个选项,验证模式将从数据集文件的数量中推断出来:如果只提供一个数据集文件,则采用交叉验证;如果提供多个数据集文件,则采用训练和测试,在这种情况下,第一个文件将用于训练,第二个文件将用于测试。有两个选项: * "cv": 交叉验证。用户必须至少指定一个数据集文件。如果提供多个文件,第一个文件将被用于训练和验证。 * "tt": 训练和测试。用户必须至少指定两个数据集文件。如果提供多个文件,第一个数据集文件将被用于训练,第二个将被用于测试。 * -o file_path: 输出给定文件中的设置。如果没有提供这个选项,设置将被保存在发出命令的目录下的settings.json中。 例如,要从元数据文件data/metadata1.json和数据集文件data/dataset1.csv生成一个名为settings1.json的设置文件,使用以下命令:: silas gen-settings -o settings1.json data/metadata.json data/dataset1.csv .. _sec-gen-all: 自动生成所有配置文件 ------------------------------------------------ 要自动生成Silas机器学习中所需要的所有文件,请使用以下命令:: silas gen-all [OPTIONS] [data_files...] 其中data_files是一个数据集的文件路径列表,OPTIONS包括: * -h: 打印帮助信息并退出。 * -v validation_mode: 指定验证模式。如果没有提供这个选项,验证模式将从数据集文件的数量中推断出来:如果只提供一个数据集文件,则采用交叉验证;如果提供多个数据集文件,则采用训练和测试,在这种情况下,第一个文件将用于训练,第二个文件将用于测试。有两个选项: * "cv": 交叉验证。用户必须至少指定一个数据集文件。如果提供多个文件,第一个数据集文件将被用于训练和验证。其余的数据集文件将只用于计算数据集的统计数据。 * "tt": 训练和测试。用户必须至少指定两个数据集文件。如果提供多个文件,第一个数据集文件将被用于训练,第二个将被用于测试。其余的数据集文件将只用于计算数据集的统计数据。 * -o directory: 输出指定目录下的配置文件。如果不提供这个选项,配置文件将被保存在发出命令的目录中。 * -\\-nh: 一个标志,表示数据集文件没有标题。在这种情况下,Silas将生成新的数据集文件,其中包含相同的数据并有标题。新的数据集文件将被保存在与原始数据集文件相同的目录中,文件名将以"-w-headers"结尾。 例如,要从data/train.csv和data/test.csv中生成用于训练和测试的所有配置文件,并将配置文件存储在config/中,运行以下命令:: silas gen-all -v tt -o config data/train.csv data/test.csv .. _sec-sanitise: 数据清洗 ----------------- 如果数据集包含缺失的数据或格式不正确的话,可以用以下命令对数据集进行 :ref:`sanitise ` :: silas sanitise [OPTIONS] [metadata_settings] [feature_stats_file] [metadata] [data_files...] 其中metadata_settings是 :ref:`sec-metadata-settings` 的文件路径;feature_stats_file是特征统计的文件路径,它与元数据一起生成;metadata是 :ref:`sec-metadata` 的文件路径;data_files是数据集的文件路径列表;OPTIONS包括: * -c 有以下选项: * new: 用新的类别替换缺失的分类值。 * most-common: 用最常见的类别替换缺失的分类值。 * least-common: 用最不常见的类别替换缺失的分类值。 * remove: 删除缺失的分类值。 * -n 有以下选项: * mean: 用平均值代替缺失的数值。 * median: 用中值代替缺失的数值。 * new-above-max: 用 max + 1 替换缺失的数值。 * new-under-min: 用 min - 1 替换缺失的数值。 * remove: 删除缺失的数值。 默认情况下,分类值的策略是创建一个新的类别 ("-c new") ,数字值的策略是使用平均值 ("-n mean") 。 例如,使用example/metadata-settings.json、example/feature-stats.json和example/metadata.json对example/data.csv进行数据清洗,使用的策略是用最常见的类别替换分类值,用中位数替换数字值,运行以下命令:: silas sanitise -c most-common -n median example/metadata-settings.json example/feature-stats.json example/metadata.json example/data.csv .. Indices and tables .. ================== .. * :ref:`genindex` .. * :ref:`modindex` .. * :ref:`search`