如何提高机器学习算法的召回率?(尤其在样本集不平衡时)

理由
举报 取消

最近在做文本分类,遇到了一些问题,想问问大家有没有好的方法。为了节省时间,我只采取了部分数据来跑算法(全部数据跑了之后的结果和这个差不多)训练集:4837 documents测试集:2074 documents样本比例:正样本:负样本 = 1:3预测结果中,有的算法在正样本中预测的精确率还行(0.95-1.00之间),但是召回率非常差,通常只有0.01和0.02左右,KNeighbors和DecisionTree的精确率和召回率都是0,只有NaiveBayes和BernoulliNB的PR和Recall比较平均,但是也没有到0.8。问题:我查了一下那些召回率较低(0.01)的算法,475个样本中(正样本),实际上只有5个被预测正确了的,但是具体原因没有查出来。我想请问一下:1.召回率低是因为样本极度不平衡造成的吗?(虽然我认为1:3的比例不算极度不平衡。)2.在这种样本不平衡的问题上,有没有什么好的方法可以提高召回率?我试过SMOTE方法(过采样和欠采样都有试过),但对于我的数据集并没有什么好的效果,不止到有没有有什么好的方法可以解决这个问题?谢谢!

2017年9月16日 10 条回复 1573 次浏览

回复 ( 10 )

  1. Ryan Fan
    理由
    举报 取消

    最“粗暴”的方法:降低precision,以提高recall。

  2. 王赟 Maigo
    理由
    举报 取消

    1:3不能算极度不平衡。

    如果你475个正样本只能召回5个,往往是程序实现有bug;其次可能的原因是你选取的特征对于你要做的任务没有帮助。

  3. Atuan Yang
    理由
    举报 取消

    个人处理过这个问题,也看到过一些资料,就抛砖引玉了。

    先说网上看到的这个汇总回答,就是针对样本失衡的分类学习的,个人认为其中比较可行简单的方案是

    1,扩大数据量,然后直接把多数类样本随机删除,直到跟少数类样本的量一致。因为扩大了样本量,所以即便删除掉很多样本,也能保证少数累样本的数量够用

    2,把分类问题当成单类模式识别or异常值识别问题。如果失衡问题特别严重,那么换个角度不做二类分类了,就直接当成异常值识别了

    汇总回答的地址是 在分类中如何处理训练集中不平衡问题

    我之前处理这个问题的时候也用过过抽样和欠抽样(SMOTE),但效果也不好。反倒是直接调整分类算法中对两类样本的权重效果会好些。不过代价也是损失precision。内容地址如下权当是看个例子好了 回顾一下毕业论文中的问题

    最后说一下,其实不必过度追求precision吧,感觉很多实际的项目中recall才是更现实的问题。precision往往是用户体验的问题,而recall才是生死存亡是KPI…

  4. cccoder
    理由
    举报 取消

    举个例子,丰田公司的“召回门”事件,当时在全球召回850万辆车,但是这里面真正有问题的车有多少呢?可以理解为丰田公司为了提高“召回率”,下了血本,那也是没有办法的,回到题目,在样本不平衡的情况下提高召回率,只能‘’误杀‘’大部分,就是降低P,这里有一个平衡P和R的一个指标F1,就是两者的调和均值,但是像上面的例子就不需要了,目标就是提高R

  5. stone
    理由
    举报 取消

    1:3不算失衡

  6. Rem C
    理由
    举报 取消

    调整罚函数

  7. 键盘上猪
    理由
    举报 取消

    正好最近在学习不平衡样本问题,正如大牛论文说的,9:1不算失衡,1000:1才算失衡,论文中解决方法都是三类,过采样,欠采样,和代价函数优化,但是个人感觉也许是你特征选取的不好,每个分类器都有其表达能力,对于每种分类器,给他恰当特征才最好效果。

    你用朴素贝叶斯,和二项贝叶斯没有区别,朴素贝叶斯似然就是二项,看你的数据量也不大。

  8. 柯子烜
    理由
    举报 取消

    之前也做过一个文本分类,同样是数据不平衡(1:30),我当时的情况是召回率很高,但准确率很低,同样过采样,欠采样效果不明显。

    不清楚题主具体是什么任务,感觉还是从特征工程方面入手比较合适。

    1、建议查阅下相关文献的做法,是否提取的特征仍然不够好,我们当时baseline只用了TFIDF效果特别差,后来加入word2vec等之后有了明显提升

    2、分析Bad case,PRC,各个特征的权重分布,剔除无效特征,增加有效特征

  9. 一成曾
    理由
    举报 取消

    我也遇到了相似的问题,希望能够给些灵感

    感觉和数据比例没有多少关系,题主中的数据可能缺少共性

    1.考虑数据,是否真的有共性,这里的共性是指正负样本之间是否区别明显,值得学习。

    2.提取特征的时候,观察正负样本之间的特征重合度是否高,高的话意味着数据提取的特征不好,再好的算法解决不了了

    3.确定你要做的目标是什么,然后确定指标,经验在文本分析中precision考虑更多,如果数据量大的话,可以牺牲recall

    4.题主的数据量较少,传统方法应该可以了,深度学习慎重,除非数据量最少达到十万级别

    5.简单调试技巧,画出training过程中的loss 、precision、recall、accuracy等相互变化曲线。

  10. Elvin
    理由
    举报 取消

    两个问题一并回答一下,根据你的描述,我觉得问题应该不是出在正负样本比上,1比3这个比例不但不是非常不均衡,相反在我看来已经是非常均衡了。以前做比赛有处理过正负比1比10000的数据,我觉得这才叫不平衡,才需要使用类似上采样,下采样,以及SMOTE算法(都用过),而且这样的情况下recall,F1等指标的提升是显著的。我觉得正负比例在1:1至1:100间差别都不会太大,需要根据具体问题做离线交叉验证去找到最好的比例。

    所以我建议你不用再纠结正负样本比的问题,可以再回头看一看你的数据集,一方面看一看代码是否有误?数据集是否太小?(总觉得你的数据集太小,而且测试集相对于训练集太大)另外训练集,测试集的划分是否正确?或者重新划分一下训练测试集做一下交叉验证看一看各项指标再具体研究。

我来回答

Captcha 点击图片更换验证码