使用MuE的生物序列模型¶
警告
pyro.contrib.mue
中的代码正在开发中。
此代码不保证保持向后兼容性。
pyro.contrib.mue
提供了用于处理生物序列数据的建模工具。特别是它实现了MuE分布,这些分布被用作基于多序列对齐预处理的完全生成替代方案。
参考: MuE模型在Weinstein和Marks(2021)中有所描述, https://www.biorxiv.org/content/10.1101/2020.07.31.231381v2。
MuE模型示例¶
MuE 观测模型示例。
- class ProfileHMM(latent_seq_length, alphabet_length, prior_scale=1.0, indel_prior_bias=10.0, cuda=False, pin_memory=False)[source]¶
基础类:
torch.nn.modules.module.Module
轮廓HMM。
该模型由回归器序列上的常数分布(一个delta函数)加上MuE观测分布组成。先验都是正态分布,并通过softmax函数推送到单纯形上。
- Parameters
- class FactorMuE(data_length, alphabet_length, z_dim, batch_size=10, latent_seq_length=None, indel_factor_dependence=False, indel_prior_scale=1.0, indel_prior_bias=10.0, inverse_temp_prior=100.0, weights_prior_scale=1.0, offset_prior_scale=1.0, z_prior_distribution='Normal', ARD_prior=False, substitution_matrix=True, substitution_prior_scale=10.0, latent_alphabet_length=None, cuda=False, pin_memory=False, epsilon=1e-32)[source]¶
基础类:
torch.nn.modules.module.Module
该模型由概率PCA加上MuE输出分布组成。
先验都是正态分布,并且在相关情况下通过softmax映射到单纯形上。
- Parameters
data_length (int) – 输入序列矩阵的长度,包括末尾的零填充。
alphabet_length (int) – 序列字母表的长度(例如,氨基酸为20)。
z_dim (int) – z空间的维度数。
batch_size (int) – 小批量大小。
latent_seq_length (int) – 潜在回归序列的长度(M)。 必须大于或等于1。(默认值:1.1 x 数据长度。)
indel_factor_dependence (bool) – 插入/删除概率依赖于潜在变量 z。
indel_prior_scale (float) – 插入删除参数先验分布的标准差。
indel_prior_bias (float) – 不发生的indel的对数概率的先验分布的平均值。较高的值会导致indels的概率较低。
inverse_temp_prior (float) – 逆温度参数先验分布的均值。
weights_prior_scale (float) – 因子先验分布的标准差。
offset_prior_scale (float) – pPCA模型中偏移(常数)的先验分布的标准差。
z_prior_distribution (str) – 潜在变量 z 的先验分布。可以是 'Normal'(pPCA 模型)或 'Laplace'(ICA 模型)。
ARD_prior (bool) – 在因子中使用自动相关性确定先验。
substitution_matrix (bool) – 使用可学习的替换矩阵 而不是单位矩阵。
substitution_prior_scale (float) – 替换矩阵参数先验分布的标准差(当substitution_matrix为True时)。
latent_alphabet_length (int) – 潜在回归序列中字母表的长度。
cuda (bool) – 在训练期间将数据传输到GPU。
pin_memory (bool) – 固定内存以加快GPU传输。
epsilon (float) – 用于数值稳定性的小值。
- fit_svi(dataset, epochs=2, anneal_length=1.0, batch_size=None, scheduler=None, jit=False)[来源]¶
使用随机变分推断推断近似后验。
这运行了
SVI
。它是一种近似推理方法,对于快速迭代概率模型非常有用。
用于参数化MuEs的状态安排器¶
- class Profile(M, epsilon=1e-32)[source]¶
基础类:
torch.nn.modules.module.Module
Profile HMM 状态排列。根据[1]中的公式 S40 参数化 HMM(对于 j 在 {0, 1, 2} 中,r_{M+1,j} = 1 且 u_{M+1,j} = 0)。有关 Profile HMM 的更多背景信息,请参见[2]。
参考文献
[1] E. N. Weinstein, D. S. Marks (2021) “考虑突变变异性的生成概率生物序列模型” https://www.biorxiv.org/content/10.1101/2020.07.31.231381v2.full.pdf
[2] R. Durbin, S. R. Eddy, A. Krogh, 和 G. Mitchison (1998) “生物序列分析:蛋白质和核酸的概率模型” 剑桥大学出版社
- forward(precursor_seq_logits, insert_seq_logits, insert_logits, delete_logits, substitute_logits=None)[source]¶
根据配置文件参数组装HMM参数。
- Parameters
precursor_seq_logits (Tensor) – 回归器序列 log(x)。应具有最右侧的维度
(M, D)
并且可以广播到(batch_size, M, D)
,其中 D 是潜在字母表的大小。应沿最终轴归一化为1,即precursor_seq_logits.logsumexp(-1) = zeros
。insert_seq_logits (Tensor) – 插入序列 log(c)。 应具有最右侧维度
(M+1, D)
并且可以广播到(batch_size, M+1, D)
。应沿最终轴进行归一化。insert_logits (Tensor) – 插入概率 log(r)。 应具有最右侧维度
(M, 3, 2)
并且可以广播到(batch_size, M, 3, 2)
。应沿最终轴进行归一化。delete_logits (Tensor) – 删除概率 log(u)。 应具有最右侧维度
(M, 3, 2)
并且可以广播到(batch_size, M, 3, 2)
。应沿最终轴进行归一化。substitute_logits (Tensor) – 替换概率 log(l)。应具有最右侧维度
(D, B)
,其中 B 是数据的字母表大小,并且可以广播到(batch_size, D, B)
。必须沿最终轴进行归一化。
- Returns
initial_logits、transition_logits 和 observation_logits。这些参数可以直接用于初始化 MissingDataDiscreteHMM 分布。
- Return type
缺失或可变长度数据的隐马尔可夫模型¶
- class MissingDataDiscreteHMM(initial_logits, transition_logits, observation_logits, validate_args=None)[source]¶
基础类:
pyro.distributions.distribution.Distribution
,Callable
具有离散潜在状态和离散观测的HMM,允许缺失数据或可变长度序列。观测值假定为独热编码;全零行表示缺失数据。
警告
与 pyro 的 pyro.distributions.DiscreteHMM 不同,它计算第一个状态的概率为 initial.T @ transition @ emission 这个分布使用标准的 HMM 惯例, initial.T @ emission
- Parameters
initial_logits (Tensor) – 一个用于潜在状态初始分类分布的logits张量。应具有最右侧的大小
state_dim
,并且可以广播到(batch_size, state_dim)
。transition_logits (Tensor) – 一个用于潜在状态之间转移条件分布的对数张量。应具有最右侧的形状
(state_dim, state_dim)
(旧,新),并且可以广播到(batch_size, state_dim, state_dim)
。observation_logits (Tensor) – 一个用于从潜在状态生成观测分布的对数张量。应具有最右侧的形状
(state_dim, categorical_size)
,其中categorical_size
是分类输出的维度,并且可以广播到(batch_size, state_dim, categorical_size)
。
- log_prob(value)[source]¶
- Parameters
value (Tensor) – 独热编码的观测值。必须是 实数值(浮点数)并且可以广播到
(batch_size, num_steps, categorical_size)
其中categorical_size
是分类输出的维度。 缺失数据用零表示,即value[batch, step, :] == tensor([0, ..., 0])
。 可以通过在序列末尾填充零来处理可变长度的观测序列。
- sample(sample_shape=torch.Size([]))[source]¶
- Parameters
sample_shape (Size) – 样本形状,最后一个维度必须是
num_steps
并且必须能够广播到(batch_size, num_steps)
。batch_size 必须是整数而不是元组。
- filter(value)[source]¶
计算在每个步骤中状态变量的边际概率,条件是之前的观测结果。
- Parameters
value (Tensor) – 独热编码的观测值。 必须是实数值(浮点数)并且可以广播到
(batch_size, num_steps, categorical_size)
其中categorical_size
是分类输出的维度。
- smooth(value)[source]¶
计算每个位置状态的后验期望值(平滑)。
- Parameters
value (Tensor) – 独热编码的观测值。 必须是实数值(浮点数)并且可以广播到
(batch_size, num_steps, categorical_size)
其中categorical_size
是分类输出的维度。
- sample_states(value)[source]¶
使用前向滤波-后向采样算法进行样本状态。
- Parameters
value (Tensor) – 独热编码的观测值。 必须是实数值(浮点数)并且可以广播到
(batch_size, num_steps, categorical_size)
其中categorical_size
是分类输出的维度。
- map_states(value)[source]¶
使用Viterbi算法计算状态变量的最大后验(MAP)估计。
- Parameters
value (Tensor) – 独热编码的观测值。 必须是实数值(浮点数)并且可以广播到
(batch_size, num_steps, categorical_size)
其中categorical_size
是分类输出的维度。
生物序列数据集加载¶
- class BiosequenceDataset(source, source_type='list', alphabet='amino-acid', max_length=None, include_stop=False, device=None)[source]¶
基础类:
Generic
[torch.utils.data.dataset.T_co
]加载生物序列数据,可以从fasta文件或python列表中加载。
- Parameters
source – 输入fasta文件路径(str)或输入序列列表(str列表)。
source_type (str) – 输入类型,可以是‘list’或‘fasta’。
alphabet (str) – 使用的字母表。预设的字母表有‘amino-acid’和‘dna’;任何其他输入将被解释为字母表本身,即你可以使用‘ACGU’来表示RNA。
max_length (int) – 序列的独热编码表示的总长度,包括零填充。默认为数据集中的最大序列长度。
include_stop (bool) – 在每个序列的末尾附加停止符号,并将停止符号添加到字母表中。
device (torch.device) – 数据应存储在内存中的设备。