4

我在包含语音特征和加速度计测量的数据集上使用 Matlab 神经网络工具箱训练了前馈神经网络。Targetset 包含数据集的两个目标类:0 和 1。训练、验证和性能都很好,我已经为这个网络生成了代码。

现在,我需要实时使用这个神经网络来识别模式,并在我针对先前训练的 NN 测试新数据集时生成 0 或 1。但是当我发出命令时:

   c = sim(net, j)

其中“j”是一个新的数据集[24x11];取而代之的是 0 或 1 我将其作为输出(我假设我得到正确分类的百分比,但本身没有分类结果):

c =

  Columns 1 through 9

    0.6274    0.6248    0.9993    0.9991    0.9994    0.9999    0.9998    0.9934    0.9996

  Columns 10 through 11

    0.9966    0.9963

那么有什么命令或方法可以让我真正看到分类结果吗?任何帮助都非常感谢!谢谢

4

2 回答 2

4

我不是 matlab 用户,但从逻辑的角度来看,你错过了一个重要的点:

神经网络的输入是单个向量,您正在传递一个矩阵。因此,matlab 认为您想要对一堆向量(在您的情况下为 11 个)进行分类。所以你得到的向量是这 11 个向量中每一个的输出激活。

输出激活是一个介于 0 和 1 之间的值(我猜你使用的是 sigmoid),所以这是完全正常的。您的工作是获得最适合您的数据的阈值。您可以通过对训练/测试数据的交叉验证或仅选择一个(0.5?)来获得此阈值,然后查看结果是否“好”并在需要时进行修改。

于 2013-01-04T19:23:11.757 回答
2

NN 通常使用逻辑函数将其输出转换为 (0,1) 内的值。这不是百分比或概率,只是确定性的相对度量。无论如何,这意味着您必须手动使用阈值(例如 0.5)来区分这两个类别。很难找到哪个阈值最好,因为您必须在精度和召回率之间进行最佳权衡。

于 2013-01-04T21:49:35.310 回答