使用 NN 对时间序列数据进行多类分类

数据挖掘 神经网络
2022-02-15 11:48:16

我有以下数据集,我正在考虑使用 RNN/LSTM 对协议进行分类。数据包含来自数据包捕获的特征,只有两个提供的字段:设备 MAC 地址的 OUI 和特定协议的数据包的到达间隔时间 (IAT)。

例如,从特定设备类型的角度来看,http 和 ntp 的标记数据如下所示:

# MAC, ConnectivityIAT  -> protocol     
ff:f1:f2, 10, -> http
ff:f1:f2, 20, -> http
ff:f1:f2, 30, -> http
ff:f1:f2, 0, -> http

ff:f1:f2, 3, -> ntp
ff:f1:f2, 6, -> ntp
ff:f1:f2, 9, -> ntp

任务是在以下情况下预测正确的类别:

ff:ff1:f2, 10 -> ?

可见。

问题:

  • 如何将 OUI 的分类值转换为数字实体
  • 如何使用 NN 解决方案?
2个回答

如何使用 NN 接近解决方案?

鉴于您的数据,看起来 RNN/LSTM 并不是最明智的选择。

看起来您有两个功能和一个二进制输出。RNN/LSTM 对可变长度输入很有用,否则,它们就有点矫枉过正了。

此外,在使用深度学习方法之前,请确保您拥有合理数量的数据。他们通常有很多参数要训练,如果你没有足够的数据点,这可能很难做到。

如果您想坚持使用 NN,我会说常规的多层感知器可能会完成这项工作。如果您对其他选项持开放态度,我会为这个特定问题尝试决策树。

如何将 OUI 的分类值转换为数字实体

您可以使用 one-hot 编码。那里有很多实现(即scikit-learn),或者你可以自己做。

您可以使用LabelEncoder转换 OUI 的分类值。看起来您有两个功能(OUI 和 IAT)和固定数量的类/输出。您可以使用 MLP 分类器来解决此问题。在 Keras 中:

model = Sequential()

model.add(Dense(32, input_shape=(num_features,)))
model.add(Activation('relu'))
model.add(Dense(num_classes))
model.add(Activation('softmax'))

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

这只是一个例子,最好创建一个更深的架构并添加正则化(例如 l1/l2 权重惩罚或 drop-out)以防止过度拟合。