【问题标题】:Neural network model fails to predict outer world data神经网络模型无法预测外部世界数据
【发布时间】:2014-01-01 10:19:16
【问题描述】:

我建立了一个神经网络来预测某种数据(生物序列)。它有 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 函数作为训练集或测试集或验证集进行了初始归一化。

【问题讨论】:

    标签: matlab machine-learning neural-network classification prediction


    【解决方案1】:

    您可以标准化您的数据,但是当您收到来自用户的新输入时,您必须使用您在训练网络时使用的相同“最小值”和“最大值”来标准化他们的数据。 由于内置函数不会为您提供这些值,您可能需要手动对矩阵进行归一化,然后存储“min”和 max,以便以后对用户输入进行归一化。

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

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

    另外,您使用了多少正面测试数据进行训练?

    【讨论】:

    • 所以这个公式必须按列使用,即用于 32 个特征 x 648 个样本的矩阵,标准化将针对样本的所有特征。我对吗 ?因为只有这样才能为单个用户输入保持相同的规范化。
    • 您可以保留多个“最大”和“最小”,为您输入的每个特征保留一个。
    【解决方案2】:

    如果您使用的是standard scaling 策略,请将从训练中获得的相同meanstd 值应用于您的验证/测试数据以进行标准化。还建议进行 10 倍交叉验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      相关资源
      最近更新 更多