生物序列分类及其相关软件


以下代码依赖:Java1.8,Pytorch,Python3.x,weka3.8。各位同学在使用过程中有什么疑问可以联系huangqianfei@tju.edu.cn

HQFSVM-SA


  我们通过改进SmithWaterMan算法,得到一个计算相似度的算法,算法可以自动的识别DNA或者Protein序列,从而采用不同的打分矩阵。算法中去除了SmithWaterMan算法的回溯部分代码。 由于得到的相似度矩阵是对称的,所以在计算两条序列相似度的时候只计算上三角的相似度。将构建好的相似度矩阵通过SVM -t 4的接口传给svm。整个过程相当于自定义核函数,这个算法还提供了weka界面支持,可以将生成的jar包导入到weka通过简单的点击实现相应的操作。

Fasta2svm

  这个算法是将fasta文件中的序列进行分词,这里的分词一共有两种;一种是普通的等长分词,另一种是kmer分词。然后将这些分好的词进行训练(word2vec)得到词向量模型。这里需要说明的是这个词向量模型既可以通过外部导入训练好的,也可以训练自己的分词文件,当然这里的分词文件越大越好,可以不限定是训练集或者测试集,可以是数据源中的一个很大的数据集,这样词向量就算解决了, 这个算法的目的是将我们的fasta中的序列转化为特征然后传给svm进行序列分类,在得到词向量模型和分词文件之后分别将训练集和测试集的词从词向量模型中取出来。这样就是每一个词对应一个向量,这里我们采用的操作是将每个序列中的所有的词向量平均处理。这样就得到一条序列的特征了。然后给svm进行分类。这里代码中提供了网格搜索,归一化,标准化等操作。

Markov

  这个算法的原理是通过一阶马尔可夫的构建来实现对DNA序列的分类;具体的在训练的时候对训练的正负样本分别构建 转移概率矩阵,在预测的时候是将未知的序列分别根据训练集正样本和负样本的转移概率矩阵计算出序列的两个出现概率;将这个概率进行比值进行分类。

Attention

  这里面主要有两种attention机制,一种是基于LSTM的attention机制,另外一种是基于Transformer的self-attention机制。 具体原理可以通过Google进行详细的理解。

Text_CNN

  这里面主要采用了Pytorch对Text_CNN进行复现,简单原理Github有图解。 具体原理可以通过Google进行详细的理解。

以上几个都是分类算法,下面两个,第一个是特征提取方法的集合,第二个是相似度计算方法。


DNA_features

  这个方法是DNA序列常用特征提取方法的代码实现,可以通过简单命令行操作实现多个特征的提取;也可以将这些代码加到自己的实验中使用。

Similarity-SuffixTree

  这个代码实现的是通过后缀树实现两条字符串相似度的计算,代码封装成了jar方便调用。一个是调用的jar,另外一个是直接处理fasta文件的jar。