使用决策树对 IP 地址进行分类

机器算法验证 r 分类 大车
2022-04-03 18:17:02

我正在处理一个使用 IP 地址作为输入的分类问题,并且我试图找出哪些 IP 地址或子网可能属于垃圾邮件发送者。我的数据由 IP 地址中的四个八位字节和一个标签组成:SPAM 或 OK。

对于决策树来说,这感觉是一个很好的问题,但我发现大多数决策树算法都认为变量的顺序是可互换的。例如,ctreefromparty可能会输出解释为的规则

IF octet1 == 192 && octet4 == 190 THEN label => SPAM

但是对于 IP 地址,变量的顺序很重要。也就是说,八位字节 2 必须在八位字节 1 之后考虑,八位字节 3 必须在八位字节 2 之后考虑,依此类推,以产生如下规则

IF octet1 == 206 THEN label => OK

IF octet1 == 193 && octet2 == 64 && octet3 == 11 THEN label => SPAM

这是什么类型的决策树模型,什么算法/工具可以在这里提供帮助?我可以使用某种变体吗?我更喜欢坚持使用R。

4个回答

作为一名邮政局长,我发现这不仅是一个非常酷的问题,而且是我工作中的日常问题。所以我有几个问题要问你:

  • 您的数据集是否仅包含 IPv4 地址?

  • 您的数据集是由“已知”垃圾邮件地址块组成,还是仅包含可能属于僵尸网络的地址?

  • 除了将 IP 地址用作有序元组之外,您还可以将它们用作整数。有人以这种方式使用PATRICIA

我的 R-Fu 很低,所以我帮不了你:(

树的一般规则是,您不应该期望它们按属性顺序执行任何操作,因为它们无法“看到”它。此外,属性应该是对象的某种“正交”描述。

因此,我认为您应该使用一些 IP 描述符,例如国家/地区、提供商、商业/家庭(还可能将其与您拥有的有关消息的其他信息混合在一起)。
或者完全放弃学习,按照adamo和Henry的建议做一些前缀树,并尝试找到具有显着垃圾邮件和非垃圾邮件差异的节点,并从中推断出一些东西。

诚然,距您提出这个问题已有两年...,但是这篇文章太完美了,不能在这里分享。这是您的答案和算法。好吧,至少在他们成功的时候,虽然如果你查看作者,他们有个人网页,在同一领域有更多的工作。

这就是微软几年前做或开始做的方式:UDMAP。

Yinglian Xie, Fang Yu, Kannan Achan, Eliot Gillum+, Moises Goldszmidt, Ted Wobber。IP 地址有多动态? ” 微软研究院,硅谷微软公司。 research.microsoft.com/pubs/63680/sigcomm07-onefile.pdf

不要被文章的标题所迷惑,尽管他们确实有点关注这一点——他们试图识别动态 IP 地址背后的原因是垃圾邮件发送者——他们在最近的作品中跟进了(并建立在这相当多,尽管他们在这里有一些聪明的想法) - 所有这些都发布在领导作者的页面上。

听起来你在那里用核弹敲打鼹鼠,为什么不只是:

1.) 对所有 IP 地址进行排序 2.) 在所有 IP 地址上做一个滑动窗口,如果其中一个被标记为垃圾邮件,则在它之前的那些获得与它们相关联的概率,而在它之后的那些也是如此 3.)使您分配的概率权重随着距离的某些函数而下降,并且可能在其中一个八位组用完时停止分配。

这样,如果 xxx.xxx.xx.125 介于 .124 和 .126 之间,并且两者都被标记为垃圾邮件发送者,但事实并非如此,则 .125 应该从两者中获得一些垃圾邮件值。

如果您希望垃圾邮件“值”向上传播八位字节树,我想您可以在每个八位字节级别执行类似的滑动操作。

无论如何,这听起来像是 3 或 4 种类型,以及 3 或 4 次这种类型的遍历,可能可以处理。