1

我正在尝试通过利用 contagiodump 上发现的 26,000 个 PDF 样本(干净和恶意)来创建一个 ANN 将 PDF 文件分类为恶意或干净。对于每个 PDF 文件,我使用 PDFid.py 解析文件并返回 42 个数字的向量。然后将 26000 个向量传递到 pybrain;50% 用于训练,50% 用于测试。这是我的源代码:

https://gist.github.com/sirpoot/6805938

在对尺寸和其他参数进行大量调整后,我设法获得了大约 0.90% 的误报率。这是我的输出:

https://gist.github.com/sirpoot/6805948

我的问题是,我有什么明确的方法可以进一步降低误报率吗?我该怎么做才能将利率降低到 0.05%?

4

2 回答 2

2

您可以尝试多种方法来提高神经网络的准确性。

  • 使用更多数据进行训练。这将允许网络从更大的训练样本集中学习。这样做的缺点是,具有较小的测试集会使您的误差测量更加嘈杂。然而,根据经验,我发现 80%-90% 的数据可以用于训练集,其余的用于测试。

  • 增强您的特征表示。我不熟悉 PDFid.py,但它只返回给定 PDF 文件的约 40 个值。可能有超过 40 个特征可能与确定 PDF 是否恶意相关,因此您可以使用包含更多值的不同特征表示来提高模型的准确性。

    请注意,这可能涉及大量工作——特征工程很困难!如果你决定走这条路,我的一个建议是查看模型错误分类的 PDF 文件,并尝试直观地了解这些文件出了什么问题。如果您可以识别出它们都共享的共同特征,您可以尝试将该特征添加到您的输入表示中(给您一个包含 43 个值的向量)并重新训练您的模型。

  • 优化模型超参数。您可以尝试使用从一些合理间隔中随机选择的训练参数(动量、学习率等)和架构参数(权重衰减、隐藏单元的数量等)来训练几个不同的模型。这是进行所谓的“超参数优化”的一种方法,并且与特征工程一样,它可能涉及大量工作。然而,与特征工程不同,超参数优化在很大程度上可以自动并行完成,前提是您可以访问大量处理核心。

  • 尝试更深层次的模型。最近,深度模型在机器学习文献中变得相当“热门”,尤其是在语音处理和某些类型的图像分类方面。通过使用堆叠 RBM、二阶学习方法 (PDF)或不同的非线性(如校正线性激活函数),您可以在模型中添加多层隐藏单元,有时这将有助于提高错误率。

这些是马上想到的。祝你好运 !

于 2013-10-06T20:43:22.710 回答
1

首先让我说我绝不是神经网络方面的专家。但是我玩过一次 pyBrain,我在 while error < 0.001 循环中使用了 .train() 方法来获得我想要的错误率。因此,您可以尝试将它们全部用于该循环的训练并使用其他文件进行测试。

于 2013-10-05T14:11:19.167 回答