始终使用“StandardScaler()”功能是否明智?[解决了]

数据挖掘 Python 特征提取 特征缩放
2022-02-22 09:27:53

我目前的调查表明sklearn.preprocessing.StandardScaler(),神经网络的某些类型的特征提取并不总是正确的选择。

假设我想根据频谱图数据对声音事件进行分类。第二个这样的数据可能如下所示: 在此处输入图像描述

在这里可以看到一秒钟内大约 1kHz 的正弦波。低频段的解决是特定于特征提取的,而不是问题的一部分数据是(n,28,40)dBFS 值的矩阵,因此是相对于 wav 文件的最大数字余量的对数能量水平。

如果StandardScaler现在应用,声音的视觉表示现在看起来像这样: 在此处输入图像描述

...这基本上消除了定义特征并放大了噪音,这正是不想要的。基于电平的定标器在这里是更好的选择,还是StandardScaler()在正弦波的这种特定情况下似乎没有使系统受益?

注意:我是一名学生,我没有多年的经验。因此,如果问题缺乏质量,我要求您在否决之前提出改进建议。谢谢你。

2个回答

从图像的外观来看,您似乎正在为图形的每一行训练 Scaler。

第一张图的几乎每一行都在 0-1 秒的持续时间内保持相同的值。如果您为每条线运行缩放器,那么每个像素的结果都是 0,因为几乎所有像素都具有相同的值,这也是平均值。另请注意,唯一不同的像素是最左边的像素,这是差异最大的像素。

相反,您应该做的是将矩阵的所有像素排列在一列中并立即缩放整个数据,然后将列重新调整为矩阵形式,然后您将看不到两张图片。

我以前没有使用过这种数据,但是您是否将标准定标器应用于对数数据?在第二张图片中,我可以看到您的 dBFS 值的颜色范围从 6 到 -6,这根本没有意义,因为 dBFS 使用 0 作为最大级别(如第一张图片的色标所示)。

我相信您首先需要将数据转换为绝对值,例如将 dBFS 转换为 16 位值,使您的数据线性化,以便您可以使用标准缩放器。但是,请注意,如果您使用此缩放器,您将获得负值和正值,因此回到 dBFS 表示法没有多大意义,因为该表示法仅适用于绝对值。

关于转换,由于 dBFS 只能表示绝对值,因此结果是范围从 0 到 65535 的无符号数据。如果您想要标准的有符号 16 位表示,则需要重新调整范围从 -32768 到 32767 的数据。