什么是数据不均衡问题

举个小栗子:

如果100个人中喜欢吃梨的有90人,喜欢吃苹果的有10人。

【机器学习】如何处理数据不均衡问题_java

那么如果你随便在大街上找一个人,预测他是喜欢吃梨还是苹果?肯定的,傻子都知道猜他喜欢吃梨呀。因为这样基本不用学习什么知识,就能将准确率控制在90%左右。


用图表示就为:

真实值

【机器学习】如何处理数据不均衡问题_java_02


预测值

【机器学习】如何处理数据不均衡问题_java_03


像这种问题,傻子都会,还要机器干什么呢?所以,我们要找到真的学习并预测梨和苹果,且不受数据不均衡影响的分类器。


解决办法

1.想办法获取更多的数据

获取更多的数据,从数据来源查找更多的数据,来弥补数据的短缺。


2.换个评测方式

以前都用准确率accuracy,也就是预测对的个数 / 总个数。但是这个评测方式在高的准确率和低的误差并没有那么有说服力。那么怎么办呢?这个时候就该想起来准确率Precision和召回率Recall,从而求得的F1值。P,R,F1值是对所有类别的测评值。如果想了解更多,我之前写了该方法的理论与实践。

详谈P(查准率),R(查全率),F1值


3.重组数据

这个方法就简单粗暴了。比如原始数据为:

【机器学习】如何处理数据不均衡问题_java_04

方式一

将少的蓝色数据复制多份,使得数量和多的数据相当即可。

蓝色数据复制多份

【机器学习】如何处理数据不均衡问题_java_05

注:这样做的缺点是可能会过拟合。


方式二

砍掉一些橙色部分,使得和蓝色基本持平。

【机器学习】如何处理数据不均衡问题_java_06

注:这样做的缺点一般使得数据预测的不那么准确,因为数据丢失。


个人认为,建议优先选择方式一。


4.换机器学习算法

神经网络,对于数据不均衡问题真的是束手无策。可以换其他的机器学习方法,比如决策树之类,不受该问题影响。


5.修改算法

这个就腻害了,直接将算法改了,来改变数据不均衡带来的影响。

比如你使用的是sigmoid算法:

【机器学习】如何处理数据不均衡问题_java_07

x=0为分界线,当x小于0时为梨,大于0的时候为苹果。但是梨比较多,那么可以将阈值x=0向右平移:

【机器学习】如何处理数据不均衡问题_java_08

使得绝大多数预测的结果为梨,只有一些特别情况,极其确定的时候预测为苹果。


补充

对于上述的所有方法,我做一个补充。

1.选择复制小数据方法的时候,没必要非得要和大数据1:1才好。可以比例慢慢靠近,说不定期间就有一个比值就很好呢。毕竟实践才是检验真理的唯一标准。

2.砍掉大数据的方法尽量不要用,很可能会影响分类器的效果。


参考资料

morvanzhou

https://www.bilibili.com/video/av16009140?from=search&seid=1236544046869302415


IELTS a bit


discrepancy n. 不符;矛盾;相差

comparable adj. 可比较的;比得上的

minimum n. 最小值;最低限度;最小化;最小量

                adj. 最小的;最低的

tardy adj. 缓慢的,迟缓的;迟到的

         n. 迟到

         n. 人名(Tardy)

unadorned adj. 朴素的;未装饰的





欢迎关注深度学习自然语言处理公众号,我会每天更新自己在机器学习深度学习NLPlinuxpython以及各种数学知识学习的一点一滴!再小的人也有自己的品牌!期待和你一起进步!【机器学习】如何处理数据不均衡问题_java_09

【机器学习】如何处理数据不均衡问题_java_10【机器学习】如何处理数据不均衡问题_java_11

【机器学习】如何处理数据不均衡问题_java_12长按识别二维码


点个赞呗【机器学习】如何处理数据不均衡问题_java_13