【问题标题】:Normalising matrix which contains lists包含列表的归一化矩阵
【发布时间】:2020-08-27 07:39:03
【问题描述】:

目前,我有以下数据框(前 30 列来自dput()):

structure(list(PacketTime = c(0.0636830000000002, 0.0691829999999989, 
0.0639040000000008, 0.0636270000000003, 0.0656370000000024, 0.064778000000004, 
0.0616950000000003, 0.0666280000000015, 0.0630829999999989, 0.0665130000000005, 
0.0621160000000032, 0.0654010000000014, 0.0652889999999928, 0.0640989999999988, 
0.0621339999999861, 0.0645319999999998, 0.065757000000005, 0.0624459999999942, 
0.061782000000008, 0.0626439999999917, 0.0648419999999987, 0.0664910000000134, 
0.0644649999999984, 0.0654030000000034, 0.0657139999999998, 0.0642799999999966, 
0.069137000000012, 0.0631520000000023, 0.0634139999999945, 0.0615009999999927
), FrameLen = list(c(304L, 276L, 276L), c(304L, 276L, 276L), 
    c(304L, 276L, 276L), c(304L, 276L, 276L), c(304L, 276L, 276L
    ), c(304L, 276L, 276L), c(304L, 276L, 276L), c(304L, 276L, 
    276L, 276L, 276L), c(304L, 276L, 276L), c(304L, 276L, 276L, 
    276L, 276L), c(304L, 276L, 276L), c(304L, 276L, 276L), c(304L, 
    276L, 276L), c(304L, 276L, 276L), c(304L, 276L, 276L), c(304L, 
    276L, 276L), c(304L, 276L, 276L, 276L, 276L), c(304L, 276L, 
    276L), c(304L, 276L, 276L), c(304L, 276L, 276L), c(304L, 
    276L, 276L, 276L, 276L), c(304L, 276L, 276L), c(304L, 276L, 
    276L), c(304L, 276L, 276L, 276L), c(304L, 276L, 276L, 276L, 
    276L), c(304L, 276L, 276L), c(304L, 276L, 276L), c(304L, 
    276L, 276L), c(304L, 276L, 276L), c(304L, 276L, 276L)), IPLen = list(
    c(300L, 272L, 272L), c(300L, 272L, 272L), c(300L, 272L, 272L
    ), c(300L, 272L, 272L), c(300L, 272L, 272L), c(300L, 272L, 
    272L), c(300L, 272L, 272L), c(300L, 272L, 272L, 272L, 272L
    ), c(300L, 272L, 272L), c(300L, 272L, 272L, 272L, 272L), 
    c(300L, 272L, 272L), c(300L, 272L, 272L), c(300L, 272L, 272L
    ), c(300L, 272L, 272L), c(300L, 272L, 272L), c(300L, 272L, 
    272L), c(300L, 272L, 272L, 272L, 272L), c(300L, 272L, 272L
    ), c(300L, 272L, 272L), c(300L, 272L, 272L), c(300L, 272L, 
    272L, 272L, 272L), c(300L, 272L, 272L), c(300L, 272L, 272L
    ), c(300L, 272L, 272L, 272L), c(300L, 272L, 272L, 272L, 272L
    ), c(300L, 272L, 272L), c(300L, 272L, 272L), c(300L, 272L, 
    272L), c(300L, 272L, 272L), c(300L, 272L, 272L)), Movement = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0)), row.names = c(NA, -30L), class = c("tbl_df", 
"tbl", "data.frame"))

从这里,我可以使用keras 包将数据框(在变量packets 中)放入矩阵中:

packets.m <- as.matrix(packets)

但是,当我尝试将其传递到模型中(不进行规范化)或在传递之前进行规范化时,我收到以下错误:

py_call_impl(callable, dots$args, dots$keywords) 中的错误: 矩阵类型不能转换为python(只能转换整数、数字、复数、逻辑和字符矩阵

因此,如何有效地规范化包含列表的 FrameLenIPLen 两列,以便我可以准确地将其用于使用 keras 包的深度学习模型?

编辑:完整的dput() 可以在这里找到,用于数据包数据帧https://pastebin.com/cXKdSB2y

【问题讨论】:

    标签: r dataframe matrix keras normalization


    【解决方案1】:

    这取决于你如何训练这些数据

    library(tidyverse)
    

    多个实例

    df %>% 
      unnest()
    

    多种功能

    df %>% 
      mutate(position = map(FrameLen,seq_along),id = row_number()) %>%
      unnest() %>% 
      pivot_wider(names_from = position,values_from = c(FrameLen,IPLen))
    

    【讨论】:

    • 您能否阐明“取决于您如何训练这些数据”的意思?帧中的这些数据只是从 Wireshark 的原始流量分析转储中处理的。目的是让它准备好分成训练/测试集进行建模
    • 加上这个,我明白你的意思了。 FrameLen 和 IPLen 的列表值一起算作一个实例的单个特征。
    • 是的,我不认为 keras 可以在列表上进行训练,至少不能在 R 上进行训练,而且我什至不确定这在理论上是否可行,但话又说回来,我很少玩深度学习,当我使用它我总是必须强制数据大小相同
    • 在使用我的数据框获得的多功能解决方案时,我收到警告:Values in FrameLen` 没有唯一标识;输出将包含列表列。 * 使用values_fn = list(FrameLen = list) 禁止此警告。 * 使用values_fn = list(FrameLen = length) 确定重复出现的位置 * 使用values_fn = list(FrameLen = summary_fun) 汇总重复. Some of the columns in the output have c(x, y, ...)` 而不是正确拆分到相应的列中。
    • 我发现了你有相同数据的行的问题,一个 id 将解决这个问题,修复了答案,如果解决了请投票并批准
    猜你喜欢
    • 2018-07-04
    • 2017-10-15
    • 2019-10-22
    • 2011-12-28
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多