酒品质数据集的一个"陷阱

做数据分类时酒品质数据集是个常用的范例,如果只是区分好酒坏酒,这很简单,在 Dataframe 上用个 apply 进行标注,然后用其他的分类算法就能高质量地完成,但是我想做一个能精确分到具体品质等级的。

在这个过程中我遇到的最大的困难是品质 5 和品质 6 的分类效果极差,只有 78%。而这两个品质又是所有品质类别中数量最大的,所以这两个不分好,全局正确率就上不去。

我前后用了不少办法,决策树,神经网络,标准化,PCA 降维等。今天意外想起,以前看的一篇文章,讲的是统计学习方法的弊端,如数据的统计特征都是一样的情况下,统计学习方法的表现会非常差 1 。文章用了一系列动图做例子,可以看到数据在二维平面上的分布是不断变化,形成各种图像,但是它们的统计特征,如方差,平均值等保持不变,这是统计学习方法就会失效了。

Same Stats, Different Graphs: Generating Datasets with Varied Appearance and Identical Statistics through Simulated Annealing

意识到这一点后我便回头查看品质 5 和品质 6 的各种特征分布,果不其然,高度重叠

至于原因呢,我是这么猜测的:

原始数据都是人为鉴定的结果,从图一品质分布上,我们可以看到分布柱状图符合正态分布,而品质 5 和品质 6 又是最多的。也许那些味觉灵敏的鉴定师,能从其中分辨出最具代表性的品质 5 和品质 6 的味道,但是居于其中的那些样本,鉴定师自己也分不清,加上人本身的误差,就导致了数据本身的不准确。所以,在这个本身就不准确的数据集上难以实现准确的分类。

利用决策树,可以做到训练集误差接近于 0,而测试集一直稳定在 30 %的错误率上。品质 6 的总数量就占了品质 5 和品质 6 的 60% 的份额,如果知道这一点,每一个输入样本都猜测是品质 6 也能获得 60% 的准确率呢

Comments
Write a Comment