用于大多数零值数据的深度神经网络

数据挖掘 深度学习 神经网络 分类 rnn 卷积神经网络
2021-09-28 09:37:11

我有一些具有大约 1000 个特征的数据。问题是大多数特征都是 0。在每一行中,通常大约 100 个特征有值,其余特征是 0。下面给出了一个示例数据

ID  f1  f2  f3 ........ f1000  label
 1  45  0    0            32     1
 2  23  0    0            0      2
 3  0   40   0            0      1
 4  0   0    23           24     3
 5  78  0    64           0      2

如您所见,每行中有很多 0。我应该使用哪种深度神经网络方法?我在考虑 RNN 或 CNN,但我不确定这些是否是最佳选择。我在考虑一些忽略零值的方法,即在计算中不考虑零值。我认为 RNN 可以做到这一点。但我不太确定。

3个回答

有一种误解认为,如果您有大量数据,深度学习通常是合适的,从您的评论来看,这就是您的情况。这通常是一个不准确的信念。

深度学习(包括 CNN 和 RNN)是具有数千个参数的复杂模型,能够对复杂关系进行建模。这种关系通常“隐藏”在大量数据中,但情况并非总是如此。您可能拥有从简单分布生成的数据,因此即使您的样本量很大,也不需要复杂的模型来近似。

这是一个虚构的例子:假设你有函数y=a*x1 + b*x2 + c*x3 + d*x4. 该函数需要所有自变量和因变量 y 之间的线性关系。您可以对该函数进行一百万次采样,但您仍然可以获得可以通过线性回归近似的数据。

谈到你的情况:要确定你需要什么样的算法,你首先需要查看你的数据,也许是通过执行统计分析。那我建议从简单的开始。首先尝试逻辑回归。模型在验证中是否令人满意?如果没有,请尝试决策树。或浅层神经网络。始终验证(您有大量数据,因此验证应该很容易!)。我(不可否认)的猜测是,您的分类问题可以用比 DNN 简单得多的算法来解决。但当然是 YMMV。

FWIW,这是与您的情况类似的另一个答案还有一个

为什么要使用深度学习?看来您已经拥有大量功能了。所以也许尝试使用随机森林?他们非常擅长处理异常值(在你的情况下,无用的 0 值)。

CNN 非常适合处理二维输入数据,例如图片。在处理时间序列时应该使用 RNN。在我看来,在处理抽象数据时应该使用深度学习。

我不明白你为什么决定使用 CNN 或 RNN?如果需要使用深度学习,这个问题可以通过 ANN 来解决。CNN 擅长图像识别任务。RNN 擅长时间序列分析。我建议你使用一些机器学习算法。他们可能就足够了。您还可以使用梯度提升方法。希望这有帮助。