今天让我们聊聊在机器学习中遇到了一些不均衡数据的时候,我们应该怎么做.
不均衡的数据通常来说形式都比较固定,并且也比较好区分.比如说你手头上现在有苹果和梨,在这个时候你手中的数据都跟你说,全世界的人都吃梨哦,这个时候你去找一个路人甲,问问他你是不是喜欢吃梨啊,这个时候我们大多数人都会猜测,这个人会吃梨,这个时候梨就可以作为优势数据变得很骄傲了.
这个时候,让我们来引入今天的问题,如何处理不均衡数据.
其实不均衡的数据理解预测起来很简单,永远都是预测多的数据的那一方,这样准没错,特别是数据多很多的情况的那一方,比如多的占了90%,少的占10%.只要每一次都预测多的那一批数据,预测的准确性就可以达到90%了。
没错,这样听起来是不是有点偷懒的感觉呢?其实机器也懂得这些小伎俩,所以经过训练以后,机器也变得精明了,每一次都预测多的那部分数据,但是这样是不可以的!接下来我们来谈谈解决这个问题的几种方法
方法1:想办法获取更多的数据
首先我们要想一想我们是否可以获取更多的数据,有的时候我们在获取数据的前期,通常数据会呈现一个变化的趋势,这时候表现为某一种数据量偏多,等到数据的后半段的时期,数据的变化的趋势可能就会不一样了。
如果没有获取后半期的数据,从整体来看,预测就可能不会那么的精准.所以想办法获得更多的数据有可能会改善这个情况~
方法2:换一种评判方式
通常情况下,我们会使用准确率(Accuracy)和误差(Cost)两种方式来判断机器学习的成果.但是在不均衡的数据面前,高的准确率和低的误差就显得没有那么有用和重要了.
所以我们就可以换个方式去计算,很多时候我们会使用Confusion Matrix去计算Precision&Recall,然后在通过Precision&Recall去计算F1 Score(or F-score).通过这样的数据,我们可以很大程度上去区分不均衡数据,并且可以给出更好的分数.因为我水平的问题,具体的计算推理过程等我日后会进行推导!(立flag)
方法3:重组数据
第三种方法相对来说最为简单粗暴,对不均衡的数据进行重新组合,使之均衡。
第一种方式是复制少数数据里的样本,使其可以达到和多数数据样本差不多的数量。
第二种方式就是对多数样本的数据进行开刀,砍掉一些多数样本的数据,还是使两者的数量差不多
方法4:使用其他的机器学习方法
在使用一些机器学习的方法中,比如神经网络,在面对不均衡数据的时候都是束手无策的,但是像决策树这样的方法就不会受到不均衡数据的影响
方法5:修改算法
在所有方法中,最具有创造力的方法莫过于这个修改算法了,如果你使用的是Sigmoid函数,他会有一个预测的门槛,如果低于门槛,预测的结果为梨,如果超过了门槛,预测的结果为苹果。
不过因为现在梨的数量过多,这个时候我们就需要调解下门槛的位置,使得门槛更加的偏向于苹果这一边,只有数据非常准确的情况下,模型才会预测为苹果,从而使机器学习学习到更好的效果.
参考:https://mp.weixin.qq.com/s/e0jXXCIhbaZz7xaCZl-YmA