【问题标题】:Tensor flow input data string for auto encoder用于自动编码器的 TensorFlow 输入数据字符串
【发布时间】:2018-04-09 09:58:28
【问题描述】:

我需要使用 tensorflow 开发自动编码器,当我查看文档和教程时,我可以看到许多带有图像数据和 MNIST_data 的示例,这是经过预处理的数值数据。

在我的例子中,数据是文本格式

喜欢,

 uid       orig_h       orig_p   trans_depth      method       host
======================================================================
5fg288   192.168.1.4      80       1               POST       ex1.com
2fg888   192.168.1.3      80       2               GET        ex2.com

那么如何将这些数据转换为张量流接受的数字格式。我在张量流教程中找不到任何示例,

我是张量流的初学者,请帮助。

更新

根据下面的说明,我通过参考教程here 创建了单词到向量的映射

pandas 数据框中的输入

   host       method   orig_h        orig_p      trans_depth     uid
0  ex1.com    POST    192.168.1.4      80            1          5fg288
1  ex2.com   GET      192.168.1.3     443            2          2fg888

还有

 Bag of word ---> ['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]

那么我该如何重塑这些数据以提供张量流

应该是这样的

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个特征。可以吗,

【问题讨论】:

  • 您需要编写自己的input_fn,它会读取您的原​​始数据并将其转换为张量。看看tensorflow.org/get_started/datasets_quickstart,它给出了一些如何做到这一点的例子。
  • 其实我已经把数据读到pandas dataframe了,现在要转换成tensorflow输入格式了。
  • 在这种情况下,您只需要tf.estimator.inputs.pandas_input_fn
  • 您的输入字符串集的数量是否有限?如果有,他们有多少?如果不是,您希望将输入与输出连接起来是什么样的关系?您是否希望在分解期间出现新的、可能看不见的字符串?

标签: tensorflow machine-learning


【解决方案1】:

Tensorflow 接受 numpy 格式的数据。可以使用 df.as_matrix() 函数将 Pandas 数据帧转换为 numpy。但问题的关键是如何将这些不同的数据类型转换为神经网络(或任何机器学习方法)的连续数字表示。

链接到下面的答案提供了一些对 sci-kit 文档的有用参考,其中讨论了详细信息,太多了,无法在此处重新编写:

Machine learning with multiple feature types in python

阅读该指南后,您的某些数据将很容易转换,例如 trans_depth orig_pmethod,它们似乎是分类数据。在这种情况下,您会将它们转换为表示该类是否存在的 {1,0} 值的多个特征,例如,orig_p 可能表示为两个特征 x1 和 x2。 x1=1 如果orig_p=80,则为 0,而x2=1 如果orig_p=443,则为 0。

您可能会对主机做同样的事情,但您可能需要考虑如何以及是否真的想使用主机。例如,如果您认为它很重要,您可以定义一个分类特征来识别 .com.edu.org 等域,因为单个主机名可能太多而无法表示。

您也可以考虑基于某个数据库(如果存在这种情况)将主机名集群到主机类别中,并将主机名所属的集群用作分类特征。

对于orig_h,您可以考虑按区域对 IP 进行分组,并为每个区域定义一个分类特征。

uid 看起来每个用户都是唯一的,因此您可能不会使用该数据列。

您需要考虑每个数据点。从我链接到的文档开始,但总的来说,这是一个标准数据挖掘的问题,任何关于数据挖掘的好书对于进一步理解这些概念都是无价的,这是通过谷歌搜索在网上很容易找到的一本:

https://books.google.com/books/about/Data_Mining_Concepts_and_Techniques.html?id=pQws07tdpjoC&printsec=frontcover&source=kp_read_button#v=onepage&q&f=false

我还将包括以下参考资料,因为它们提供了我所见过的最好的教程,并且它们对 ML 部分的介绍有一组非常有用的文章可供阅读。这与问题略有相关,但我希望它会很有用。

https://github.com/aymericdamien/TensorFlow-Examples

【讨论】:

  • 感谢您的反馈,现在我正在关注pythonprogramming.net/… 的教程,并且我已经实现了1。标记词 2. 使用词袋索引来表示数据框中的每个词。 3.然后使用这些数据进行训练,如果我朝着正确的方向前进,请告诉我。
  • 如果您正在处理文本,这是一种标准方法,也是一种很好的学习方法。文本分析也使用循环神经网络(最后一个链接有示例)来完成,它处理序列。在这种情况下,您可以使用预训练的 word2vec 模型(例如 Glove)将单词转换为嵌入式表示:nlp.stanford.edu/projects/glove
  • RNN 的预处理序列涉及更多一点(例如,这里有一个学习曲线),但这里有一篇关于该过程的好文章:r2rt.com/…
  • 我还有一个查询,我在这里找到了一个答案stackoverflow.com/questions/42302498/…,它说存在一种方法 tf.string_to_number 可以将字符串转换为数字,它对我有帮助吗案例,实际上我很困惑,我可以看到几种可用的方法,例如 one-hot vector word-tokenizer 等。请让我知道您的反馈。
  • 感谢您提供宝贵的信息,我的最终目标是使用无监督机器学习在网络生成的日志文件(我的问题中显示的示例)中发现异常。我没有标签数据作为输入,因此使用预训练(无监督)模型(使用前一天数据)我必须在新生成的日志中找到异常。所以当我在网上搜索时,我发现在这种情况下可以使用 autencoder,所以我尝试在 tensorflow github.com/aymericdamien/TensorFlow-Examples/blob/master/… 中使用一个示例
猜你喜欢
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
相关资源
最近更新 更多