解决提出的问题的实际方法(一种可能的解决方案)
使用我最喜欢的机器学习工具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-varinfo
vowpal 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
将产生所有可能的交互(忽略名称空间A
和B
输出中的内容)及其权重:
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上运行。
高温超导