减少深度学习模型的输入维度

时间:2018-04-15 02:31:44

标签: python-3.x machine-learning deep-learning keras dimensionality-reduction

我正在学习深度学习课程,我有一个用keras建立的模型。在对分类数据进行数据预处理和编码之后,我得到一个形状(12500,)的数组作为模型的输入。此输入使模型训练过程变得更慢且滞后。有没有一种方法可以最小化输入的维数?

输入是地理坐标,天气信息,时间,距离的分类,我试图预测两个地理坐标之间的旅行时间。

原始数据集有8个功能,其中5个是绝对的。我使用onehot编码来编码上面的分类数据。地理坐标有6000个类别,天气15个类别时间有96个类别。同样,在使用onehot编码进行编码后,我得到了一个形状(12500,)的数组作为模型的输入。

2 个答案:

答案 0 :(得分:3)

当类别数量很大时,单热编码变得效率太低。这种情况的一个极端例子是用自然语言处理句子:在这个任务中,词汇通常有100k甚至更多的单词。显然,将10个单词的句子翻译成set concealcursor=n set conceallevel=3 hi AsteriskBold ctermfg=Green cterm=bold syn match Asterisks contained "**" conceal syn match AsteriskBold "\*\*[^*]\+\*\*" contains=Asterisks 矩阵,几乎全部都是零,将浪费内存。

研究使用的是嵌入层,它可以学习分类特征的密集表示。在单词的情况下,它被称为单词嵌入,例如word2vec。这种表示要小得多,类似于100维,并使网络的其余部分能够有效地使用100-d输入向量,而不是100000-d向量。

在keras中,它是由Embedding图层实现的,我认为它可以完美地适用于您的[10, 100000]geo功能,而其他图层则可能正常工作 - 编码。这意味着您的模型不再是time,而是有几个输入,其中一些输入穿过嵌入层。主模型将采用学习表示的连接并进行回归推理。

答案 1 :(得分:1)

您可以使用PCA进行降维。 它删除了与共同相关的变量,并确保数据中存在高差异。

Wikipedia PCA

Analytical Vidya PCA