如何表示神经网络的 DNA 序列?
How to represent DNA sequences for neural networks?
我想构建一个神经网络来对 Python 中 DNA 序列中的剪接点进行分类。现在,我只有字符串形式的数据(例如,"GTAACTGC")。
我想知道以我可以用神经网络处理的方式对其进行编码的最佳方式。我的第一个想法是将每个字母分配给一个整数值,但这感觉很幼稚。另一个想法是为每个位置设置四个二进制指示符,分别对应 A、T、G 或 C。我也不确定这是否有效。
解决这个问题的最佳方法是什么?之前,我只是使用数值,但从未使用过像 DNA 序列这样的字符串。
编辑:目前,我只关注映射。对于阅读本文的任何人,请尝试查看 this paper;它确实帮助了我一些指示。
为什么不学习每个碱基的数值表示?
这是 Neural Machine Translation, where we seek to encode "words" with a meaning as (naively) numbers. The core idea is that different words should not be represented with simple numbers, but with a learned dense vector. The process of finding this vector representation is called embedding 中的常见问题。
在这种情况下,彼此关系更密切的碱基可能在 n 维 space 中具有更接近彼此的向量表示(其中 n 是向量的大小)。这是一个简单的概念,第一次可能很难形象化。您选择的嵌入大小(一个超参数)可能应该很小,因为您只嵌入了四个参数之一(尝试大小为 2-5)。
作为一些大小为 4 的嵌入映射的示例(数值与此示例无关):
G -> [1.0, 0.2, 0.1, 0.2]
A -> [0.2, 0.5, 0.7, 0.1]
T -> [0.1, 0.2, 1.0, 0.5]
C -> [0.4, 0.4, 0.5, 0.8]
生成和优化嵌入的确切技术本身就是一个话题;希望这个概念对你有用。
备选
如果您想避免嵌入(因为您的 "vocabulary" 限制为 4),您可以为每个基数分配标量值。如果你这样做,你应该 规范化 你在 -1 和 1 之间的映射。
基于您提到的二进制指标的一个想法是对 1024x1024(例如)图像进行编码,该图像是位图,通常表示 1048576 位。对于图像中的每一行,您可以成对查看位置或位并按如下方式编码:
0 0 -> G
0 1 -> A
1 0 -> T
1 1 -> C
每行应产生 512 个数据值,或每张图像 524288 个数据值。
对于神经网络,我认为您可以合并卷积神经网络或 CNN。另一个想法可能是在编码时避免图像的外边缘,以便该过程中使用的任何内核都将完全覆盖活动(中央)数据区域。也许这不是最重要的变化,但也许值得与编码到图像边缘和角落区域的数据映射进行比较。
我想构建一个神经网络来对 Python 中 DNA 序列中的剪接点进行分类。现在,我只有字符串形式的数据(例如,"GTAACTGC")。
我想知道以我可以用神经网络处理的方式对其进行编码的最佳方式。我的第一个想法是将每个字母分配给一个整数值,但这感觉很幼稚。另一个想法是为每个位置设置四个二进制指示符,分别对应 A、T、G 或 C。我也不确定这是否有效。
解决这个问题的最佳方法是什么?之前,我只是使用数值,但从未使用过像 DNA 序列这样的字符串。
编辑:目前,我只关注映射。对于阅读本文的任何人,请尝试查看 this paper;它确实帮助了我一些指示。
为什么不学习每个碱基的数值表示?
这是 Neural Machine Translation, where we seek to encode "words" with a meaning as (naively) numbers. The core idea is that different words should not be represented with simple numbers, but with a learned dense vector. The process of finding this vector representation is called embedding 中的常见问题。
在这种情况下,彼此关系更密切的碱基可能在 n 维 space 中具有更接近彼此的向量表示(其中 n 是向量的大小)。这是一个简单的概念,第一次可能很难形象化。您选择的嵌入大小(一个超参数)可能应该很小,因为您只嵌入了四个参数之一(尝试大小为 2-5)。
作为一些大小为 4 的嵌入映射的示例(数值与此示例无关):
G -> [1.0, 0.2, 0.1, 0.2]
A -> [0.2, 0.5, 0.7, 0.1]
T -> [0.1, 0.2, 1.0, 0.5]
C -> [0.4, 0.4, 0.5, 0.8]
生成和优化嵌入的确切技术本身就是一个话题;希望这个概念对你有用。
备选
如果您想避免嵌入(因为您的 "vocabulary" 限制为 4),您可以为每个基数分配标量值。如果你这样做,你应该 规范化 你在 -1 和 1 之间的映射。
基于您提到的二进制指标的一个想法是对 1024x1024(例如)图像进行编码,该图像是位图,通常表示 1048576 位。对于图像中的每一行,您可以成对查看位置或位并按如下方式编码:
0 0 -> G
0 1 -> A
1 0 -> T
1 1 -> C
每行应产生 512 个数据值,或每张图像 524288 个数据值。
对于神经网络,我认为您可以合并卷积神经网络或 CNN。另一个想法可能是在编码时避免图像的外边缘,以便该过程中使用的任何内核都将完全覆盖活动(中央)数据区域。也许这不是最重要的变化,但也许值得与编码到图像边缘和角落区域的数据映射进行比较。