python - 如何输入具有可变输入数据长度的 Scikit 学习 MLP 分类器。
问题描述
我想使用以下数据集运行简单的 MLP 分类器(Scikit 学习)。
数据集由 100 个文件组成,包含声音信号。每个文件有两列(两个信号)和两行(信号的长度)。行(信号)的长度因文件而异,范围在 70 到 80 个值之间。所以文件的尺寸是 70 x 2 到 80 x 2。每个文件代表一个完整的记录。
我面临的问题是如何用可变长度的数据训练简单的 MLP,训练集和测试集分别包含 75 个和 25 个文件。
一种解决方案是连接所有文件并制作一个文件,即 7500 x 2 并训练 MLP。但是在这种情况下,信号的重要信息不再有用。
解决方案
三种方法按有用性排序。强烈推荐方法 1。
第一种方法 - LSTM/GRU
您不使用简单的MLP。您正在处理的数据类型是顺序数据。为此目的创建了循环网络 (LSTM/GRU)。它们能够处理可变长度序列。
第二种方法 - 嵌入
找到一个可以将数据转换为固定长度序列的函数,称为嵌入。产生时间序列嵌入的网络的一个例子是TimeNet。然而,这基本上使我们回到了第一种方法。
第三种方法 - 填充
如果你能找到一个合理的序列长度上限,你可以将较短的序列填充到最长序列的长度(在序列的开头/结尾填充 0,插入/预测剩余的值),或者剪得更长系列到最短的一个。显然,您将分别引入噪音或丢失信息。
推荐阅读
- c# - Unity 使用 .GetComponentsInChildren 停用错误的孩子
() - flutter - 如何检测用户是否开始垂直滚动 Listview.builder?
- php - 如何在 Visual Studio 代码片段中使用 $?
- java - RabbitMQ + Spring 集成:从绑定到主题交换的队列的消息转换
- c# - JetBrains Rider“文档已超过阈值”错误
- python - 使用 ffmpeg-python 链接“drawtext”
- javascript - 如何将函数传递给自己的反应上下文提供程序,让您编辑状态?
- html - 如何在将表单数据发布到 API 后更改用户看到的内容
- django - 汇总 JSONField 中的所有数据还是使用模型 ForeignKey 更好?
- javascript - Laravel:数据表搜索选项不使用关系表字段