我需要使用TensorFlow开发自编码器,当我查看文档和教程时,我看到很多使用图像数据和预处理过的数值数据MNIST_data的例子。
而在我的案例中,数据是以文本格式存在的
例如,
uid orig_h orig_p trans_depth method host======================================================================5fg288 192.168.1.4 80 1 POST ex1.com2fg888 192.168.1.3 80 2 GET ex2.com
那么,我如何将这些数据转换成TensorFlow可以接受的数值格式。我在TensorFlow教程中找不到任何例子,
我是TensorFlow的新手,请帮助我。
更新
根据下面的说明,我通过参考这里的教程,创建了词向量映射
输入是pandas数据框
host method orig_h orig_p trans_depth uid0 ex1.com POST 192.168.1.4 80 1 5fg2881 ex2.com GET 192.168.1.3 443 2 2fg888
以及
词袋模型 ---> ['5fg288', '2fg888', '80', 'GET', '443', '1', 'ex2.com', '192.168.1.4', '192.168.1.3', '2', 'ex1.com', 'POST']
现在,对于每个单元格,我有一个值数组,例如
192.168.1.4 ---> [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0]ex1.com ---> [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]80 ----> [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
那么,我如何重塑这些数据以提供给TensorFlow呢?
应该像这样吗?
data = array([[[0.0,...],[0.0,...],[0.0,...],[0.0,...],[0.0,...],[0.0,...]],[[0.0,...],[0.0,...],[0.0,...],[0.0,...],[0.0,...],[0.0,...]]])
也就是说,每个特征都是一个浮点数数组,并且单个样本中有6个特征。这是可能的吗?
回答:
TensorFlow接受numpy格式的数据。Pandas数据框可以通过df.as_matrix()
函数转换为numpy。但是,你问题的关键在于如何将这些不同类型的数据转换为神经网络(或任何机器学习方法)可以使用的连续数值表示。
下面的链接提供了对sci-kit文档的一些有用参考,这些文档讨论了细节,这里就不再重述了:
阅读该指南后,你的一些数据将很容易转换,例如trans_depth
、orig_p
和method
似乎是分类数据。在这种情况下,你将把它们转换为多个{1,0}值的特征,这些特征表示该类是否存在,例如,orig_p
可能被表示为两个特征x1和x2。如果orig_p=80
,则x1=1
,否则为0;如果orig_p=443
,则x2=1
,否则为0。
你可以对host做同样的事情,但你可能需要考虑如何以及是否真的要使用host。例如,如果你认为它很重要,你可以定义一个分类特征,仅识别.com
、.edu
、.org
等域名,因为单独的主机名可能太多了,不想表示出来。
你还可以考虑根据某些数据库(如果存在这样的东西)将主机名聚类到主机类别中,并使用主机名所属的聚类作为分类特征。
对于orig_h
,你可以考虑按地区分组IP,并为每个地区定义一个分类特征。
uid
看起来是每个用户独有的,所以你可能不会使用这一列数据。
你需要针对每个数据点进行思考。先从我链接的文档开始,但总的来说,这是一个标准的数据挖掘问题,任何好的数据挖掘书籍都将对进一步理解这些概念非常有价值,这里有一个通过谷歌搜索可以轻松找到的在线书籍:
我还包括以下参考,因为它们提供了迄今为止我见过的最好的教程,他们的机器学习介绍部分有一组非常有用的文章。虽然这与问题略有偏离,但我认为会很有用。