前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Reddit热议:一道看似简单的分类基础问题,为何难倒一大片人?

Reddit热议:一道看似简单的分类基础问题,为何难倒一大片人?

作者头像
新智元
发布2019-06-23 20:16:28
5420
发布2019-06-23 20:16:28
举报
文章被收录于专栏:新智元新智元


新智元报道

来源:Reddit

编辑:大明

【新智元导读】对于已经投入生产流程的二元分类器,应该如何解决数据不平衡的问题?这时无法增补数据,无法重新训练,应该如何处理?这个看似简单的基础问题着实难倒了reddit上的一位网友,他在17次面试中,有15次被这个问题问倒,只好发到reddit上求助,结果引发热烈讨论。

在机器学习领域,二元分类器问题可以说是一个非常基础的领域,基于二元分类器的模型,已经成为目前多个常见分类模型应用构建的基础。但就是这样一个基础问题,最近却难住了一位Reddit网友。他自称对“主要算法和问题都有所了解,并在一些机器学习领域有所擅长”的情况下,被一个二元分类器问题难倒了。

百思不得其解的他将这个问题发到了reddit上求助,结果成了机器学习版面上的头号热帖。

新智元对帖子内容和部分精彩讨论进行了选编:

目前我正在机器学习领域内求职,在所从事的特定领域中,我对所有主要算法都有所了解,并且能够在特定问题(比如时间序列和回归模型)上发挥作用。在通用数据科学中,我已经能在大多数问题上方面很好地应对了(比如概率问题、概念问题,中心均值定理问题等等......)。

最近,我参加了5家公司的面试,在17位面试官(有两位还是科技界的知名人士)中,有15位都向我提出了这个问题,这个问题真的难住了我,这里向大家请教一下。问题是:

假设现在有一个二元分类器(逻辑回归,神经网络等),应该如何处理在生产流程中产生的不平衡的数据集?

一个看似简单的面试基础问题,为何难倒一大片人?

我必须承认,我不知道怎么回答。我知道对于用来衡量模型的评估标准需要小心处理,应该注意精确度和召回率或roc,而不仅仅是精确度。对于采样策略,应该随时进行改变,以反映每个分类。不过上面这些策略和过程都是在训练过程中完成的。

一旦到了生产流程中,在这个问题上就要面临不少困难的处境:

•如果不对训练数据作一些加工,就没有足够的稀疏数据让分类器从中学习到一些东西,这样的话,分类器就只能预测密集数据的分类,往往达不到生产环境要求。

•如果对数据进行了加工,那么面临的情况可能是,训练数据的分布和生产数据的分布是完全不同的,因此训练出的模型不能很好地完成预测(至少我认为,在测试阶段和生产阶段的数据分布不同,会导致灾难性的后果。

这个两难困境要怎样解决?为什么面试官这么喜欢问这个问题?

还有一些跟进问题和一些思路提示,比如:

如果情况确实如此,即数据集不平衡,而且你是在将二元分类器加入生产环节,并且使用了一段时间之后,经测试才发现预测效果不好,你会怎么做?(我的回答是,回到训练环节找问题,重新评估你想使用哪些特征,或找到更多要训练的数据)。

第二个问题是同一个面试官问的:如果现在说的是同一个模型呢,你怎么办?你现在无法获得更多的数据,这时应该怎么办?(我的回答是:是不是考虑l1或l2正则化?但这些方法适用于任何数据集,而不是针对不平衡的数据。调节K层交叉检验的层数呢?好像也不管用.....)

我想是不是可以在训练之后调整分类器,但在实际部署之前,调整到原始的数据分布,而不是在训练期间使用的(下采样或上采样)分布?(我认为,在实际部署模型之前根据知识对模型进行的任何调整,都算是某种形式的再训练。)

关于第二个问题,我之前确实遇到过

(https://stats.stackexchange.com/a/403244/89649)。它只适用于逻辑回归,不适合任何其他二元分类器。那么试试其他分类器怎么样?(在数据不平衡的情况下,逻辑回归是不是唯一合适的算法?)

网友热议:这问题我也经常问,没有标准答案,你答得不错

Reddit网友显然对这个问题并不陌生,在评论中对这个看似简单的基础问题展开了热烈讨论,其中有些人显然是用这个问题面试过不少人,比如:

嗯。这个问题我在面试别人时问过不下20次。

我提出这个问题的主要目的是考察对追求训练精度需求和基于精度的返回(roc)的理解。在采样策略上,其实可以有很多不同选择,包括上采样和下采样,这一点我觉得你理解得不错。一些情况下需要进行数据增补,但一般只涉及少数图像数据集。 最后是寻找损失函数。可以在少数分类错误时对模型进行惩罚,局部损失函数和焦点损失函可以稍有区别。当然你也可以说一些“找更多的数据”这样的废话,不过你的简历可能就要被刷了。 或者你可以说一些其他的内容,比如半监督学习什么的。

还有的网友同样从面试者角度出发,指出这个问题对于不同人群的侧重点是不同的,并对提问者的回答表示了充分肯定。

不同人群关注侧重点不同,看清自己的定位

你已经答得不错了。我在面试时首先会问面试者错误分类成本是否也存在着不平衡。如果没有,就没有需要解决的问题了。 根据面试对象的不同,我认为你的回答的侧重点也应该有所区别。比如:

  • 统计学家最感兴趣的是损失函数
  • 商务人士最希望听到对期望利润的一些估计,以及分类损失函数。
  • 工程师更希望获得更高的精度、返回值等等,因为这些指标大部分解决的是数据不平衡的问题,他们不需要将时间浪费在自己不理解的与商业有关的损失函数和统计学概念上。

还有人表示,向求职者提出这个问题,实际上不是要对方给出答案,而是考察求职者的思维深度和广度以及批判性的思维能力。看看,高度就是不一样。

实际是考察思维深度和广度,而不是答案本身

这是一道非常好的面试问题,可以考察面试人的知识广度和深度,以及批判性思维能力。 这个问题没有任何万能答案,可以100%适用所有情况,所以这个问题其实最终更目的多的是在讨论,而不是追求答案。面试者希望看到你提出一些想法,并解释每个想法的优缺点,他们想深入了解你的一些想法,看看你对这个主题的理解程度究竟如何。然后抛出一些问题,看看你能思考到什么程度。 有些问题,即使用了谷歌搜索,也仍然无法得出正确答案。这通常表明这个问题提得非常之好。

还有人认为,可能是在模型的选择上出了问题,或者学习的特征与任务实际不相适应。

是不是模型选择有问题?

从面试问题的角度来看,我认为这个问题的重点是:仔细考察数据,不能将算法视为黑盒子。 为什么模型在生产过程中表现不佳?是否存在偏离数据(或错误数据)的异常值?训练时的数据与生产过程中观察到的数据遵循相同的分布吗?这两类数据很容易区分吗?机器学习艺术的很大一部分是数据的可视化。 还有,你选择的模型合适不合适?如果是二元分类任务,选择支持向量机(SVM)可以增加鲁棒性,因为它不仅适合单个超平面,而且可以最大化边距。同样,如果数据集太小,可以尝试贝叶斯方法并使用强大的先验数据。是否选择或学习了与任务适合的特征? 说白了,问这个问题是为了看看你以前是不是用过真实的数据

新智元的小伙伴们,不知你们对这个问题怎么看,在面试中是否遇见过?你们又是怎么回答的呢?欢迎在回帖中分享各位的看法。

参考链接:

Reddit:

https://www.reddit.com/r/MachineLearning/comments/c1vxoc/d_17_interviews_4_phone_screens_13_onsite_5/?sort=top

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 新智元 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【新智元导读】对于已经投入生产流程的二元分类器,应该如何解决数据不平衡的问题?这时无法增补数据,无法重新训练,应该如何处理?这个看似简单的基础问题着实难倒了reddit上的一位网友,他在17次面试中,有15次被这个问题问倒,只好发到reddit上求助,结果引发热烈讨论。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档