scikit-learn 多维特征
scikit-learn multi dimensional features
我有一个关于 scikit-learn 的问题。
是否可以将多维特征列表合并为一个特征向量。
例如:
我有一个应用程序分析的结果,我想用一个特征向量来表示一个应用程序。
在网络流量的情况下,分析结果如下所示:
traffic = [
{
"http_body": "http_body_data", "length": 1024
},
{
"http_body2": "http_body_data2", "length": 2048
},
... and many more
]
因此流量列表中的每个字典都描述了特定应用程序的一个网络activity。
我想生成一个特征向量,其中包含一个应用程序的所有这些信息,以便能够根据各种应用程序的分析结果生成一个模型。
如何使用 scikit-learn 执行此操作?
提前致谢!
如果每个应用程序发送相同长度的响应(例如第一个的长度为 1024,第二个 - 2048 等),您可以将所有结果连接到一个向量中。
例如,如果流量中的响应是序列化列表(例如 json)。
def merge_feature_vector(traffic):
result = []
for id, data in enumerate(traffic):
result.extend(json.loads(data['http_body%s' % id]))
return result
另一种方法是使用sklearn.feature_hasher。
例如
def encode_traffic(traffic):
result = {}
for id, data in enumerate(traffic):
result['html_body%s' % id] = data['html_body%s' % id]
return result
...
features = [encode_traffic(traffic) for traffic in train]
h = FeatureHasher(n_features=10)
features = h.fit_transform(features)
features.toarray()
clf = RandomForestClassifier(n_estimators=100)
clf.train(features)
顺便说一下,这主要取决于您在 http_data
中拥有的内容
你不能有非数字特征,特征的值应该是一个数字。
如果你有:ip:127.0.0.1 ip:192.168.0.1 ip:220.220.220.220,你会怎么做?
您创建三个功能:ip_127.0.0.1、ip.192.168.0.1 和 ip.220.220.220.220,如果 ip 的值为 127.0.0.1,则将第一个的值设置为 1,将另外两个设置为零。
如果 ip:val 可以说超过 10 个值,您只需为最常见的特征创建 10 个特征,然后创建一个 ip_other 特征并为所有其他具有另一个 IP 地址的样本设置该特征。
我有一个关于 scikit-learn 的问题。
是否可以将多维特征列表合并为一个特征向量。 例如: 我有一个应用程序分析的结果,我想用一个特征向量来表示一个应用程序。 在网络流量的情况下,分析结果如下所示:
traffic = [
{
"http_body": "http_body_data", "length": 1024
},
{
"http_body2": "http_body_data2", "length": 2048
},
... and many more
]
因此流量列表中的每个字典都描述了特定应用程序的一个网络activity。
我想生成一个特征向量,其中包含一个应用程序的所有这些信息,以便能够根据各种应用程序的分析结果生成一个模型。
如何使用 scikit-learn 执行此操作?
提前致谢!
如果每个应用程序发送相同长度的响应(例如第一个的长度为 1024,第二个 - 2048 等),您可以将所有结果连接到一个向量中。 例如,如果流量中的响应是序列化列表(例如 json)。
def merge_feature_vector(traffic):
result = []
for id, data in enumerate(traffic):
result.extend(json.loads(data['http_body%s' % id]))
return result
另一种方法是使用sklearn.feature_hasher。 例如
def encode_traffic(traffic):
result = {}
for id, data in enumerate(traffic):
result['html_body%s' % id] = data['html_body%s' % id]
return result
...
features = [encode_traffic(traffic) for traffic in train]
h = FeatureHasher(n_features=10)
features = h.fit_transform(features)
features.toarray()
clf = RandomForestClassifier(n_estimators=100)
clf.train(features)
顺便说一下,这主要取决于您在 http_data
中拥有的内容你不能有非数字特征,特征的值应该是一个数字。
如果你有:ip:127.0.0.1 ip:192.168.0.1 ip:220.220.220.220,你会怎么做? 您创建三个功能:ip_127.0.0.1、ip.192.168.0.1 和 ip.220.220.220.220,如果 ip 的值为 127.0.0.1,则将第一个的值设置为 1,将另外两个设置为零。
如果 ip:val 可以说超过 10 个值,您只需为最常见的特征创建 10 个特征,然后创建一个 ip_other 特征并为所有其他具有另一个 IP 地址的样本设置该特征。