【发布时间】: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