在交互模型中找到最佳功能


13

我有蛋白质列表及其特征值。样本表如下所示:

...............Feature1...Feature2...Feature3...Feature4  
Protein1  
Protein2  
Protein3  
Protein4  

行是蛋白质,列是特征。

我也列出了相互作用的蛋白质。例如

Protein3, Protein4  
Protein1, Protein2  
Protein4, Protein1  

问题:对于初步分析,我想知道哪些功能对蛋白质相互作用的贡献最大。

我的理解是,决策树通常可以用于基于熵获得最重要的特征,但是我不确定如何将其扩展到蛋白质对(即相互作用)。是否有用于此目的的方法?


告诉我我是否正确理解:您对任何一对蛋白质都有相互作用强度(例如,如果蛋白质不相互作用,则为零),然后您想要一个特征向量,其值将高度相关与互动的力量?或者换句话说,这将使您能够预测蛋白质之间的相互作用强度?
dsign 2012年

Answers:


25

解决提出的问题的实际方法(一种可能的解决方案)

使用我最喜欢的机器学习工具vowpal wabbit可以轻松解决此问题,该工具通过-q选项支持二次(十字)功能。

vowpal兔子背景

在我们进入用法细节之前。vowpal wabbit是一款快速且可扩展的在线机器学习软件,可用于分类和回归。我在桌面上的学习(培训)速度约为每秒500万个功能,而数据大小(示例数)没有限制,因为作为一种在线学习工具,它不需要将完整的数据加载到内存中。它具有许多其他吸引人的功能:支持不同的学习算法,多个损失函数,稀疏特征,混合特征类型等,这些都超出了此问题的范围。

以下是通过注释解决问题的3个步骤:

步骤0:从github 下载并构建vowpal wabbit (请参阅支持的环境底部的注释)

步骤1: 准备训练集,每行如下所示:

1.0 protein1/protein2|A p1_feature1 p1_feature2 ... |B p2_feature1 ...
...

训练集格式的说明:

最左边的数字1.0是标签(交互强度,可以是任何数字值),第二个字符串' protein1 / protein2 '是为该行添加标识的标签,IOW:“此行表示protein1和蛋白质2”;它是可选的,您可以将其视为注释。在模型的预测中也会回显此标记字符串,以识别哪个预测属于哪个示例,但是我们在这里没有进行预测,我们只是对模型进行建模和研究。接下来是protein1的输入特征名称空间|A(我们需要定义一个名称空间,以便我们可以在不同的名称空间之间进行转换,而不必A实际上可以是任何单词,但是名称空间之间的第一个字母必须有所不同,因此我们可以在命令调用中将它们交叉),然后是protein1的输入功能列表p1_...。最后是protein2的名称空间:|B其后是protein2 的功能名称p2_...

vowpal wabbit的优点之一是您可以使用任意字符串作为功能名称(它会在内部对它们进行哈希处理,但您不在乎)。训练集中唯一的特殊字符是:

  • 空格(显然)
  • |,为输入要素和名称空间加上前缀,以及
  • : 将要素名称与其值分开

:这里没有用,因为我们假定每个蛋白的功能名称代表一个布尔(存在),因此它们的值默认为1,他们并不需要明确的值。

现在,您可以运行vowpal_wabbit(可执行文件名为vw),-q AB以在所有可能的特征对之间自动创建交叉特征(又称交互作用术语),其中一个特征是从protein1(名称空间以开头A)中选择的,另一个特征是从protein2(以开头的名称空间B。vowpal_wabbit将读取数据,学习并为每个特征组合创建权重模型,从而导致这对蛋白质之间的相互作用。在这里,不是vw直接运行,而是通过vw-varinfovowpal wabbit附带的wrapper实用程序运行它,这是最后一步。vw-varinfo运行vw以创建模型,并以人类可读的形式转储模型。

步骤3:像这样呼叫vw-varinfo

vw-varinfo -q AB -c --passes 20 your_data_set_file

vw-varinfo将所有选项(-q ... -c --passes ...)原样传递给vw。仅-q AB用于跨越两个要素名称空间的必不可少。我在上面又添加了一个选项(运行多次),我相信这会带来更好的结果。

该命令将调用vowpal wabbit(vw)训练数据集,并打印输出(我相信您正在寻找):所有功能交互按强度及其相对权重排序。

输入和输出示例

假设您的输入prot.dat包括3种蛋白质之间的3向相互作用:

1.0 protein1/protein2|A a b |B k m
0.6 protein2/protein3|A k m |B b c d
2.2 protein1/protein3|A a b |B b c d

这故意是一个非常简单的示例。 vw对于更大的数据集(例如数百万行,数百个功能)应该没有任何问题,而且,我在示例中更改了交互强度标签。如果在您的情况下,交互是布尔值“是”或“否”,则只需将0(没有交互)或1(存在交互)用作每一行的第一字段。

运行:

vw-varinfo -q AB -c --passes 20 prot.dat

将产生所有可能的交互(忽略名称空间AB输出中的内容)及其权重:

FeatureName        HashVal   MinVal   MaxVal    Weight   RelScore
A^k                 220268     0.00     1.00   +0.3804    100.00%
A^k^B^k             254241     0.00     0.00   +0.3804    100.00%
A^k^B^m              93047     0.00     0.00   +0.3804    100.00%
B^k                 178789     0.00     1.00   +0.1011     26.58%
B^m                  17595     0.00     1.00   +0.1011     26.58%
[... trimmed for brevity ...]
A^m^B^m             141879     0.00     0.00   +0.0000      0.00%
Constant            116060     0.00     0.00   +0.1515      0.00%
A^b                 139167     0.00     1.00   -0.0641    -16.86%
A^b^B^k             204424     0.00     0.00   -0.1233    -32.43%
A^b^B^m              43230     0.00     0.00   -0.1233    -32.43%

表明在该数据中,一般而言,任何相互作用的最强贡献者是:1)仅存在该k特征; 2)该k特征与其自身相互作用(假定两种蛋白质都具有),以及3)k与相互作用m。而最弱的(对蛋白质相互作用的负贡献)是b特征与m特征配对。

这是vw-varinfo上的HOWTO页面

vowpal wabbit从源代码构建(请参见上面的链接),并且可以在Linux(以及可能的其他Unix),Mac OS-X和Windows上运行。

高温超导


这是否直接意味着消除弱相互作用会提高模型的准确性?
马特

不必要。当需要学习更多功能时,精度通常会提高。但是,如果这些功能实际上是噪音,或者太少而无法泛化,则可能会出现。大多数现实生活中的模型都有一些误差成分。更多数据可以提高对模型准确性的信心。
arielf

1

蛋白质相互作用网络可以用无向图表示,其中蛋白质形成节点,它们之间的相互作用为边缘。如果蛋白质相互作用是二进制现象,则边缘也是二进制(零或一个),否则可以使用实数。您可以用数字将这个图表示为一个正方形矩阵,尤其是一个对称矩阵。要查找最重要的特征,可以保留沿交互矩阵特征向量具有最大投影的特征。


该图可能不是二进制的。因为一种蛋白质可以与一种以上的蛋白质相互作用。是否有多个边缘的扩展?
阿尼什(Anish)2012年

那不是我所说的二进制。问题是您是否要捕获交互的强度,或者是否足以对交互的存在进行建模。当然,图模型可以说明任何一对蛋白质之间的相互作用。
Emre 2012年

嗯。我假设当您要求我为蛋白质相互作用创建一个正方形矩阵时,矩阵中的值代表蛋白质之间相互作用的数量。但是,我在这里看不到我们在哪里使用功能。您能详细说明一下吗?
阿尼什(Anish)2012年

特征向量是特征空间中蛋白质的线性组合。
Emre 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.