Overview
最近看了几种生物信息学领域的特征提取算法,在观察了已有算法的特点之后,也想尝试着设计新的算法。这里以CKSAAP
为基础,介绍一下我们想设计的算法的动机和原理。
CKSAAP
的核心原理
关于CKSAAP
的算法介绍详细部分可以参考Young
写的 蛋白质序列特征提取方法之——CKSAAP。
CKSAAP
试图统计刻画出每条序列中不同的氨基酸对出现的特征,它的核心原理可以用下面这个公式表述:
就是统计氨基酸对的出现频率。使用一个氨基酸(例如LE
)对在一个序列中出现的次数,除以这个序列中包含的氨基酸对总数。
Motivation
这种方法不能准确地表示氨基酸对在一个序列中出现的关联度,如果它们真的有关联的话。
在CKSAAP
中,一个氨基酸对(例如LE
)的在特征矩阵中取值高,并不一定是因为关联性高,也有可能是因为L
和E
单独出现的概率很大,这样的话从概率上来说它们在一起出现的次数也会更多,但并不一定是存在某种关联;另一方面,另一个氨基酸对(例如TW
),可能T
和W
在这个序列中都只出现了两次,但是每次出现,它们都是结对出现,那这种关联性是不是更强呢。
虽然说这两种都是比较极端的情况,但是将氨基酸对的出现次数和这两个氨基酸单独出现的次数一起考虑,可能可以更好地表征氨基酸对的关联性。
设计
我们采用点互信息熵
的概念来描述这种关联性,使用下面的公式:
其中,
即 P(x),P(y),P(x,y) 分别为一条序列中x
出现的概率,y
出现的概率,以及xy
序列对出现的概率。
细节讨论
我们通过一个例子讨论这个模型可能出现的问题:
假设有一个长度为100的序列,则N(total)=100,N(totalpair)=99,为了方便计算和观察,我们令N(totalpair)≈100
在以下两种情况下,我们使用这个模型求氨基酸A
和C
的点互信息熵。
Case 1:
A
和C
各只出现1次,AC
出现1次P(A,C)=N(A,C)/Ntotalpair=1/100
P(A)=N(A)/Ntotal=1/100
P(C)=N(C)/Ntotal=1/100
⟹
P(A,C)/(P(A)P(C))=1100/(1100∗1100)=100I(A,C)=logP(A,C)P(A)P(C)=log100
Case 2:
A
和C
各出现50次,AC
出现50次P(A,C)=N(A,C)/Ntotalpair=50/100
P(A)=N(A)/Ntotal=50/100
P(C)=N(C)/Ntotal=50/100
⟹
P(A,C)/(P(A)P(C))=50100/(50100∗50100)=2I(A,C)=logP(A,C)P(A)P(C)=log2
Case 3:
A
和C
各只出现10次,AC
出现1次P(A,C)=N(A,C)/Ntotalpair=1/100
P(A)=N(A)/Ntotal=10/100
P(C)=N(C)/Ntotal=10/100
⟹
P(A,C)/(P(A)P(C))=1100/(10100∗10100)=1I(A,C)=logP(A,C)P(A)P(C)=log1