如何对24,000个类别的类别进行编码?


10

我目前正在研究基因组学的逻辑回归模型。我想作为协变量包括的输入字段之一是genes。大约有24,000个已知基因。在计算生物学中,这种程度的可变性具有许多功能,因此需要成千上万个样本。

  • 如果我LabelEncoder()那些24K基因
  • 然后OneHotEncoder()他们...

24,000列是否会使我的keras培训时间对于2.2 GHz四核i7 CPU不合理?

如果是这样,我可以采用其他方法进行编码吗?

我应该以某种方式尝试将模型的一部分专用于此功能吗?

这是否意味着我需要24K输入节点?


为什么不使用VAE学习表示形式?我确实认为在基因序列学习中,与仅使用简单的PCA相比,表示形式(就像在NLP中所做的那样)将具有很大的意义...
n1tk

Answers:


10

是的,对24k要素使用一键编码需要24k输入节点。但是,对于Keras(或任何其他深度学习库)来说,这应该不是问题。自然语言处理通常对同一词汇库中具有词汇量的单词使用一键编码。

如果使用“深度”模型,则隐藏层之一应注意减小数据的维数。通常不需要单独的预处理步骤。

培训时间不应过分合理。


谢谢您的健全性检查。
HashRocketSyntax

我注意到您提到了一个层,而不是sklearn中的PCA。您会推荐自动编码器作为降维形式吗?
HashRocketSyntax

2
您提到您使用Keras,因此您正在使用某种神经网络,对吗?如果网络中某个地方的节点数少于输入的层数,则网络会自动执行降维。我假设您只有一个(或少量)回归输出。因此,一种简单的方法是拥有输入层(d = 24k),一个或多个中间层(d = 1k或类似的东西)和输出层(d = 1)。
C. Yduqoli

尽管类似大小的图层在NLP中很常见,但在CPU上训练现代NLP模型通常是不合理的,但强大的GPU实际上对于小型“玩具”模型之外的任何事物来说都是NLP的赌注。另一方面,这并不是一个很大的障碍,因为物理和云GPU都非常容易获得。
Peteris

6

分类变量的实体嵌入原始寻呼机)在这里是一种非常合适的方法。在这里这里阅读。我实际上已经从零开始放置了一些代码,并完成了完整的运行实现,请参阅此git repo。使用神经网络可以轻松地处理非常高的基本分类变量。我不会列出OHE的利弊,只是Google而是它的主要缺点之一。当具有非常高的基本分类变量时,它会不必要地急剧增加您的特征空间,我认为这并不理想。更重要的是,据我所知,如果存在这样的关系,OHE不会解释类别之间的语义关系!但是,实体嵌入是NLP中单词嵌入的一个概念,正在学习的用于对类别进行编码的权重可能会捕获类别内的关系。


3

通常,应将基因数量减少到更小的有意义的特征集。然后,可以在模型中使用简化的功能集。例如,主成分分析(PCA)是最常见的还原技术之一,已用于基因表达数据

学习机集成在生物学和医学数据:原则,实践和机会”通过Zitnika等。涵盖了基因的多种特征工程技术。


谢谢你。将特征空间减少到相关基因(以及wgs中的调控区)的数量。
HashRocketSyntax

问您建议采用哪种降维方法是否太过麻烦了:PCA,流形,聚类/密度,某种神经网络?
HashRocketSyntax
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.