【问题标题】:scikit-learn multi dimensional featuresscikit-learn 多维特征
【发布时间】:2016-02-25 10:35:37
【问题描述】:

我有一个关于 scikit-learn 的问题。

是否可以将多维特征列表合并为一个特征向量。 例如: 我有应用程序分析的结果,我想用一个特征向量表示一个应用程序。 如果是网络流量,分析结果如下:

    traffic = [
{
"http_body": "http_body_data", "length": 1024
}, 
{
"http_body2": "http_body_data2", "length": 2048
},
 ... and many more
]

因此,流量列表中的每个字典都描述了特定应用程序的一个网络活动。

我想为一个应用程序生成一个包含所有这些信息的特征向量,以便能够从各种应用程序的分析结果中生成一个模型。

如何使用 scikit-learn 做到这一点?

提前谢谢你!

【问题讨论】:

    标签: python machine-learning scikit-learn feature-extraction


    【解决方案1】:

    如果每个应用程序发送相同长度的响应(例如,第一个具有长度 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、源/目标端口、响应代码等。因此,即使 http_lenght 相同,也有完全不同的字段。如果我生成这样的特征向量有什么缺点(不管什么特征真的很合理): feature_vector_dict: { "http_length1": 1024, "http_body1": "http_body_data", "src_ip1": "127.0.0.1", . ..,“http_length2”:2048,“http_body2”:“http_body_data2”,“src_ip2”:“127.0.0.1”,....}
    【解决方案2】:

    你不能有非数字特征,特征的值应该是数字。

    如果你有 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 地址的所有其他样本。

    【讨论】:

      猜你喜欢
      • 2018-02-24
      • 2018-06-01
      • 2017-11-04
      • 2015-01-12
      • 2013-04-30
      • 2015-08-06
      • 2017-06-20
      • 2014-06-27
      • 2014-02-17
      相关资源
      最近更新 更多