发布于 2018-01-15 09:49:44
在模型中编码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))这些指纹:
Train Inputs:
[[1 0 0]
[0 0 1]
[0 1 0]
[1 0 0]]
Test Inputs:
[[0 0 1]
[0 0 0]]注意单热编码和虚拟编码之间的区别。
使用32或128个特性
在这里,您可以在IP中使用每比特一项功能。
优势:
缺点:
1.1.1.1和1.1.1.2的第2和第3部分来检测这个特定的子网,从而将0.1.1.1作为这个子网的IP来对待。总的来说,需要认真对待这一做法。
单热编码频繁IP
如果不同IP的数量太高,无法为每个IP创建一个新特性,则可以检查每个IP是否真的足够重要,可以合并到模型中。例如,您可以检查IP的直方图。在培训数据中只有少数几个样本的IPs可能值得忽略。只有几个样本,该模型可能会过度适用于这些IP,或者完全忽略它们。因此,您可以对培训数据中最常见的1000个in进行一次热编码,并为所有其他in添加一个功能。类似地,您可以尝试进行一些数据预处理,并根据IP的位置等对其进行聚类。
使用数值输入
对于一个int32特性或四个int8特性,使用IPv4可能很有诱惑力。这是个坏主意,因为它允许模型在IP(如1.1.1.1 + 2.2.2.2 = 3.3.3.3 )上进行算术运算。
字嵌入
这就是您在问题(https://keras.io/layers/embeddings/)中链接到的方式。这些嵌入是针对字嵌入的,应该对其进行句子/文本方面的培训。通常不应该使用它们来编码IP。
发布于 2022-05-21 11:59:36
您可以使用python的图书馆。
通过使用库,可以使用以下方法将IP地址转换为整数值:
>>> str(ipaddress.IPv4Address('192.168.0.1'))
'192.168.0.1'
>>> int(ipaddress.IPv4Address('192.168.0.1'))
3232235521https://stackoverflow.com/questions/48259511
复制相似问题