处理高度可变的特征集大小

数据挖掘 神经网络 分类 特征工程 特征提取
2022-02-05 18:40:20

我正在尝试使用机器学习进行安全事件分类。我的目标是预测特定事件的结果(真阳性或假阳性)。一个事件中有一组变量,称为 observables。这些可以是 url、IP 地址、文件哈希等(总共 8 种类型)。但是,一个事件可能包含少量的可观察对象,也可能包含大量的。由于我想根据这些可观察值预测结果,因此我的特征大小在长度上有所不同 - 在 1 到 2500 之间。这在数据集的示例中:

['user1', '1.1.1.1', 'explorer.exe', NULL, NULL, NULL ...]
['google.com', 'msword.exe', NULL, NULL, NULL ...]
['user3', '1.1.1.9', 'explorer.exe', 'e0d123e5f316bef78bfdf5a008837577', 'http://google.com, NULL ...]

我该如何处理这种情况?我想尝试分类以及神经网络进行比较。

编辑
我最终使用了词袋方法,因为我提到的“可观察对象”可以解释为文档中的单词。从那里我的案例是一个相对已知的文本分类问题,我使用朴素贝叶斯算法和哈希向量化取得了很好的结果。

2个回答

在考虑您可以使用哪种类型的算法之前,我会考虑如何正确预处理您的数据。根据 8 种可能类型中的每一种可能有多少个可能值(如果我理解正确的话),您可以构建一个 0 和 1 的数据集,它表示每个事件中每个可能值的存在或不存在。

这将导致您拥有一个稀疏矩阵,但这是您可以使用一些工具处理的问题,一个可能很好的例子是这个链接

结论:

  • 我首先会尝试确定您的每种类型是否有固定的可能值(通过按区域创建 ips 组?是否有固定数量的可能 .exe、url...?)
  • 预处理您的数据,使http://google.comgoogle.com具有相同的值(即,通过从 url中删除http:// )
  • 如果您认为可能值的数量不是很大,您可以尝试构建稀疏矩阵

在此之后,您可以考虑应用哪种算法,而不是从一开始就为神经网络疯狂。

我同意德国 CM,您的数据中有一些结构,即使它不是完全结构化的。因此,首要任务是将数据转换为机器学习可以利用的特征。这是典型的特征工程:想法是尝试以易于为算法提供有用指示的方式组织数据中不同类型的元素。许多学习算法可以处理缺失值,因此缺少特定类型的信息不一定是问题。当然,很难给出准确的建议,因为这个阶段需要专业知识。

请注意,从技术上讲,有些方法可以将这种可变长度序列作为输入,但如果算法必须自己猜测所有内容,那么它就不太可能很好地工作。