for_nohelp 2024-06-23 03:29 采纳率: 14.3%
浏览 9
已结题

时间序列预测的输入输出数据样本数相差太大怎么办

如果我的输入和输出样本数不匹配
比方说:输出是每秒钟有一个输出,可是输入是0.2s一次记录了三个特征的参数。输入样本有500个,输出只有100, 这种情况下也是用应该怎么可以训练lstm来预测输出呢?

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-06-23 03:30
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这种情况下,可以将输入的参数进行汇总或者重新采样,使得输入样本和输出样本数量一致,从而可以进行训练。具体可以有以下几种方式:
    1. 汇总处理:将每0.2s记录的三个特征参数合并为一个向量,并将这500个向量作为输入样本。这样就可以得到500个输入样本和对应的100个输出。
    2. 重新采样:将输出的时间步长也调整为0.2s,将100个输出均匀地分配到500个时间步上。例如,可以将第一个输出分配在前5个时间步上,第二个输出分配在第6~10个时间步上,以此类推。然后将这些时间步下的特征参数合并为一个向量作为输入样本。
    3. 数据插值:将输入样本按照0.2s的间隔进行等间距采样,得到2500个采样点。然后对输出的100个数据点进行插值,得到2500个输出值,将这些值作为样本进行训练。 以下是一些伪代码演示以上三种方法:
    4. 汇总处理:
    import numpy as np
    # 假设输入是一个shape为(500,3)的numpy数组,每三行为同一时刻的三个特征参数
    X = np.random.rand(500, 3) 
    # 假设输出是一个shape为(100,)的numpy数组,每个值代表同一时刻的输出
    y = np.random.rand(100)
    # 将每三行的特征参数合并为一个向量
    X_new = []
    for i in range(0, len(X), 3):
        X_new.append(X[i:i+3].flatten())
    X_new = np.array(X_new)
    # 训练模型
    model.fit(X_new, y)
    
    1. 重新采样:
    import numpy as np
    # 假设输入是一个shape为(500,3)的numpy数组,每三行为同一时刻的三个特征参数
    X = np.random.rand(500, 3) 
    # 假设输出是一个shape为(100,)的numpy数组,每个值代表同一时刻的输出
    y = np.random.rand(100)
    # 将输出在时间轴上均匀分配到每个输入时间步
    y_new = []
    for i in range(0, len(y)):
        start = int(i * (len(X) // len(y)))
        end = int((i+1) * (len(X) // len(y)))
        y_new.append(np.mean(y[i:i+1]))
    y_new = np.array(y_new)
    # 将每三行的特征参数合并为一个向量
    X_new = []
    for i in range(0, len(X), 3):
        X_new.append(X[i:i+3].flatten())
    X_new = np.array(X_new)
    # 训练模型
    model.fit(X_new, y_new)
    
    1. 数据插值:
    import numpy as np
    from scipy.interpolate import interp1d
    # 假设输入是一个shape为(500,3)的numpy数组,每三行为同一时刻的三个特征参数
    X = np.random.rand(500, 3) 
    # 假设输出是一个shape为(100,)的numpy数组,每个值代表同一时刻的输出
    y = np.random.rand(100)
    # 将输入等间隔采样,得到2500个数据点
    X_new = []
    for i in range(X.shape[1]):
        X_new.append(interp1d(np.arange(len(X)), X[:,i])(np.linspace(0, len(X)-1, 2500)))
    X_new = np.stack(X_new, axis=1)
    # 将输出也等间隔采样,得到2500个数据点
    y_new = interp1d(np.arange(len(y)), y)(np.linspace(0, len(y)-1, 2500))
    # 训练模型
    model.fit(X_new, y_new)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月21日
  • 已采纳回答 7月13日
  • 创建了问题 6月23日

悬赏问题

  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图