P-NET 的训练器
PNETTrainer
00 Remarks
训练流程严格遵循论文 Methods 部分的描述:
- 按照 80% 训练 / 10% 验证 / 10% 测试做分层划分, 保证每一个子集之中的类别比例与原始数据集一致;
- 按照训练集的类别比例计算二元交叉熵的类别权重;
- 使用 Adam 优化器做 mini-batch 训练,初始学习率 0.001,每 50 个 epoch 阶梯衰减;
- 损失为各个深度监督预测头的加权二元交叉熵之和。
01 Syntax
SMRUCC.genomics.Analysis.HTS.P_NET.PNETTrainer
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| .ctor | 1 | 创建训练器 |
| FitClassWeights | 1 | 按照训练集的类别比例计算二元交叉熵的类别权重 |
| StratifiedSplit | 1 | 按照给定的比例做分层划分 |
| Train | 1 | 在训练集上训练模型 |
| Evaluate | 1 | 在测试集上评估模型 |
03 Properties
| Name | Overloads | Summary |
|---|---|---|
| Model | 1 | 被训练的模型 |
| Config | 1 | 训练超参数配置 |
| Optimizer | 1 | 训练所使用的优化器 |
| PositiveWeight | 1 | 正样本类别权重,由 PNETTrainer.FitClassWeights()) 计算得到 |
| NegativeWeight | 1 | 负样本类别权重,由 PNETTrainer.FitClassWeights()) 计算得到 |
04 Members
#ctor(PNETModel, TrainConfig)
创建训练器
Parameters
| Name | Type | Description |
|---|---|---|
model | PNETModel | 待训练的 P-NET 模型 |
config | TrainConfig | 训练超参数配置,取 Nothing 时使用默认配置 |
FitClassWeights(PNETSampleSet)
按照训练集的类别比例计算二元交叉熵的类别权重
Remarks
权重取值为 N / (2 · N_class),与 sklearn 的 class_weight='balanced' 一致。 若 TrainConfig.UseClassWeights 为 False,则两个权重均取 1。
Parameters
| Name | Type | Description |
|---|---|---|
data | PNETSampleSet | 训练集 |
按照给定的比例做分层划分
Remarks
分层(stratified)的含义是:在正样本与负样本内部各自独立地做随机划分, 从而保证每一个子集之中的类别比例与原始数据集完全一致。
Parameters
| Name | Type | Description |
|---|---|---|
data | PNETSampleSet | 完整数据集 |
trainRatio | Double | 训练集比例,默认 0.8 |
validationRatio | Double | 验证集比例,默认 0.1(其余样本归入测试集) |
Returns
划分之后的训练集、验证集与测试集
Train(PNETSampleSet, PNETSampleSet)
在训练集上训练模型
Parameters
| Name | Type | Description |
|---|---|---|
trainingSet | PNETSampleSet | 训练集 |
validation | PNETSampleSet | 验证集,给出之后会逐轮记录验证集 AUC 并可选地启用早停 |
Returns
训练过程的历史记录
Evaluate(PNETSampleSet,
Double)在测试集上评估模型
Parameters
| Name | Type | Description |
|---|---|---|
test | PNETSampleSet | 测试集 |
threshold | Double | 判定为正例的阈值,默认 0.5 |
Returns
评估指标结果
Model
被训练的模型
Returns
P-NET 模型对象
Config
训练超参数配置
Returns
训练配置对象
Optimizer
训练所使用的优化器
Returns
Adam 优化器
PositiveWeight
正样本类别权重,由 PNETTrainer.FitClassWeights() 计算得到
Returns
正样本权重
NegativeWeight
负样本类别权重,由 PNETTrainer.FitClassWeights() 计算得到
Returns
负样本权重