准备与设置¶
Silas机器学习需要三个配置文件才能正确运行:
我们将使用下列形式的命令模板:
silas command [OPTIONS] [para1] [para2] ...
其中OPTIONS包括可选参数,para1、para2等为必选参数。
可以跳过本章节, generate all these files automatically。
元数据设置¶
元数据设置包括两个字段:
属性设置:列出每个属性的数据类型。
缺少的值占位符:列出缺少的值的字符串占位符。
这些设置保存为JSON格式。元数据设置的目的是生成 元数据.
以下是元数据设置文件的例子:
"attribute-settings":
[
{
"type": "nominal",
"name": "Month"
},
{
"type": "numerical",
"name": "DayofMonth"
}
],
"missing-value-place-holders":
[
"",
"NA",
"?"
]
属性类型¶
Silas支持两种属性类型:
数字:当属性的值是实数/连续的数字时使用。
名词:当一个属性的值是离散的时候使用。例如:东、西、南、北。
自动生成元数据设置¶
使用以下命令生成元数据设置文件:
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
建议用户检查元数据设置文件,手动选择特征的数据类型。
元数据¶
一个 metadata 文件给出特征和属性的详细信息。这些信息存储为JSON格式。
以下内容可以忽略,并跳转到 自动生成元数据 章节。
属性的元数据¶
metadata 文件包括一个属性的列表以及它们的详细信息。
一个属性定义了 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位浮点。
建议尽可能使用能表示所有值的最小数据类型。
特征¶
每个特征定义为它的名字和 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,具有相同的属性。因此,这种信息的组织方式减少了冗余。
自动生成元数据¶
Silas自带的工具可以从数据集自动生成元数据。命令如下:
silas gen-metadata [OPTIONS] [metadata_settings] [data_files...]
此处,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中的特征统计数据。
绘制特征统计图表¶
可以使用以下命令生成简单的数据集可视化:
silas draw [OPTIONS] data_stats_file
其中data_stats_file是由silas gen-metadata生成的特征统计文件,而OPTIONS包括一个-h标志,用于显示帮助信息。
机器学习设置¶
设置参数¶
机器学习设置文件定义了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时,树最多有 \(2^{n+1} - 1\) 个节点,其中有 \(2^n\) 个叶节点。这个参数被用作停止条件,以控制树的生长。如果max_depth是32,当分支的深度达到32时,就会停止这个分支。
desired-leaf-size: 每个叶节点需要的数据数 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: 训练集的文件路径。
自动生成机器学习设置¶
要自动生成一个设置文件,请使用以下命令:
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
自动生成所有配置文件¶
要自动生成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
数据清洗¶
如果数据集包含缺失的数据或格式不正确的话,可以用以下命令对数据集进行 sanitise
silas sanitise [OPTIONS] [metadata_settings] [feature_stats_file] [metadata] [data_files...]
其中metadata_settings是 元数据设置 的文件路径;feature_stats_file是特征统计的文件路径,它与元数据一起生成;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