机器学习之DeepSequence软件使用学习1

简介

DeepSequence 是一个生成性的、无监督的生物序列潜变量模型。给定一个多重序列比对作为输入,它可以用来预测可获得的突变,提取监督式学习的定量特征,并生成满足明显约束的新序列文库。它将序列中的高阶依赖性建模为残差子集之间约束的非线性组合。要了解更多信息,请查看论文(https://www.biorxiv.org/content/early/2017/12/18/235655.1)和下面的例子。

为了便于分析,我们建议使用 EVcouplings package(https://github.com/debbiemarkslab/EVcouplings)程序包生成对齐,尽管可以使用任何序列比对。

例子

对于合理的培训时间,我们建议在 GPU 上培训 DeepSequence:

bash 复制代码
THEANO_FLAGS='floatX=float32,device=cuda' python run_svi.py

但是,它可以在 CPU 上运行:

bash 复制代码
python run_svi.py

示例子文件夹中的 iPython 笔记本中提供了该分析的其他用法示例和特性。

注:.ipynb结尾的文件格式需要用jupyter notebook打开。

例子1-1 下载例子文件中需要的数据(shell中运行)

bash 复制代码
bash download_alignments.sh
bash download_pretrained.sh

注:这里有个bug,下载后的aligments文件放在了example下的aligments文件夹下,后面发现例子文件中给出的调用代码中使用的地址是datasets文件夹下,这里确实是例子文件中的调用地址写错了,我是将这个aligments文件夹名更改成了datasets,后续才能正常运行。

例子1-2 探索模型的输出

python 复制代码
import theano
import numpy as np
import sys
#Theano是一个Python库,专门用于定义、优化、求值数学表达式,效率高,适用于多维数组类型深度学习库。
#在数据分析和机器学习中,大量的使用科学计算,Numpy 提供了大型矩阵计算的方式,而这些是 python 标准库中所缺少的。
#sys模块是与python解释器交互的一个接口。sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分。
%matplotlib inline
import matplotlib.pyplot as plt

注:我在运行%matplotlib inline时报错

bash 复制代码
>>> %matplotlib inline
  File "<stdin>", line 1
    %matplotlib inline
    ^
SyntaxError: invalid syntax

这是因为我是直接使用的linux系统中的原生python,而该命令属于jupyter notebook的中魔法命令,修改后的命令如下

python 复制代码
import theano
import numpy as np
import sys
import matplotlib
#Matplotlib允许数据科学家通过创建各种图表(如折线图、散点图、直方图等)深入探索数据。通过可视化数据,数据科学家可以更直观地理解数据的分布、趋势和异常值,为进一步的分析提供基础。
matplotlib.use('TkAgg')
#%matplotlib inline
import matplotlib.pyplot as plt

例子1-3 加载DeepSequence软件的本地模块

python 复制代码
sys.path.insert(0, "../DeepSequence")

import model
import helper
import train
#这里的导入的三个模块式DeepSequence目录下的三个本地模块

例子1-4 构建模型

python 复制代码
data_params = {"dataset":"BLAT_ECOLX"}
#这里表示
#这里定义的data_patams变量将在helper模块定义的def gen_job_string函数中使用,该函数包含两个参数,分别是data_params和model_params
data_helper = helper.DataHelper(
                dataset=data_params["dataset"],
                working_dir=".",
                calc_weights=False
                )

model_params = {
        "batch_size"        :   100,
        "encode_dim_zero"   :   1500,
        "encode_dim_one"    :   1500,
        "decode_dim_zero"   :   100,
        "decode_dim_one"    :   500,
        "n_patterns"        :   4,
        "n_latent"          :   30,
        "logit_p"           :   0.001,
        "sparsity"          :   "logit",
        "encode_nonlin"     :   "relu",
        "decode_nonlin"     :   "relu",
        "final_decode_nonlin":  "sigmoid",
        "output_bias"       :   True,
        "final_pwm_scale"   :   True,
        "conv_pat"          :   True,
        "d_c_size"          :   40
        }

vae_model   = model.VariationalAutoencoder(data_helper,
    batch_size              =   model_params["batch_size"],
    encoder_architecture    =   [model_params["encode_dim_zero"],
                                model_params["encode_dim_one"]],
    decoder_architecture    =   [model_params["decode_dim_zero"],
                                model_params["decode_dim_one"]],
    n_latent                =   model_params["n_latent"],
    n_patterns              =   model_params["n_patterns"],
    convolve_patterns       =   model_params["conv_pat"],
    conv_decoder_size       =   model_params["d_c_size"],
    logit_p                 =   model_params["logit_p"],
    sparsity                =   model_params["sparsity"],
    encode_nonlinearity_type       =   model_params["encode_nonlin"],
    decode_nonlinearity_type       =   model_params["decode_nonlin"],
    final_decode_nonlinearity      =   model_params["final_decode_nonlin"],
    output_bias             =   model_params["output_bias"],
    final_pwm_scale         =   model_params["final_pwm_scale"],
    working_dir             =   ".")

print ("Model built")

显示结果

python 复制代码
Encoding sequences
Neff = 8355.0
Data Shape = (8355, 253, 20)
Model built

注:由于使用的原生python解释器,这里每一部分我都是分开运行的。

首先,这里的data_params = {"dataset":"BLAT_ECOLX"}指的是定义了一个键值对的变量,该函数稍后会使用在helper模块的def gen_job_string函数中

例子1-5 构建模型(装载训练好的参数)

python 复制代码
file_prefix = "BLAT_ECOLX"

vae_model.load_parameters(file_prefix=file_prefix)

print ("Parameters loaded")

结果

python 复制代码
Parameters loaded

例子1-5 打印目标序列的信息

打印

python 复制代码
print (data_helper.focus_seq_name)
print (str(data_helper.focus_start_loc)+"-"+str(data_helper.focus_stop_loc))
print (data_helper.focus_seq)

结果

python 复制代码
>BLAT_ECOLX/24-286
24-286
hpetlVKVKDAEDQLGARVGYIELDLNSGKILeSFRPEERFPMMSTFKVLLCGAVLSRVDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPAAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGErGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIkhw

例子1-6 去除小写字母

python 复制代码
print ("".join(data_helper.focus_seq_trimmed))

结果

python 复制代码
VKVKDAEDQLGARVGYIELDLNSGKILSFRPEERFPMMSTFKVLLCGAVLSRVDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPAAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGEGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLI

例子1-7 求一下模型序列的潜在变量

python 复制代码
focus_seq_one_hot = np.expand_dims(data_helper.one_hot_3D(data_helper.focus_seq_trimmed),axis=0)
mu_blat, log_sigma_blat = vae_model.recognize(focus_seq_one_hot)
print ("mu:")
print (mu_blat[0])
print ("\nlog sigma:")
print (log_sigma_blat[0])

结果

python 复制代码
mu:
[-2.93129622e-02  2.80484591e-02  4.74045508e-02  2.08589889e-02
 -1.58986675e-02 -1.26072732e+00 -1.66292705e-02  1.40488074e+00
  1.67025877e-02 -8.53566889e-03  2.18774280e-02  2.32125783e+00
  2.55409795e-02 -1.15651891e-02 -3.02552657e-02  1.24139726e-02
 -4.12962164e-02 -8.41912007e-01 -5.99993306e-03  1.61336532e-03
  6.03782405e-01  3.46253082e-02  2.27598501e-02 -2.05355599e-02
  3.94717697e-03  1.35123502e+00  8.65776037e-03 -7.57649777e-03
  3.81364257e-02 -2.08573404e-02]

log sigma:
[-4.22987289e-04 -1.84314600e-02 -4.19494449e-02 -3.17123838e-02
 -1.67881093e-02 -2.28357830e+00 -5.77861108e-02 -9.92522460e-01
 -3.17816964e-02 -1.74817094e-02 -4.95498244e-02 -1.99601526e+00
 -2.00790022e-02  2.04198661e-02 -1.36289102e-02 -6.93278173e-03
 -2.53706808e-02 -1.90622283e+00 -2.70597848e-02 -1.67551476e-02
 -2.16649542e+00  1.02254690e-02  8.96915176e-03 -1.85787921e-02
  2.56248426e-02 -2.42973459e+00 -3.70118837e-02  1.25962615e-02
  2.43832070e-02 -6.73871211e-03]

例子1-8 从中取样

python 复制代码
z_blat = vae_model.encode(focus_seq_one_hot)
print ("z:")
print (z_blat[0])

结果

python 复制代码
z:
[ 1.226298   -0.50005774 -0.05264941  0.66986938 -0.71224884 -1.15921493
  0.05177535  1.1583736   0.92446647 -0.14730169  0.78172059  2.35628846
  1.32076451  1.1621947  -0.12593087 -0.49765921  0.55820479 -0.84410041
 -1.94164654  1.19722414  0.51352968  0.23148123  0.56776408 -0.36881278
 -0.590448    1.50986844  0.68191917 -1.4255378  -0.08560662  1.08017904]

例子1-9 然后通过采样的潜在变量生成序列周围的样本分布

python 复制代码
seq_reconstruct = vae_model.decode(z_blat)
plt.figure(figsize=(35,10))
plt.imshow(seq_reconstruct[0].T,cmap=plt.get_cmap("Blues"))
ax = plt.gca()
ax.set_yticks(np.arange(len(data_helper.alphabet)))
ax.set_yticklabels(list(data_helper.alphabet))
plt.show()

结果

相关推荐
民乐团扒谱机6 分钟前
实验室安全教育与管理平台学习记录(七)网络安全
学习·安全·web安全
蒙奇D索大26 分钟前
【11408学习记录】考研英语长难句精析:三步拆解真题复杂结构,轻松攻克阅读难关!
笔记·学习·考研·改行学it
兰亭妙微32 分钟前
用户体验的真正边界在哪里?对的 “认知负荷” 设计思考
人工智能·ux
13631676419侯38 分钟前
智慧物流与供应链追踪
人工智能·物联网
TomCode先生40 分钟前
MES 离散制造核心流程详解(含关键动作、角色与异常处理)
人工智能·制造·mes
zd2005721 小时前
AI辅助数据分析和学习了没?
人工智能·学习
johnny2331 小时前
强化学习RL
人工智能
乌恩大侠1 小时前
无线网络规划与优化方式的根本性变革
人工智能·usrp
放羊郎1 小时前
基于萤火虫+Gmapping、分层+A*优化的导航方案
人工智能·slam·建图·激光slam
王哈哈^_^1 小时前
【数据集+完整源码】水稻病害数据集,yolov8水稻病害检测数据集 6715 张,目标检测水稻识别算法实战训推教程
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计