使用Pybrain检测恶意PDF文件

时间:2013-10-03 06:55:15

标签: python neural-network pybrain

我正在尝试通过利用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%?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

  • 尝试更深层次的模型。深度模型最近在机器学习文献中变得非常“热门”,特别是对于语音处理和某些类型的图像分类。通过使用堆叠RBM,second-order learning method (PDF)或不同的非线性(如rectified linear activation function),您可以为模型添加多层隐藏单位,有时这有助于提高错误率。

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

答案 1 :(得分:1)

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