使用sklearn的accuracy_score计算准确率时,2d array与1d array的结果不同

背景

今天在做多标签分类任务时,使用了accuracy_score计算预测准确率,然而却出现了训练集的准确率不断上升,验证集的准确率始终保持在很低的情况,因此对这种现象进行了分析

数据分布?

一开始我认为时训练集和验证集之间的数据分布不同,但是在多次改变train_test_splitrandom_seed,调整test_size大小,改变验证集等方法后,结果仍然很低,因此排除了这种可能

归一化?

数据中存在负值,而模型采用relu激活函数,忽略了负值的影响,因此我使用sklearn的StandardScaler进行了归一化,结果仍然很低,排除了归一化的影响

变量名?

我甚至一度怀疑是变量名的问题,在对验证集进行测试的时候,重用了训练集的变量名,结果仍然很低,排除这种影响

最终找到accuracy_score

使用sklearn的accuracy_score计算准确率时,2d array与1d array的结果不同_第1张图片
在使用accuracy_score之前,我着实没有想到输入的y_true和y_pred竟然是1维向量,这下子就可以明白了,1维的时候比较的是每个值是否一样,而输入是2维的时候,比较的是每个一维向量是否完全相等,而不是对每个值进行比较,这就导致了训练时准确率不断上升,而验证集始终停留在较低值的位置。训练集在训练时可以完全拟合到正确值,而验证集总会存在一两个错误,导致整个样本的标签预测错误。由于本次任务是多标签分类任务,一个样本存在多个标签,因此即使只正确1个标签,准确率也并非0。

总结

在使用sklearn的一些方法时,应该看清楚输入的维度,想要方便,使用矩阵计算,最终因为使用错误,浪费了一个上午

你可能感兴趣的:(sklearn,sklearn,机器学习,python)