# 如何定义机器学习问题

> 原文： [https://machinelearningmastery.com/how-to-define-your-machine-learning-problem/](https://machinelearningmastery.com/how-to-define-your-machine-learning-problem/)

任何项目的第一步都是定义您的问题。您可以使用最强大，最闪亮的算法，但如果您正在解决错误的问题，结果将毫无意义。

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

[![What is the problem?](img/728f17058ab4cb5e7538644838484248.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2013/12/question.jpg)

问题是什么？
照片归属于 [Eleaf](http://www.flickr.com/photos/eleaf/2536358399/sizes/l/) ，保留一些权利

## 问题定义框架

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

该框架涉及回答三个问题，以达到不同程度的彻底性：

*   **第1步**：有什么问题？
*   **第2步**：为什么需要解决问题？
*   **第3步**：我该如何解决这个问题？

## 第1步：问题是什么

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

### 非正式的描述

描述问题，就像您向朋友或同事描述一样。这可以为突出显示您可能需要填充的区域提供一个很好的起点。它还提供了一个句子描述的基础，您可以使用它来分享您对问题的理解。

例如：_我需要一个程序来告诉我哪些推文会转发。_

### 形式主义

在之前的博客文章[定义机器学习](http://machinelearningmastery.com/what-is-machine-learning/ "What is Machine Learning: A Tour of Authoritative Definitions and a Handy One-Liner You Can Use")中，您了解了Tom Mitchell的机器学习形式。这里再次刷新你的记忆。

> 据说一个计算机程序可以从经验`E`中学习某类任务`T`和表现测量`P`，如果它在_的任务中的表现通过`P`测量的T_ 随经验`E`而改善。

使用这种形式来定义`T`，`P`和`E`来解决您的问题。

例如：

*   **任务**（`T`）：将尚未发布的推文分类为转发或不转发。
*   **经验**（`E`）：一个帐户的推文语料库，其中一些有转推，有些则不转。
*   **表现**（`P`）：分类准确率，所有推文中正确预测的推文数量被视为百分比。

### 假设

创建一个关于问题及其措辞的假设列表。这些可能是经验法则和特定于域的信息，您认为这些信息可以让您更快地获得可行的解决方案。

突出可以针对实际数据进行测试的问题可能很有用，因为当假设和最佳实践在实际数据面前被证明是错误的时候会出现突破和创新。突出可能需要挑战，放松或收紧的问题规范区域也是有用的。

For example:

*   推文中使用的特定词语与模型有关。
*   转发的特定用户与模型无关。
*   转推的数量可能对模型有影响。
*   较早的推文比最近的推文更不具有预测性。

[![question everything](img/c1ad17e98216756c24376c6529da4c02.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2013/12/question-everything.jpg)

质疑一切！
照片归于 [dullhunk](http://www.flickr.com/photos/dullhunk/202872717/sizes/l/) ，保留一些权利

### 类似的问题

您看到了哪些其他问题或者您能想到的问题就像您要解决的问题一样？其他问题可以通过强调问题措辞的局限性来解决您试图解决的问题，例如时间维度和概念漂移（建模的概念随着时间的推移而变化）。其他问题也可以指向可用于检查表现的算法和数据转换。

例如：一个相关问题是电子邮件垃圾邮件歧视，它使用文本消息作为输入数据，需要二分类决策。

## 第2步：为什么需要解决问题？

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

### 动机

考虑一下解决问题的动机。问题解决后需要满足什么？

例如，您可能正在将问题解决为学习练习。这有助于澄清，因为您可以决定不想使用最合适的方法来解决问题，而是想要探索您不熟悉的方法以学习新技能。

或者，您可能需要将问题作为工作职责的一部分来解决，最终是为了保住您的工作。

### 解决方案优势

考虑解决问题的好处。它能够实现哪些功能？

重要的是要清楚解决问题的好处，以确保您充分利用它们。这些好处可用于将项目出售给同事和管理层以获得购买和额外的时间或预算资源。

如果它对您个人有益，那么请明确这些好处是什么以及您何时获得这些好处。例如，如果它是一个工具或实用程序，那么你可以用你现在不能做的那个实用程序做什么，为什么这对你有意义？

### 解决方案使用

考虑如何使用问题的解决方案以及您期望解决方案具有的生命周期类型。作为程序员，我们经常认为工作是在程序编写完成后立即完成的，但实际上项目只是开始维护生命周期。

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

考虑您是否要编写报告以显示结果，或者您希望操作解决方案。如果要实现解决方案，请考虑解决方案的功能和非功能需求，就像软件项目一样。

## 第3步：我如何解决问题？

在问题定义的第三步也是最后一步，探索如何手动解决问题。

逐步列出您将收集哪些数据，如何准备它以及如何设计程序来解决问题。这可能包括您需要执行的原型和实验，这些都是金矿，因为它们将突出您对可以探索的领域的问题和不确定性。

这是一个强大的工具。它可以突出显示使用手动实现的解决方案可以令人满意地解决的问题。它还刷新了迄今为止存在的重要领域知识，例如数据实际存储的位置，哪些类型的功能有用以及许多其他细节。

收集所有这些细节，并更新问题定义的前几部分。特别是假设和经验法则。

在描述[为什么机器学习很重要](http://machinelearningmastery.com/machine-learning-matters/ "Machine Learning Matters")中的复杂问题之前，我们已经考虑过手动指定的解决方案。

## 摘要

在这篇文章中，您了解了明确解决问题的价值。您发现了一个三步框架，用于在步骤中使用实用策略定义您的问题：

*   **第1步：有什么问题？** 非正式地和正式地描述问题并列出假设和类似问题。
*   **第2步：为什么需要解决问题？** 列出解决问题的动机，解决方案提供的好处以及解决方案的使用方法。
*   **第3步：我该如何解决这个问题？** 描述如何手动解决问题以刷新领域知识。

你如何定义机器学习的问题？您是否使用过上述任何一种策略？如果是，您的经历是什么？发表评论。