7.9 学习
每日一句: 此时不博更待何时
正文
马尔可夫链,随机动力学建模
隐马尔可夫链
参考网址
- 回顾了马尔可夫链的发展过程。生物过程参照HMM,另外GibbsNet和对抗训练方法来学习转移算子以及MEMM的三种方法特别值得我继续学习,看能否适用到生物网络学习中。
https://www.jiqizhixin.com/graph/technologies/fdebe132-cd51-43ba-8bda-a42abc478cbb
不同时刻的随机变量可连续可离散,具有连续或者离散的状态空间。
马尔可夫属性:给定当前状态和过去状态的流程,未来状态的条件分布只依赖于当前状态,而完全不依赖于过去状态(无记忆属性)。具有马尔可夫属性的随机过程成为马尔可夫过程。
$P(future| present,past)=P(future|present,markov property)$
马尔可夫链:马尔可夫过程与离散时间和离散状态空间。
$P(X_{n+1}=s_{n+1}| X_n=s_n,X_{n-1}=s_{n-1},X_{n-2}=s_{n-2},…)=p(X_{n+1}=s_{n+1}|X_n=s_n )$
可还原性,周期性,短暂性,复发性
静态分布,限制行为,遍历性
初始概率分布上没有假设,无论初始假设如何设置,链的概率分布都会被限制到平稳分布
在极限情况下,轨迹的早期行为可以忽略不计,只有长期静止行为在计算均值时才真正重要。
当且仅当所有的状态都是正向重复时,不可简化的马尔可夫链具有静态概率分布,收敛到静止分布,忽略早期行为。
如果链式循环正和非周期性的,污染初始概率是多少,当时间步长变为无穷大时,链的概率分布会被限制,改链被认为具有限制分布,而不是静态分布
初始概率分布没有假设,污染初始设置如何,链的概率分布都会被限制到平稳分布
网络与矩阵的对应关系,具有方向性的启示


隐马尔可夫模型(HMM)
HMM: 用来描述一个含有隐含未知参数的马尔可夫过程。
GibbsNet:通过匹配模型期望的联合分布和数据驱动的联合分布直接定义和学习转换算子,然后使用转换算子训练图模型,成功将马尔可夫链与神经网络结合起来。
对抗方法训练转移子:Jiaming Song, Shengjia Zhao和Stefano Ermon研究了生成对抗的训练方法来对马尔可夫链(Markov chain)的转移算子(transition operator)进行学习,目的是将其静态分布(stationary distribution)和目标数据分布相匹配。他们提出了一种新型的训练流程,以避免从静态分布中直接采样,但是仍然有能力逐渐达到目标分布。此模型可以从随机噪声开始,是无似然性的,并且能够在单步运行期间生成多个不同的样本。初步试验结果显示,当它临近其静态时,马尔可夫链可以生成高质量样本,即使是对于传统生成对抗网络相关理念中的较小结构亦是如此。
MEMM: 最大熵隐马尔科夫模型(MEMM)可以整个观察序列,不仅和单个词相关,而且与观察序列的长度、单词的上下文等有关。
20200716
每日一句:坚定自己的选择
Characterization of cell fate probabilities in single-cell data with Palantir
code ocean: https://codeocean.com/capsule/2535144/tree/v1
利用马尔可夫模型对细胞类型的分化建模
假设
- 1.伪时间推测算法中,假定细胞从一个较少分化状态到完全分化状态是单向的。
- 2.节点到邻近节点的过程与历史无关,即分化到下一个状态与之前的状态无关。
具体的模型
- 首先使用diffusion maps来构建nearest-neighbor graph。使用多个compents
- 从用户定义的起始细胞开始,计算拟时间,即与起始细胞的最短距离
- 利用neighbor graph and pseudo-time来构建一个markov chain来模拟分化作为随机过程,拟时间作为方向,对于每条有向边,我们都指定一步到达相邻单元的转移概率。到达较远单元的概率要经过多步计算,如果有多条路径连接它们,则概率会很高——也就是说,观察到的中间单元状态密度很高
- 马尔可夫链也用于从数据中推断终端状态。Palantir将终端状态定义为边界单元(扩散分量的极值),它们是平稳分布中的异常值,即随机游动收敛到的状态.一旦确定了终端态,我们就把它们转换成没有传出边的吸收态。在吸收马尔可夫链中,任意状态的随机游走会一直持续下去,直到到达一个终端吸收状态。对于每个细胞,Palantir然后整合所有可能的随机游走从细胞到每个可能的终端状态,以产生一个分支概率的向量.
- 根据上述定义的轨迹,利用一个广义可加模型来计算基因的表达趋势。
模型的二次理解
参数:
- k: number of neighbors of knn
- waypoints: 抽样的个数
- number of diffusion components.
具体代码解析
init.py
依赖包的载入
1 | from . import core |
core.py
run_palantir
_max_min_sampling
_compute_pseudotime
identify_terminal_states
_construct_markov_chain
_terminal_states_from_markov_chain
_differentiation_entropy
_shortest_path_helper
_connect_graph
io.py
_clean_up
from_csv
from_mtx
from_10x
from_10x_HDF5
from_fcs
plot.py
class FigureGrid
FigureGrid
density_2d
plot_molecules_per_cell_and_gene
plot_cell_clusters
plot_tsne
highlight_cells_on_tsne
plot_tsne_by_cell_sizes
plot_gene_expression
plot_diffusion_components
plot_palantir_results
plot_terminal_state_probs
plot_gene_trends
plot_gene_trend_heatmaps
plot_gene_trend_clusters
preprocess.py
filter_counts_data
normalize_counts: 使用median normalization的方法
log_transform:log2(data + pseudo_count)
persults.py
class PResults
compute_gene_trends
_gam_fit_predict
cluster_gene_trends
utils.py
run_pca
run_diffusion_maps
run_magic_imputation
determine_multiscale_space
run_tsne
determine_cell_clusters
version.py
###############################################################