如何定义你的机器学习问题

任何项目的第一步都是定义问题。你可以使用最强大、最先进的算法,但如果你解决的是错误的问题,那么结果将毫无意义。

在这篇文章中,你将学习到在开始之前如何深入思考问题的过程。这无疑是应用机器学习最重要的方面。

What is the problem?

问题是什么?
照片归属于 Eleaf,保留部分权利

问题定义框架

在定义一个要用机器学习解决的新问题时,我使用一个简单的框架。这个框架帮助我快速理解问题的要素和动机,以及机器学习是否适用。

该框架涉及以不同程度的详尽度回答三个问题

  • 第 1 步:问题是什么?
  • 第 2 步:为什么需要解决这个问题?
  • 第 3 步:我将如何解决这个问题?

第 1 步:问题是什么

第一步是定义问题。我使用多种策略来收集这些信息。

非正式描述

像向朋友或同事描述问题一样来描述它。这可以为你提供一个很好的起点,突出你可能需要补充的领域。它还为你提供了一个可以用一句话来分享你对问题的理解的基础。

例如:我需要一个程序,能告诉我哪些推文会被转发。

形式化

在之前一篇关于定义机器学习的博文中,你学习了 Tom Mitchell 的机器学习形式化定义。这里再回顾一下以加深你的记忆。

一个计算机程序被认为从经验 E 中学习,针对某一类任务 T 和性能度量 P,如果它在 T 中的任务上的性能(用 P 度量)随着经验 E 的增加而提高。

使用这个形式化定义来界定你问题的 TPE

例如:

  • 任务 (T):将一条尚未发布的推文分类为会被转发或不会被转发。
  • 经验 (E):一个账户的推文语料库,其中一些被转发了,一些没有。
  • 性能 (P):分类准确率,即正确预测的推文数量占所有被考虑的推文总数的百分比。

假设

创建一个关于问题及其表述的假设清单。这些可能是你认为能让你更快地得到可行解决方案的经验法则和领域特定信息。

突出那些可以用真实数据检验的问题是很有用的,因为当假设和最佳实践在真实数据面前被证明是错误时,就会出现突破和创新。突出问题规范中可能需要挑战、放宽或收紧的领域也很有用。

例如:

  • 推文中使用的特定词语对模型很重要。
  • 转发的具体用户对模型不重要。
  • 转发的数量可能对模型很重要。
  • 较旧的推文比最近的推文预测性更差。
question everything

质疑一切!
照片归属于 dullhunk,保留部分权利

类似问题

你见过或能想到的其他类似你正在尝试解决的问题有哪些?其他问题可以通过突出你对问题表述中的局限性(例如时间维度和概念漂移,即被建模的概念随时间变化)来为你要解决的问题提供信息。其他问题也可以指向可以用来检验性能的算法和数据转换方法。

例如:一个相关的问题是电子邮件垃圾邮件识别,它使用文本消息作为输入数据,需要进行二元分类决策。

第 2 步:为什么需要解决这个问题?

第二步是深入思考你为什么想要或需要解决这个问题。

动机

考虑你解决这个问题的动机。当问题解决后,什么需求会得到满足?

例如,你可能把解决这个问题当作一个学习练习。明确这一点很有用,因为你可以决定不使用最适合的方法来解决问题,而是想探索你不熟悉的方法以学习新技能。

或者,你可能需要解决这个问题作为工作职责的一部分,最终是为了保住你的工作。

解决方案的好处

考虑解决问题后带来的好处。它能实现哪些能力?

明确问题解决后的好处非常重要,以确保你能充分利用它们。这些好处可以用来向同事和管理层推销项目,以获得支持和额外的时间或预算资源。

如果这对你个人有好处,那么要清楚这些好处是什么,以及你如何知道你已经得到了它们。例如,如果它是一个工具或实用程序,那么有了这个实用程序你将能做什么现在做不到的事情,以及为什么这对你有意义?

解决方案的使用

考虑问题的解决方案将如何被使用,以及你期望该解决方案的生命周期是怎样的。作为程序员,我们常常认为程序一写完工作就完成了,但实际上项目只是刚刚开始其维护生命周期。

解决方案的使用方式将影响你所采用解决方案的性质和要求。

考虑你是想写一份报告来呈现结果,还是想将解决方案投入运营。如果你想将解决方案投入运营,就像一个软件项目一样,考虑你对解决方案的功能性和非功能性要求。

第 3 步:我将如何解决这个问题?

在问题定义的第三步也是最后一步,探索你将如何手动解决这个问题。

一步一步地列出你将收集什么数据,如何准备它,以及你将如何设计一个程序来解决这个问题。这可能包括你需要执行的原型和实验,这是一座金矿,因为它们会突出你对该领域存在的疑问和不确定性,这些都可以进行探索。

这是一个强大的工具。它可以突出那些实际上可以用手动实现的解决方案令人满意地解决的问题。它还能梳理出至今为止被困住的重要领域知识,比如数据实际存储在哪里,什么类型的特征会有用,以及许多其他细节。

在你想到这些细节时收集它们,并更新问题定义的前几个部分。特别是假设和经验法则。

我们在描述为什么机器学习很重要中的复杂问题时,曾经考虑过手动指定的解决方案。

总结

在这篇文章中,你学习了明确你正在解决的问题的价值。你发现了一个三步框架来定义你的问题,每一步都有实用的策略

  • 第 1 步:问题是什么?非正式和正式地描述问题,并列出假设和类似问题。
  • 第 2 步:为什么需要解决这个问题?列出你解决问题的动机、解决方案提供的好处以及解决方案将如何被使用。
  • 第 3 步:我将如何解决这个问题?描述如何手动解决问题以梳理领域知识。

你如何为机器学习定义你的问题?你是否使用过上述任何策略?如果使用过,你的经历是什么?请留言。

如何定义你的机器学习问题的 134 条回应

  1. Gusseppe 2016年5月2日 at 6:12 pm #

    这太有用了!

  2. Joe Arakkal 2016年7月10日 at 2:12 pm #

    对第一步——目的,也就是问题定义,思考得非常周到。
    谢谢你,Jason。读你的博客总是一种享受。请继续写下去,这样你就可以继续教育世界。非常感谢你!!

    • Jason Brownlee 2016年7月10日 at 2:21 pm #

      谢谢你,Joe,我很高兴你觉得它有用。

  3. Kola 2016年7月31日 at 9:28 am #

    非常感谢这篇文章。它为我如何启动新任务指明了方向。请问是否有其他文章扩展了这里讨论的步骤?

    • Jason Brownlee 2016年8月1日 at 6:28 am #

      很高兴听到这个消息,Kola。这可能是我唯一讨论这些想法的地方。

  4. Federica 2016年9月19日 at 6:35 pm #

    这篇文章非常有用,谢谢你。它帮助我专注于重点。我目前正在写我的第一篇论文,我真的觉得这非常有帮助!

  5. Vicky 2016年10月2日 at 4:23 pm #

    我还在努力理解我的问题 🙁(使用机器学习算法检测恶意 Office 文档),请帮忙。

  6. Prakriti 2016年10月25日 at 6:54 am #

    在第 3 步下,你的意思是要决定我们将使用哪种算法吗?

    • Jason Brownlee 2016年10月25日 at 8:35 am #

      不完全是,Prakriti。

      它建议把问题当作一个编程练习来思考,思考你需要做什么来解决它,你需要什么数据,什么结构等等。

      这可以帮助你在一开始就深入思考问题,并思考你以后可能需要使用的其他数据或数据转换,甚至可能是什么技术。

      在此处查看完整过程
      https://machinelearning.org.cn/start-here/#process

  7. Andrey Naumov 2016年10月27日 at 1:32 am #

    Jason,感谢你的这些想法。
    这是一个很好的开始和理解我想要/能做什么的方式。

  8. Ivan 2016年11月8日 at 7:28 am #

    第 1 步和第 2 步的问题对我写论文的引言非常有帮助!

    • Jason Brownlee 2016年11月8日 at 10:00 am #

      很高兴听到这个消息,Ivan。做得好!祝你的论文顺利(我经历过……)。

  9. yasH 2017年2月9日 at 1:01 am #

    慢性肾病检测..需要什么样的数据集

    • Jason Brownlee 2017年2月9日 at 7:26 am #

      我不知道,也许你应该联系一位领域专家?

  10. Norman Abraham 2017年9月7日 at 11:59 am #

    晚上好,

    我一直在寻找关于 k-means 输出及其含义的信息。

    你是否有关于此的信息?

    谢谢你,

    Norm

    • Jason Brownlee 2017年9月7日 at 12:58 pm #

      抱歉,我没有关于 k-means 聚类的资料。

  11. Abhishek 2017年9月17日 at 1:51 pm #

    先生,我想创建一个性能分析工具。在其中,我将跟踪我做的工作量和我在中间休息的时间。我将为我的每项工作分配强度级别。我会将该强度与我做那项工作的小时数相乘。一天结束时,我会将这些值相加,从而得到我的表现。每天我都会尝试用不同工作强度和投入时间的组合来检查我的表现。那么,最终机器学习能帮助我规划我的工作吗?这样我就能用最少的时间完成工作。或者,机器学习能否给我一个预测,如果我输入我一整天的计划,包括我将工作多少时间和休息多少时间,它会给我其实现的可能性百分比。

  12. Roaa 2017年11月16日 at 8:13 am #

    太完美了,愿你的双手长存。

  13. Alex Lange 2017年11月28日 at 7:59 am #

    对于我这个新手来说,这是一份很棒的资料集。谢谢你!这个特定的模型让我想起了一本(曾经)著名的书,乔治·波利亚的《如何解决它》,一种启发式的数学方法。他有一页总结的问题,详细阐述了你的三个问题。你可能会觉得比较一下很有趣。完整的 PDF 在 https://notendur.hi.is/hei2/teaching/Polya_HowToSolveIt.pdf

    特别参见第 xvi — xvii 页的问题

    维基百科总结:https://en.wikipedia.org/wiki/How_to_Solve_It

    • Jason Brownlee 2017年11月28日 at 8:43 am #

      谢谢,是的,我记得学生时代读过那本书。

  14. Rizwan Mian 2017年12月23日 at 3:14 am #

    嗨,Jason 和各位 ML 爱好者,不知道是否有人能给我指点一些关于定义问题的例子?

  15. Jesús Martínez 2018年2月7日 at 10:18 am #

    非常感谢这篇文章。正如你在文章中指出的,第三点是关键(在我们定义问题背景时可以说是最重要的),并且可以大大提高解决方案的开发速度。与软件工程的任何其他领域一样,立即开始编码是导致次优解决方案(和 bug!)的绝佳配方。

  16. Hussain Liyaqatdar 2018年2月16日 at 6:17 pm #

    嗨,Jason,
    我喜欢基于 Tom Mitchell 著名的机器学习定义的问题定义“TEP”方法。我也一直思考“为什么这个问题需要被解决”,但我感觉从解决方案的好处或解决方案的使用方面进行记录,并考虑项目的生命周期维护是完全有道理的。

    感谢你所有的内容,我每天都在学习!

    另外我想问一下,投资芝加哥大学格雷厄姆学院(例如)的正式远程学习课程,在长期来看是否能帮助验证我的能力,还是我应该继续自学?

    谢谢,
    Hussain

    • Jason Brownlee 2018年2月17日 at 8:43 am #

      谢谢。

      如果你喜欢这个课程,那就去上吧。我不能给你关于什么适合你的建议。

  17. Mahesh 2018年2月20日 at 9:29 pm #

    在高维数据方面,q-learning 和 deep q-learning 有什么区别?

    • Jason Brownlee 2018年2月21日 at 6:40 am #

      我希望很快能更详细地介绍强化学习。

  18. Hamid 2018年4月4日 at 10:38 pm #

    首先,非常感谢这些内容。
    其次:RL 算法有哪些类型?或者你是否知道可以找到所有可能类型的参考资料?(我需要它来写我的论文)

  19. Hans 2018年4月17日 at 8:22 am #

    嗨 Jason,我有个关于数据的问题,没有欺诈数据集的情况下,是否可以进行欺诈检测研究?如果不行,有没有替代方案?

    • Jason Brownlee 2018年4月17日 at 2:48 pm #

      使用机器学习不行。用机器学习开发预测模型需要一个数据集。

  20. Elza 2018年4月28日 at 12:10 pm #

    这很有启发性,但对我现有的问题,即用 stl10 数据集训练模型,帮助不大。我很困惑为什么损失总是在一个很小的范围内波动,这意味着在大量的 epoch 后没有明显的下降。我是这个领域的新手,我该如何微调我的模型参数?这可能是由什么原因造成的?

  21. Raisa Rasul 2018年5月14日 at 3:44 am #

    我刚开始学习机器学习,这非常有帮助!

  22. PTR 2018年7月6日 at 1:42 am #

    这很有帮助……写得好..继续发帖.!!!

  23. Faisal Mohammad 2018年7月6日 at 3:55 pm #

    很好,我正在用 Matlab 开始机器学习。它比 Python 好吗?
    我的工作是预测电力需求。我们在 Matlab 中有很多预定义的算法,你认为它们会运行得很好吗?

  24. vinky 2018年7月28日 at 1:56 am #

    谢谢,Jason,它真的帮助我理解了 ML 的基本概念。

  25. Ahmed 2018年7月30日 at 2:43 pm #

    非常感谢,这很有用。

  26. Kamalendu 2018年8月11日 at 12:40 pm #

    太棒了..!! 谢谢你,Jason 先生。

  27. vedaste 2018年8月19日 at 6:48 am #

    我很感兴趣!我欣赏所有的解释!

    我想知道你是否能和我们分享一步步构建算法的代码!

  28. zsoh 2018年8月27日 at 9:23 pm #

    真的很有用。有时候(就像我的情况),我们有一堆问题,但想一次性解决它们。
    谢谢!

  29. Bewketu 2018年10月7日 at 5:55 pm #

    感谢您提供这些宝贵的信息。

  30. Dan Gustafsson 2018年11月4日 at 10:35 pm #

    嗨,很棒的资源,我喜欢第 3 步,但第 2 步不喜欢!为什么?现在大多数科技行业的人似乎都在矩阵式组织中工作,因此协作和推动通过协作寻找商业价值比任何事情都重要。所以第 2 步,“动机”部分,可能需要包括除了你自己以外的其他人,作为真正的受益者。所以你需要和他们保持密切联系,理解他们的真正需求。为自己解决机器学习问题不会让其他人受益,大多数情况下是这样(除非你在你的组织中扮演别人的角色,解决一个他们没有要求/想到的问题)。干杯!

  31. dy 2018年11月26日 at 1:04 pm #

    总是很有帮助的文章!

  32. Nidhi 2018年12月12日 at 7:02 pm #

    谢谢你,Jason。这对开始学习机器学习非常有帮助。

  33. Eli Mead 2018年12月17日 at 4:53 am #

    很棒的文章,非常感谢!

  34. Vijay 2019年1月13日 at 5:31 pm #

    开始学习机器学习的好信息。我已经阅读了所有步骤,但你能否更详细地解释一下第 3 步:我将如何解决问题?
    这里我不明白“手动”是什么意思?
    能用例子解释一下吗…
    谢谢,

    • Jason Brownlee 2019年1月14日 at 5:23 am #

      在这种情况下,我是在提示你思考,如果你必须从头开始编写一个解决方案,你可能会如何处理这个问题。

      这对于一个真正的预测建模问题是做不到的,但对于其他问题可以。这有助于理清那个问题。

  35. Ali 2019年3月2日 at 1:30 am #

    你好,
    我是深度学习的新手,我想将一张 MRI 图像分类为三个类别:白质、灰质和脑脊液……?

    • Jason Brownlee 2019年3月2日 at 9:33 am #

      听起来是个很有趣的问题。

      也许可以从 CNN 开始,并尝试一些迁移学习来快速获得好的结果。

  36. adarsh v kumar 2019年3月16日 at 4:15 pm #

    先生,能给我你的邮箱地址吗?

  37. Muhammad iqbal bazmi 2019年4月27日 at 4:08 pm #

    先生,感谢这篇文章。
    我想从歌曲中移除音乐,但保留人声。
    我该怎么做,有什么线索吗?
    请回答。

    • Jason Brownlee 2019年4月28日 at 6:54 am #

      听起来是个很棒的项目!

      我没有任何与此相关的教程,但也许可以在 arxiv 上搜索相关项目,看看他们在使用什么类型的方法?

  38. Muhammad iqbal bazmi 2019年4月27日 at 4:10 pm #

    对不起,先生,我不想移除人声。

  39. teimoor 2019年4月29日 at 5:53 am #

    嗨,能给我发一本关于机器学习的书吗?

  40. Gaurav Jain 2019年7月3日 at 5:35 pm #

    谢谢你,Jason!

  41. Wael Elsayegh 2019年8月11日 at 12:55 am #

    谢谢,关于数据收集!如果我在从视频中检测时遇到问题该怎么办?
    你这里有相关的教程吗?

    • Jason Brownlee 2019年8月11日 at 6:01 am #

      我没有关于处理视频数据的教程,我希望将来能涵盖这个主题。

  42. Kate 2019年8月16日 at 9:04 pm #

    感谢这篇文章。我发现它简洁明了,写得很好。它将有助于我的初步研究。在与一位同事软件开发人员合作后,我想知道需要多少“数据”才能使用机器学习算法。我的印象是,每个标签至少需要几千个数据才能接近有指示性。在一个包含 2500 个项目,分布在 25 个不同标签的数据集上开发算法有意义吗?

  43. Bayangmbe 2019年10月23日 at 5:55 pm #

    嗨,又是我。
    我提出我的机器学习问题:如今非洲农民在不知道土壤潜力的情况下进行农业生产,通过我的程序,根据土壤的肥沃程度,我预测农民可以种植的农作物,而无需使用化肥。

  44. Jod Baka 2019年10月28日 at 2:23 am #

    我想知道,问自己这些问题时,我们是否需要在接触我们将要使用的数据之前,写下所有特征和对这些问题的答案?

  45. ali 2020年5月20日 at 6:40 pm #

    你好,谢谢。
    如何在我的论文中引用你的内容?

  46. Snehal 2020年5月31日 at 10:52 am #

    哇,这是一篇很棒的文章。不过有一个问题,实际的算法开发发生在哪里?我假设在第 3 步之后。第 3 步是收集数据、设置模型。我可能对算法如何随时间学习,或者给出接近准确的答案有点不清楚。这可能与我的软件代码开发背景有关。你有什么可以指导我的参考页面吗?非常感谢。这个页面对我非常有帮助。

  47. William Priest 2020年6月2日 at 6:53 am #

    通过我的 MIT 斯隆 CSAIL:人工智能课程看到了你的文章。这种在这个领域解决问题的结构化方法非常到位。作为一名工程师和数据爱好者,我更喜欢有助于持续解决问题的结构。非常有帮助。

  48. JB 2020年6月3日 at 5:59 pm #

    我觉得这真的很有用,即使我对机器学习的理解还很初级。
    我想说这对于处理任何问题解决都是一个很好的过程!

  49. Vidya 2020年6月5日 at 2:46 pm #

    嗨,Jason。

    我怎么知道我的机器学习解决方案是好的,并且没有更好的方法来做它呢?是的,一个检查点是模型指标,但当我在指标上无法改进时,我感到很困惑。这正常吗?或者,最好是至少两人一组来做一个项目,这样可以进行同行评审?还是我们找一个可以做同行评审的导师?

  50. Lama 2020年7月6日 at 7:40 pm #

    嘿,Jason
    非常感谢这篇文章!
    能请你多解释一下这句话吗?
    “如果你想将解决方案投入运营,请考虑你对解决方案的功能性和非功能性要求”

  51. Joy 2020年7月18日 at 12:04 am #

    这是我作为初学者遇到的最有用的文章/教程。感谢你这宝贵的一课。

  52. Pravinkumar Balasaheb More 2020年9月23日 at 1:32 am #

    非常感谢这篇文章,Jason。这真的帮助我写了一篇博客作为项目作业。你有没有写过关于下面第 2、3、4、5 和 6 个副标题的链接。

    1. 问题解决
    2. 数据分析
    3. EDA 总结
    4. 预处理管道
    5. 建立机器学习模型
    6. 总结

    如果你能发布链接的话。不过,这确实帮了大忙。

    • Jason Brownlee 2020年9月23日 at 6:41 am #

      是的,你可以使用博客搜索来找到它们。

  53. sarah 2020年10月14日 at 6:48 pm #

    非常感谢你
    我觉得这样你在开始写代码之前能节省更多时间。

  54. Samuel Nyarko 2020年10月29日 at 8:33 am #

    非常有帮助。

  55. A 2020年12月20日 at 7:36 pm #

    我第一次读这个,我是机器学习新手,但我跟得很好。写得非常清楚简洁。谢谢你。

  56. Harshit Gupta 2020年12月23日 at 6:29 pm #

    干得漂亮!!

  57. George 2021年2月24日 at 10:29 am #

    这是一篇很棒的文章。它清晰,写得很好。谢谢你!

  58. Felix Lluberes 2021年2月26日 at 4:56 am #

    感谢提供信息。在我们寻求在组织中实施 AI 时,这篇文章帮助我构建了一些挑战和机遇。

  59. Abhishmita 2021年3月3日 at 3:10 am #

    谢谢你,Jason,我正在为我的作品集制作一个新的数据科学项目,这篇文章给了我极大的帮助。我前段时间有个面试,被问到了类似的问题,我对这个过程有了解,但没能很好地表达出来。这非常有帮助。

  60. jean-christophe chouinard 2021年3月26日 at 9:28 am #

    机器学习不仅仅是数据和编程。它也需要人来支持项目。谢谢。

  61. jagriti 2021年5月26日 at 7:52 pm #

    我们可以在超市应用机器学习算法来减少付款柜台的排队等待时间吗?

  62. Amaal 2021年6月2日 at 8:41 pm #

    非常感谢,这对我很有帮助。

  63. luthe 2021年8月5日 at 2:35 am #

    感谢你这篇文章,我很高兴读到你的文章。
    我目前正在做一个项目,创建一个机器人,可以根据用户通过消息系统输入的数据向他们提供服务(餐厅、药店等)。现在,多亏了这篇文章,我对一些事情提出了疑问。首先,我想知道我是否应该用一个包含每个合作公司信息的数据集来训练模型,这将使机器人能够根据客户输入的内容提供服务或公司。或者,我应该先在包含对话数据的数据集上训练模型,以便让机器人理解并与用户交流。另外,我希望你能给我推荐一些与我问题相关的数据集,因为我找到的那些数据不够多。
    请帮帮我,先生。

    • Jason Brownlee 2021年8月5日 at 5:24 am #

      这具体取决于你的项目,我不知道。也许你可以与项目利益相关者或你所在领域的专家讨论这个问题。

  64. LUMBOL TITYEM ZUZUL 2021年8月27日 at 6:09 am #

    太棒了。请继续做好工作,只有上帝会回报你。

  65. Anandan 2021年9月29日 at 3:37 pm #

    1. 从经验中学习有其局限性。在某种环境下发生的某个事件,产生一个结果,以及最重要的,对这个结果的解读,我们称之为经验。对于同一个事件,没有两个人会获得相同的经验;甚至同一个人在不同心态下对同一事件也会产生不同的经验。人类容易出现判断失误。机器不会自己学习,它从根本上总会以某种方式受到人类的引导。人们怎么能接受或相信机器的学习是万能的灵丹妙药呢?
    2. 一些最伟大的发明始于解决方案,而发现问题则是在之后。

  66. Muhammad Waseem 2022年6月15日 at 4:37 am #

    您解答了我脑海中所有关于我们为何要这样做的疑问,非常感谢!

    • James Carmichael 2022年6月15日 at 7:15 am #

      感谢您的精彩反馈,Muhammad!

  67. Ahmed 2024年7月18日 at 7:36 am #

    非常感谢,这工作做得太棒了。

  68. Ndidi 2024年9月12日 at 8:57 pm #

    非常感谢这篇文章,它对我这个机器学习初学者非常有帮助。

    • James Carmichael 2024年9月13日 at 7:41 am #

      你好,Ndidi... 非常欢迎!如果对我们的内容有任何疑问,请随时告诉我们。

发表评论

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。