| ElasticNetOptions {SMRUCC.genomics.Model.Network.Regulons.LinearRegression} | .NET clr documentation |
弹性网络(Elastic Net)拟合基因调控网络的参数
弹性网络在最小二乘的损失之上同时加入了 L1 与 L2 惩罚:
beta = argmin { ||y - X*beta||^2 / (2n) + alpha * [ l1_ratio * ||beta||_1 + (1 - l1_ratio) * ||beta||_2^2 / 2 ] }
其中 L1 项给出稀疏的调控关系,L2 项则在基因高度共线的时候给出分组效应 (相关的基因要么一起被保留、要么一起被剔除),并且允许自变量个数大于样本数量。
# namespace SMRUCC.genomics.Model.Network.Regulons.LinearRegression
export class ElasticNetOptions {
# 正则化路径的终止比例,即最小的 alpha 等于最大的 alpha 乘以这个比例
alphaRatio: double;
# 交叉验证之中每一个 L1 比例下的 alpha 路径步数
cvAlphaSteps: integer;
# 交叉验证的折数。样本数量更少的时候会自动收缩到样本数量。
cvFolds: integer;
# 交叉验证所搜索的 L1 混合比例网格。 为空的时候使用 ElasticNet 库的默认值(0.1, 0.5, 0.7, 0.9, 0.95, 0.99, 1.0)。
cvL1Ratios: double;
# 全局交叉验证模式之下用于估计超参数的代表性基因的数量 (按照表达方差从大到小挑选)
globalCVReplicates: integer;
# L1 惩罚所占的混合比例,取值 [0, 1]。
#
# 0 表示纯 Ridge(不会产生稀疏解),1 表示纯 LASSO。 基因表达数据之中存在大量共调控的基因,一般建议取 0.7 附近; 特征数量远大于样本数量的时候可以提高到 0.7~0.9。
l1Ratio: double;
# 每一个目标基因允许纳入的最大候选调控因子数量(默认 300)。
#
# 弹性网络本身没有「自变量个数必须小于样本数量」的限制, 因此这里是一个纯粹用于控制内存与计算量的预算: 求解器每一次都会复制一份 n x p 的设计矩阵, 单次拟合的成本与它近似成正比。
maxCandidates: integer;
# 坐标下降每一步的最大迭代轮数
maxIterations: integer;
# 单个基因模型的 |系数| 之和上限,默认 0(不限制)。
#
# 线性网络做虚拟扰动的时候,如果某一行的 |β| 之和大于 1,级联迭代的谱半径 就可能超过 1,扰动会被指数放大成"全基因组剧烈变化"的假象。 设为 0.9 之后,每一行都是压缩映射(下游变化不会超过上游变化的 0.9 倍), 传播稳定、幅度可控;由于只是按比例缩小系数,R² 与边集都不变。
maxRowSum: double;
# 超参数的确定方式,默认为正则化路径选步。
mode: ElasticNetMode;
# 正则化路径上面的 alpha 步数(alpha 由大到小排列)
numberOfAlphas: integer;
# 坐标下降的收敛容差(系数更新的最大变化量)
tolerance: double;
}
mode: ElasticNetMode