Shl*_*rtz 2 python machine-learning neural-network deep-learning keras
使用Keras,我想构建一个 LSTM 神经网络来分析我系统中的用户行为。我的功能之一是包含用户 IP 地址的字符串,可以是 IPv4 或 IPv6。
正如我所见,我需要嵌入地址,以便将其用作功能。在Keras 文档中没有明确的解释如何做这样的事情。
什么是一个好的开始?
在您的模型中对 IP 地址进行编码的最佳方式取决于它们与您的问题相关的语义。有几种选择:
这种方式假设 IP 地址之间根本没有关系。1.2.3.4
被假定为从不同1.2.3.5
的255.255.255.255
。为了防止有 2^32 个特征,您只需将训练数据中的 IP 地址编码为特征,并将新 IP 视为未知。实现这一目标的一个方法是sklearn
的LabelBinarizer
:
train_data = ['127.0.0.1', '8.8.8.8', '231.58.91.112', '127.0.0.1']
test_data = ['8.8.8.8', '0.0.0.0']
ip_encoder = LabelBinarizer()
print('Train Inputs:\n', ip_encoder.fit_transform(train_data))
print('Test Inputs:\n', ip_encoder.transform(test_data))
Run Code Online (Sandbox Code Playgroud)
这打印:
Train Inputs:
[[1 0 0]
[0 0 1]
[0 1 0]
[1 0 0]]
Test Inputs:
[[0 0 1]
[0 0 0]]
Run Code Online (Sandbox Code Playgroud)
注意One-hot encoding 和 dummy encoding之间的区别。
在这里,您在 IP 中的每个位使用一个功能。
好处:
缺点:
1.1.1.1
并1.1.1.2
检测该特定子网,从而也将其0.1.1.1
视为该子网的 IP。总的来说,这种方法需要谨慎对待。
如果不同 IP 的数量太多而无法为每个 IP 创建新特征,您可以检查每个 IP 是否真的足够重要以合并到模型中。例如,您可以检查 IP 的直方图。在训练数据中只有少数样本的 IP 可能值得忽略。只有少数样本,模型可能会在这些 IP 上过度拟合或完全忽略它们。因此,您可以对训练数据中的前 1000 个常用 IP 进行单热编码,并为所有其他 IP 添加一项功能。同样,您可以尝试进行一些数据预处理并根据 IP 的位置等对 IP 进行聚类。
对 IPv4 使用单个 int32 功能或四个 int8 功能可能很诱人。这是一个坏主意,因为它允许模型对 IP 进行算术运算,例如1.1.1.1 + 2.2.2.2 = 3.3.3.3
.
这是您在问题中链接的方式(https://keras.io/layers/embeddings/)。这些嵌入用于Word 嵌入,应在句子/文本上进行训练。它们通常不应用于编码 IP。
归档时间: |
|
查看次数: |
4533 次 |
最近记录: |