Python + 散点图 + 其他废话

标签 python math statistics machine-learning data-extraction

我每周都会收到几封电子邮件,详细说明来 self 参与的网络的滥用事件。这些通常包含:

a) 被视为已泄露的 URL。

b) 被视为垃圾邮件的电子邮件的副本。

其中大部分都是自动化的,并且通常不能很好地遵循 ARF。

我需要的是自动数据提取,但我正在绞尽脑汁,因为当电子邮件的结构不断变化且不可预测时,我不太确定如何做到这一点。

我现在想要提取的是:

a) 垃圾邮件的原始邮件服务器(以及 UID/用户名,显示在大多数 Exim/Qmail 收到的 header 中)

b) 域名

c) 受感染网站的 URL

d) 电子邮件地址

我可以使用一些正则表达式和一些其他垃圾毫不费力地做到这一点,但基本上它是不可靠的。通过解析电子邮件正文,我最终可能会得到 5 个 IP、3 个 URL 和 3 个电子邮件地址,并且我不确定如何自动选择最合适的。

我需要一些关于我应该研究/寻找什么的指导,以便对正确的数据是什么做出最好的自动判断。我有超过 100,000 封过去的报告电子邮件,因此不缺少测试数据,我只需要知道如何开始以及应该研究什么来解决这个问题。

感谢您花时间阅读本文,如果我遗漏了某些内容或还有其他问题,请告诉我:)

仅供引用,我考虑了以下内容:

  • 插入来自该发件人的几封已分类的过去电子邮件,然后对新电子邮件进行设置差异。除了使用 python 集 + 列表对一些算法进行硬编码之外,我不知道最好的方法。

  • 将我之前的所有数据绘制到各种形式的散点图/直方图上。然后,我将能够根据现有数据测试每封新电子邮件,并挑选出图表中最不常见的详细信息。我再次不确定应该在这里寻找哪些库。

  • 使用样本数据对以前见过的项目进行权重。 IE。如果我放出一页包含 1000 个以前的样本,并“标记”永远不会正确的 IP,并标记可能正确的 IP。

  • 编写大量涉及套接字查找的代码来解析主机名并将项目匹配在一起。我知道这运行起来会很费劲,但很可能会得到最好的结果。

干杯!

最佳答案

您已经考虑过一些想法,您的想法是正确的。

首先,您需要构建一个“真实”或已正确分类的示例数据集,其中列出了有问题的 IP、URL、电子邮件地址等。因此,定义一些类别和一些相关数据并仔细研究它。这并不好玩,但却是必要的。

此时,您可以决定是否只想使用贝叶斯并看看它是如何工作的,或者您可以进行特征工程并尝试其他方法。

贝叶斯分类是一个黑匣子,您将一堆(例如 1/2 或 2/3)测试数据输入其中,然后在其余部分尝试它以查看经过训练的分类器如何工作。如果你得到的结果在 90% 以上,那么你基本上就完成了,只要它足够快。您应该输出的一项功能是电子邮件中的每个“ token ”。按空格分割。您可以从这里开始:

http://nltk.googlecode.com/svn/trunk/doc/api/nltk.classify-module.html

如果您决定进行特征工程,那么现在您就进入了探索阶段。每当您进行机器学习或模式分类时,您都需要定义可以从源数据中提取的“特征”。正如您所说,您可以使用正则表达式来获取电子邮件地址、IP 和 URL。这些都是出色的功能。您还可以找到哪些其他功能?也许是一些时间戳(是否存在时间关系?谁知道?)。某些电子邮件 header 可能有用,例如 MIME 版本、SenderID、ContentType、X-Spam-Level、字符集等。

一旦您决定了您个人用来帮助确定正在发生的情况的一些功能,那么您可以使用上面列出的相同贝叶斯分类器来教计算机如何做出这些决定。

定义了一堆新功能后,您可以在 50% 上运行训练,然后对照其他 50% 评估结果,看看它的表现如何。如果您获得高准确度,那就太好了!你完成了。如果它仍然很低,您将需要定义其他功能来帮助分类器正确区分。只有你才能决定多高是高,多低是低。

关于Python + 散点图 + 其他废话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9355424/

相关文章:

algorithm - 根据 a、b 和 a^n 以 p 为模计算 b^n

algorithm - 实现 Velicer 的 MAP 标准

python - 为什么来自 scipy.stats.bartlett 的 Bartlett 测试将 nan 作为输出?

python - 在代理服务器后面运行 selenium

python - 带有 Python : How to optimize my implementation? 的 TCP 服务器

python - 从二叉树获取列表,TypeError

math - XZY 变换矩阵到 XYZ

Python将整数四舍五入到下一百

android - 通过 Python 执行 Android 命令并将结果存储在列表中

python - 使用自定义 pdf 时 stats.rv_continuous 变慢