【发布时间】:2020-11-03 17:20:12
【问题描述】:
我正在从事一个声音分类项目,给定一组录音,我试图确定某个录音属于哪个类别。您可能会将其与音乐流派或主题识别(文本正文)问题进行比较,我的样本长度不同,我需要为每个样本精确地分配一个标签。
我将我的特征表示为 2d 矩阵,其中每一列表示音频文件中的一个帧(例如 0.1 秒),每一行是一个仅与该时间帧相关的特征(例如 MFCC 系数)。现在虽然我的行数是固定的,但列数会根据记录的长度而变化。
我将训练和测试数据作为 numpy 数组输入,它们包含每个样本的 2D nxy 矩阵,其中 n 是一个常数(即 13)并且 y 是一个变量,取决于当前样本的长度。
不幸的是,scikit-learn 似乎不是这个的忠实粉丝,一次又一次地向我提出ValueError: setting an array element with a sequence.。现在我看到了许多解决方案:
- 使用
sklearn.feature_extraction中的一个小工具对序列中的特征(文本、不同大小的图像等)进行矢量化,尽管我看到的大多数示例都是针对基于文本的问题,所以我不完全确定它们对于此类音频问题的适用程度。 - 取列的平均值以生成单个与时间无关的特征向量(可以在此处看到 https://www.youtube.com/watch?v=N1rcKBHlw-Y)
- 使用 K-NN 之类的模型时,可以手动预先计算距离,绕过 scikit 的“序列还是数组?”完全检查。
现在这三个中,我更喜欢类似于 #1 的东西,因为感觉这是 scikit 优化的方法。有什么想法吗?
【问题讨论】:
标签: scikit-learn scipy audio-processing librosa sound-recognition