基于神经网络的微生物-代谢物相互作用

rhapsod的Python项目详细描述


构建状态

狂想曲

通过共生概率估计微生物-代谢物相互作用的神经网络。

安装

rhapsody可以通过pypi安装,如下所示

pip install rhapsody

如果您计划使用gpu,请确保pip install tensorflow gpu

rhapsody也可以通过conda安装,如下所示

conda install rhapsody -c conda-forge

请注意,此选项可能在群集环境中不起作用,它可能在虚拟环境中pip安装时起作用。可以在conda环境(包括qiime2conda环境)中pip安装rhapsody。但是,已知PIP和CONDA存在兼容性问题,因此请小心操作。

入门

要开始,您可以运行一个快速示例,如下所示。这将学习微生物代谢物载体(mmvec) 它可用于估计微生物代谢产物条件概率,精确到秩。

rhapsody mmvec \
	--otu-file data/otus.biom \
	--metabolite-file data/ms.biom \
	--summary-dir summary

运行时,您可以打开另一个会话并运行tensorboard--logdir。有关诊断,请参阅下面的常见问题解答以了解更多详细信息。

如果您调查"摘要"文件夹,您会注意到存放了许多文件。

有关真实数据集的更完整教程,请参见以下URL。

https://github.com/knightlab analysis/multiomic cooccurrences

更多信息请参见rhapsody--help

qiime2插件

如果要使此qiime2兼容,请在 qiime2 conda环境(请参见此处的qiime2安装说明)并运行以下命令

pip install git+https://github.com/biocore/rhapsody.git
qiime dev refresh-cache

这将允许您的第2季度环境识别rhapsody。在我们测试之前 qiime2插件运行以下命令导入示例数据集

qiime tools import \
	--input-path data/otus_nt.biom \
	--output-path otus_nt.qza \
	--type FeatureTable[Frequency]

qiime tools import \
	--input-path data/lcms_nt.biom \
	--output-path lcms_nt.qza \
	--type FeatureTable[Frequency]

然后您可以运行mmvec

qiime rhapsody mmvec \
	--i-microbes otus_nt.qza \
	--i-metabolites lcms_nt.qza \
	--o-conditionals ranks.qza \
	--o-conditional-biplot biplot.qza

结果中有两个文件,分别是results/conditional_biplot.qzaresults/conditionals.qza。条件双块是双块表示 条件概率矩阵,这样你就可以以探索性的方式可视化这些微生物-代谢物的相互作用。这可以直接在 皇帝如下图所示。我们还得到了results/conditionals.qza中给出的估计条件概率矩阵, 通过unzip results/conditionals解压缩以生成制表符分隔的表。每一行都可以排序, 因此,通过确定每个微生物的最高共现概率,可以获得给定微生物的最高共现代谢产物。

值得花时间调查使用tensorboard存放的日志(标记在logdir**下)。 此目录中的实际日志文件被标记为events.out.tfevents.*:稍后将对此进行更多讨论。

TensorBoard可以通过

tensorboard --logdir .

您可能需要修改参数以获得可读的tensorflow结果,即--p-summary-interval--epochs--batch size

下面的常见问题解答中概述了这两个图的说明。

然后,您可以运行以下命令来生成一个Emperor biplot。

qiime emperor biplot \
	--i-biplot conditional_biplot.qza \
	--m-sample-metadata-file data/metabolite-metadata.txt \
	--m-feature-metadata-file data/microbe-metadata.txt \
	--o-visualization emperor.qzv

生成的biplot应该如下所示

biplot

在这里,代谢物代表点和箭头代表微生物。这些紧密的点表明了代谢物 经常发生在一起。此外,箭头之间有一个小角度,这表明微生物是共同发生的。 与代谢物指向同一方向的箭头表示微生物代谢物共存。在上面的双峰图中,红色箭头 对应于铜绿假单胞菌,红点对应于可能由铜绿假单胞菌产生的鼠李糖类。

有关参数背后的更多信息,请参见qiime rhapsody--help

常见问题

q:看起来有两个不同的命令,一个独立的脚本和一个qiime2接口。我该用哪一个????

a:这取决于你想在杂草中挖到多深。对于大多数意图和目的来说,qiime2接口对于大多数分析都更实用。独立脚本比qiime2接口更可取的原因有三个,即

  1. 定制加速:如果您想将运行时间从几天缩短到几小时,您可能需要编译tensorflow来处理硬件特定指令(即gpu/simd指令)。在conda环境中,可能需要付出一些努力才能实现gpu兼容性,但由于conda包二进制文件,simd指令将无法立即生效。

  2. 检查点:如果您不确定分析应该运行多长时间,独立脚本可以允许您记录检查点,这可以让您恢复模型参数。这使您能够在模型训练期间调查模型。

  3. 更多模型参数:独立脚本将返回为每个数据集学习的偏差参数(即微生物和代谢物丰度)。它们存储在summary目录下(由summary指定),名为embeddings.csv。这个文件将保存微生物和代谢物的坐标,以及偏差。这个文件有4列,分别是feature\u idaxisembed\u typevalues特征ID是特征的名称,无论是微生物名称还是代谢物特征ID。对应于轴的名称,轴对应于PC轴或偏差。嵌入类型表示坐标是否对应于微生物或代谢物。是给定的嵌入类型功能ID的坐标值。这对于访问原始参数和构建自定义的biplots/ranks可视化非常有用-这还具有需要更少内存来操作的优点。

q:您提到可以使用GPU。你怎么能这么做?< < > >

a:这可以通过在您的环境中运行pip install tensorflow gpu来完成。请参见此处的详细信息

目前,由于安装的复杂性,这些功能仅适用于独立的cli。请参见独立界面中的--arm the gpu选项。

q:神经网络吓到我了-难道它们不适合你的数据吗?

a:这里,我们使用浅层神经网络(所以只有两层)。这与PCA和SVD属于同一制度。但正如你可以过度拟合pca/svd一样,你也可以过度拟合mmvec。这就是为什么我们启用了tensorboard进行诊断。你可以将cv rmse可视化来判断是否存在过度拟合——如果你的跑步量正在严格减少,那么这就是你可能没有过度拟合的迹象。但这并不一定意味着你已经达到了最优——你想查看logloss是否已达到如上所示的平台。

q:我很困惑,什么是tensorboard?

a:TensorBoard是在Web浏览器中运行的诊断工具。要打开tensorboard,请确保您在rhapsody环境中,并将cd放入运行上述脚本的文件夹中。然后运行:

tensorboard --logdir .

返回行将类似于:

pip install rhapsody
0

在浏览器中打开网站(以红色突出显示)。(提示;如果不起作用,请尝试只输入端口号(这里是6006),添加localhost,localhost:6006)。别碰这个账单。现在,您添加到TensorFlow正在运行的文件夹中的任何Rhapsody输出目录都将添加到网页中。

如果工作正常,会像这样 tensorboard

TensorFlow中的第一个图;"预测精度"。标记为cv\u rmse

这是模型预测精度的图表;模型将尝试猜测上述脚本中留出的测试样本的代谢物强度值,仅使用测试样本中的微生物计数。然后它会查看实际值,并查看其接近程度。

第二个图是似然-如果您的似然值是稳定的,则表示您已收敛并达到局部极小值。

x轴是迭代次数(即模型在整个数据集上训练的次数)。每次迭代训练样本时,也会运行测试样本,并将平均结果绘制在y轴上。

y轴是每个特征的平均计数数。该模型预测了样本中每个特征的序列计数,这些特征被留作测试用。所以在上面的图表中,它意味着,平均来说,模型被关闭了约0.75个强度单位,这是很低的。然而,这是绝对误差而不是相对误差(不幸的是,由于这些数据集中的稀疏性,我们不知道如何计算相对误差)。

您还可以将多个运行与不同的参数进行比较,以查看哪个运行执行得最好。如果您正在执行此操作,请务必查看培训栏示例,以确保测试样本在整个跑步过程中保持一致。

q:参数--training column有什么问题?

a:如果您有感兴趣回答的特定再现性问题,则用于交叉验证。它还可以使跨运行比较交叉验证结果变得更容易。如果指定了此项,则只有本列下标记为"train"的样本将用于构建模型,标记为"test"的样本将用于交叉验证。换句话说,该模型将试图预测"测试"样本的微生物丰度。所得到的预测精度用于评估模型的泛化性,以确定模型是否过度拟合。如果未指定此参数,则将为测试数据集选择10个随机样本。如果要指定更多随机样本以分配给交叉验证,则可以指定num random test examples参数。

q:在选择一个好的模型时,我应该关注哪类参数?

a:有3个不同的参数需要关注,输入优先输出优先潜在维度

--input prior--output prior选项指定系数的先验分布宽度,其中--input prior通常特定于微生物和--先前的输出特定于代谢物。 对于1之前的版本,这意味着嵌入中99%的条目(通常在u.txtv.txt文件中给出)在-3和+3范围内(日志折叠更改)。差分先验值越高,参数的变化就越大,所以要保持这个值相对较小。如果发现过拟合(在TensorBoard中精度和拟合度随迭代次数的增加而增加),可以考虑减少--input prior--output prior,以减小参数空间。

另一个值得考虑的参数是--pentent dim,它控制用于近似条件概率矩阵的维数。这也规定了微生物/代谢物嵌入物的尺寸u.txtv.txt。尺寸越大,嵌入的精度就越高,但越有可能过拟合。要遵循的经验法则是,为了拟合这些模型,您需要的样本数量至少是潜在维度的10倍(这与拟合直线遵循的经验法则相似)。所以如果你有100个样本,你绝对不应该有超过10的潜在维度。此外,你仍然可以过度适应某些微生物和代谢物。例如,你用100个样本和1个潜在维度拟合一个模型,您仍然可以很容易地对出现在少于10个样本中的微生物和代谢物进行过度拟合,因此,即使仅具有1个潜在维度的拟合模型也需要过滤掉出现在少于10个样本中的一些微生物和代谢物。

q:一个好的模型适合什么样子?< < > >

a:同样,数据集的数字变化很大。但是您希望看到loglosscv rMse曲线衰减,并且平台尽可能接近于零。

q:我应该期望这个程序运行多长时间?

a:无论是epochs还是batch size都有助于确定算法将运行多长时间,即

迭代次数=epoch乘以(微生物读取的总/批量大小参数)

这也取决于你的程序是否会收敛。学习速率指定分辨率(较小的步长=较小的分辨率,但可能需要较长时间才能收敛)。您需要咨询Tensorboard,以确保您的模型匹配是正常的。有关坡度下降的详细信息,请参阅本文:https://arxiv.org/abs/1609.04747

如果你是在一个16核的CPU上运行这个程序,那么一次达到收敛的运行大约需要1天。 如果你有一个GPU-你也许可以把这个降低到几个小时。但是,可能需要对批处理大小参数进行一些微调,而不是使用较小的批处理大小<;100,您需要将批处理大小提高到1000到10000之间,以充分利用GPU上可用的加速效果。

Lisa Marotz的学分(@lisa55asil),Yoshiki Vazquez Baeza(@eldeveloper)和Julia Gauglitz(@jgauglitz)的自述贡献。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
当使用RequestDispatcher时,servlets Java最终没有被调用   java生成对具有可变参数数的方法的调用   java如何使用select子句中的参数化列映射iBATIS的查询?   java无法创建类型为org的插件。阿帕奇。登录中。log4j。果心阿佩德。元素RollingFile的RollingFileAppender   java当子实体和父实体之间存在OneTONE JPA关系时,是否可以将其与父实体一起持久化?   Android上的java Facebook集成fbconnect断开链接   获取方法调用方的java机制   从列表创建Oracle阵列时出现java问题   添加和检索元素的ArrayList的java ArrayList   在java中从字符串中删除无效的XML字符   java如何构建完整生成的maven模块   java如何准确地改变播放所有分辨率midi文件的速度?   shell javac:无效标志:/src/中位_度。ubuntu中的java   java使用从其他类的方法检索到的信息