在交互模型中寻找最佳特征

机器算法验证 机器学习 统计学意义 特征选择 网络
2022-03-16 01:57:42

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

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

行是蛋白质,列是特征。

我也有一个相互作用的蛋白质列表;例如

Protein3, Protein4  
Protein1, Protein2  
Protein4, Protein1  

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

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

2个回答

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

使用我最喜欢的机器学习工具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 ABvowpal_wabbit 可执行文件名为以 ) 开头的命名空间vowpal_wabbit 将读取数据,学习并为每个特征组合创建一个具有权重的模型,从而导致蛋白质对之间的某种相互作用。在这里,我们将通过vowpal wabbit 附带的 wrapper 实用程序运行它,而不是直接运行,作为我们的最后一步。运行以创建模型,并以人类可读的形式转储模型。ABvwvw-varinfovw-varinfovw

第 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 上运行。

高温高压

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