我训练了一个用于二元分类的前馈神经网络,获得了83%的准确率,我希望通过调整输入参数来提高这一成绩。但一些测试让我感到困惑:
我的数据集长度为671,所以我将其分为513个训练集,58个验证集和100个测试集
-
当我改变数据集(训练集、验证集、测试集)的大小时,准确率可能会下降到非常低的分数,比如40%
-
神经网络应该从训练集中学习,但在训练后使用相同的训练集而不是测试集进行测试时,我以为模型应该达到100%的得分,因为它刚从中学习过,看过它,但实际上只提高了一点点,达到了87%…
我是机器学习的新手,所以我不知道这是否正常,我只是好奇,想抓住所有的小细节,完美地理解我在做什么。我猜可能是我的向量集的归一化问题,但我不太了解。如果你想看,我可以分享我的完整代码,但像所有神经网络一样,它相当长但易于阅读。
回答:
正如许多人所建议的,3:1:1(60:20:20 = 训练-验证-测试)比例是分割数据的一个经验法则,如果你在处理小数据集,最好坚持使用80:20或70:30的训练-测试比例,我通常选择90:10的比例以获得更好的结果。
在开始分类之前,首先检查你的数据集是否平衡或不平衡(一个类别的例子不应该比另一个类别的少),因为即使它给你很好的准确率,也会误导结果。
如果数据集不平衡,使用采样算法(例如SMOTE)对数据集进行预处理并重新采样。它将根据邻居创建每个类别的等量示例集。
正如其他答案中正确提到的,使用交叉验证分类,例如K折交叉验证。交叉验证的概念是为了调整用于训练的参数,以优化其准确率,并消除对训练数据过拟合的影响,它还可以去除数据集中的噪声。我通常使用10折交叉验证,其中数据集被分为10个部分,每次迭代中使用1/10的部分作为测试,其余部分作为训练。计算10次计算的平均值,以获得你分类器性能的一个良好估计。