我建立了一个神经网络来预测某种数据(生物序列)。它具有32个功能,其中12个具有某些单位,而20个只是整数(但为正数)。我的阳性样本有648个样本,阴性样本有9000多个样本。

为了训练我的网络,我抽取了500个样本,其余样本用于测试。当我使用3倍交叉验证对我的网络进行训练和测试时,只要在将输入数据划分为训练和测试集之前对其进行归一化处理,就可以为所有情况提供100%的准确性。精确度和召回率是100%

如果我不对它进行归一化,则同一实验的准确度将下降至65-70%。准确性和召回率分别为5%和80%。

案件变得更加奇特。当我使用在第一个(规范化模型)模型中训练的网络对训练集中存在的几个随机数据集进行测试时,如果不进行规范化(由于无法处理外部世界数据,因为我们处理的是单个实例),它将预测所有样本1或肯定,完全偏向肯定。

当我使用第二个模型(非标准化模型)时,它会预测出更多的假阴性。

如果'outp'是训练集正数的输出预测,而'outn'是训练集负数的输出预测,则我的网络阈值计算为:

[ mean(outp) - std_dev(outp) + mean( outn) + std_dev(outn)] / 2


我得到第一个模型的0.5,第二个模型的是0.489

1)问题出在哪里?有人可以向我解释。

2)在训练时,建议对数据进行归一化,但这并不意味着如果要使用预测工具的用户提供,则分类器会误解输入值,因为不能使用单个样本归一化?

3)在此类问题中找到阈值或一般说分类器问题的最佳方法是什么?

4)我还应该提供什么我不知道的信息。也请让我知道。

我提供了指向错误图的时代的链接。

https://www.dropbox.com/s/1gideuvbeje2lip/model2_unnormalised.jpg
https://www.dropbox.com/s/nb4zyt3h370pk8m/model1_normalised.jpg

我还要提到的一件事是,为了标准化,我使用了MATLAB的内置函数

我的正矩阵是648个样本的32个特征(即32 x 648)

负矩阵是9014个样本的32个特征(即32 x 9014)

最初都使用MATLAB的normr函数对它们进行了归一化,然后再进行任何分区训练或测试或验证集。

最佳答案

您可以规范化数据,但是当您从用户那里收到新输入时,必须使用培训网络时所使用的相同的“最小”和“最大”来规范其数据。
由于内置函数没有提供这些值,因此您可能需要手动对矩阵进行归一化,然后存储“ min”和“ max”,以便以后对用户输入进行归一化。

我使用此公式,但存在其他公式:

MatNorm = (Mat - min(Mat)) / (max(Mat) - min(Mat))


另外,您使用了多少阳性测试数据进行培训?

关于matlab - 神经网络模型无法预测外部数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20570029/

10-12 21:12
查看更多