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

数据挖掘 机器学习 喀拉斯 scikit-学习
2021-09-26 04:51:25

我目前正在研究基因组学的逻辑回归模型。我想作为协变量包含的输入字段之一是genes. 大约有 24,000 个已知基因。在计算生物学中有许多具有这种可变性水平的特征,并且需要数十万个样本。

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

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

如果是这样,我可以采用不同的编码方法吗?

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

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

3个回答

是的,在 24k 特征上使用 one-hot 编码需要 24k 输入节点。然而,这对于 Keras(或任何其他深度学习库)来说应该不是问题。自然语言处理通常对具有相同词汇量的单词使用 one-hot 编码。

如果您使用的是“深度”模型,则其中一个隐藏层应该负责降低数据的维数。通常不需要单独的预处理步骤。

培训时间不应不合理。

分类变量的实体嵌入原始寻呼机)将是一种非常合适的方法。阅读这里,或这里我实际上已经从这里和那里放置了一些代码并进行了完整的运行实现,请参阅这个git repo. 这很容易使用神经网络处理非常高的基数分类变量。我不会列出 OHE 的优缺点,你只需用谷歌搜索它,但它的主要缺点之一就是它。当具有非常高的基数分类变量时,它是否会不必要地急剧增加您的特征空间,我认为这并不理想。更重要的是,据我所知,OHE 不考虑类别之间的语义关系(如果存在这种关系)!然而,实体嵌入是 NLP 中词嵌入的一个概念,正在学习的对类别进行编码的权重可能会捕获类别内的关系。

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

Zitnika 等人的“用于将数据整合到生物学和医学中的机器学习:原则、实践和机会”涵盖了基因的多种特征工程技术。