用于NN的DNA数据输入,一种热编码

时间:2019-01-24 10:19:43

标签: python pandas scikit-learn neural-network artificial-intelligence

面对一个问题,这对我来说似乎是一项艰巨的任务。拥有庞大的具有A,G,T,C结构的DNA数据集,有4种完全不同的类别作为输入。看起来像:

1 2 3 4 5 6 7 8 9 … 1.000+
A A G G G G G G G
G G C C C C C C C
T T C C C C C C C
G G A A A A A A A
T T C C C C C C C
C C T T T T T T T
T T C C C C C C C
…
30.000+

想询问有关数据处理的建议。它应该表示为数字还是具有如此大尺寸的一种热编码? [0,0,0,1]的种类为A,[0,0,1,0]的种类为G等,或者仅是0、1、2、3?谈到NN-希望从简单的一门手开始,再到现代的再深入。熊猫,sklearn库很容易以几行代码完成典型的数值表示,但是对于如此庞大的数据集,将其转换为一种热编码似乎是一项有趣的任务。通过使用(1019,27041)形状中的pd.get_dummies,我们获得(1019,54082),并且不明白为什么当我们有4个不同的字母时形状仅增加2倍。谢谢!

1 个答案:

答案 0 :(得分:3)

2倍增长而不是4倍增长是因为每个系列中只有2个类别。 (在您的示例中,第一行中的A和G,第二行中的G和C,第三行中的T和C,依此类推)

下面的示例将更好地理解其他列的数量

In [38]: df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'], 'C': [1, 2, 3]})                                                                       

In [39]: df                                                                                                                                                    
Out[39]: 
   A  B  C
0  a  b  1
1  b  a  2
2  a  c  3

In [40]: pd.get_dummies(df)                                                                                                                                    
Out[40]: 
   C  A_a  A_b  B_a  B_b  B_c
0  1    1    0    0    1    0
1  2    0    1    1    0    0
2  3    1    0    0    0    1