解决所提出问题的实际方法(一种可能的解决方案)
使用我最喜欢的机器学习工具vowpal wabbit可以直接解决这个问题,它通过-q选项支持二次(交叉)特征。
vowpal wabbit 背景
在我们进入使用细节之前。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
并且不需要显式值。
现在您可以vw
运行-q AB
vowpal_wabbit (可执行文件名为以 ) 开头的命名空间。vowpal_wabbit 将读取数据,学习并为每个特征组合创建一个具有权重的模型,从而导致蛋白质对之间的某种相互作用。在这里,我们将通过vowpal wabbit 附带的 wrapper 实用程序运行它,而不是直接运行,作为我们的最后一步。运行以创建模型,并以人类可读的形式转储模型。A
B
vw
vw-varinfo
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 上运行。
高温高压