你如何能在一个又一个问题上利用机器学习获得准确的结果?
困难在于,每个问题都是独一无二的,需要不同的数据源、特征、算法、算法配置等等。
解决方案是使用一个核查清单,确保每次都能获得好的结果。
在这篇文章中,你将发现一个核查清单,你可以用它来可靠地在你的机器学习问题上取得好结果。

机器学习核查清单
照片由 Crispy 拍摄,保留部分权利。
每个数据问题都不同
在开始之前,你不知道哪种算法在一个问题上效果最好。
即使是专家级的数据科学家也无法告诉你。
这个问题不仅限于机器学习算法的选择。你无法知道哪些数据转换和数据中的哪些特征(如果被揭示出来)能最好地向算法呈现问题的结构。
你可能有一些想法。你也可能有一些偏爱的技术。但你怎么知道上次让你取得成果的技术这次也会让你取得好成果呢?
你怎么知道这些技术可以从一个问题迁移到另一个问题?
启发式方法是一个很好的起点(随机森林在大多数问题上表现良好),但它们仅此而已。只是一个起点,而不是终点。
不要在每个问题上都从零开始
你不需要在每个问题上都从头开始。
就像你可以使用机器学习工具或库来利用机器学习的最佳实践实现一样,你也应该在解决问题时利用最佳实践。
否则,你每次遇到新问题都得重新摸索。结果是你忘记或跳过了关键步骤。你花费的时间比需要的更长,得到的结果准确性更低,而且可能乐趣也更少。
除非你一开始就定义了解决方案及其预期用途,否则你怎么知道你已经完成了对一个机器学习问题的处理?
如何可靠地获得准确的结果
你可以在你的机器学习问题上可靠地获得准确的结果。
首先,这是一个经验性问题。用什么算法?用什么属性?你必须想出各种可能性并进行尝试。你必须通过实验来找到这些问题的答案。
把每个数据集都当作一个搜索问题。找到一个能给出好结果的组合。你花在搜索上的时间将与结果的好坏相关。但是,有一个拐点,你会从取得巨大进展转向收益递减。
换句话说,数据准备、数据转换、模型选择、模型调优、集成等等的选择是一个组合问题。有很多组合是可行的,甚至有很多组合是足够好的。
通常你不需要最好的解决方案。事实上,最好的解决方案可能正是你不想看到的。它可能需要高昂的代价才能找到,它可能对数据的扰动很脆弱,而且很可能是过拟合的产物。
你想要一个好的解决方案,一个对于你正在处理的特定问题来说足够好的解决方案。通常一个足够好的解决方案是快速、廉价且稳健的。这是一个更容易解决的问题。
此外,如果你认为你需要最好的解决方案,你可以把一个足够好的解决方案作为你的第一个检查点。
这个从“最准确”到“足够准确”结果的简单重构,是你如何能保证在每个你处理的机器学习问题上都取得好结果的方法。
你需要一个机器学习核查清单
你可以使用一个核查清单来构建你对正确元素组合的搜索,从而可靠地为任何机器学习问题提供一个好的解决方案。
核查清单是一个简单的工具,可以保证结果。它们在经验领域中被广泛使用,在这些领域中,知识来之不易,而有保障的结果是非常可取的。
例如,在航空领域,如起飞时使用飞行前核查清单。还有在医学领域,有手术核查清单,以及其他领域,如安全合规。
关于核查清单的更多信息,请参阅《清单革命:如何把事情做对》这本书。
如果一个结果很重要,为什么每次都要临时制定流程。遵循一套明确定义的步骤来找到解决方案。

核查清单是航空业日常生活的一部分。
照片由 Jeffery Wong 拍摄,保留部分权利。
机器学习核查清单的好处
使用核查清单来处理机器学习问题的5个好处是:
- 减少工作量:你不必为每个新问题都想出所有要尝试的技术。
- 更好的结果:通过遵循所有步骤,你可以保证得到一个好的结果,可能比一般结果要好。事实上,它能确保你至少得到一个结果。许多项目因各种原因而失败。
- 改进的起点:你可以将其作为一个起点,并在想到更多要尝试的事情时进行补充。而你总是会有的。
- 未来的项目受益:你所有未来的项目都将从对流程的改进中受益。
- 可定制的流程:你可以为你的工具、问题类型和偏好设计最好的核查清单。
机器学习算法非常强大,但要把它们当作一种商品。如果你只关心准确性,你具体使用哪一种算法就没那么重要了。
事实上,流程中的每个元素都变成了一种商品,偏爱某种方法的想法开始淡化。我认为这是解决问题的成熟立场。我认为它可能不适用于某些领域,比如学术研究。
学者对特定算法有深入的研究。而实践者只将算法视为达到目的的手段,这个目的就是预测或预测模型。
应用机器学习核查清单
本节概述了一个你可以用来处理应用机器学习问题的核查清单。
如果你对可以下载并在下一个问题中使用的核查清单版本感兴趣,请查看本文末尾。
这个核查清单是基于我之前对 KDD/数据挖掘过程在应用机器学习上的改编。
你可以在《什么是数据挖掘和 KDD》一文中了解更多关于 KDD 过程的信息。你可以在《处理机器学习问题的流程》一文中了解更多关于我建议的工作流程。
每个要点都可以是一篇博客文章,甚至是一本书。这个核查清单中压缩了大量的细节。我试图在适当的地方加入关于推理和进一步阅读的链接。
我是否遗漏了什么重要的东西?请在评论中告诉我。
关于此示例核查清单的说明
为简洁起见,这个例子受到了高度限制。实际上,可以把它看作是一个演示或原理证明,而不是所有机器学习问题的唯一真实核查清单——它本身也无意如此。
我将此核查清单限制在处理表格数据的分类问题上。
另外,为了使其易于理解,我保持了相对较高的抽象层次,并将大多数部分限制在三个要点。
有时这还不够,所以我在核查清单的某些部分给出了具体的数据转换和算法尝试示例,称为插曲。
让我们开始吧。
1. 定义问题
在接触任何数据或算法之前,对问题有一个充分的理解至关重要。这将为你提供解释结果的工具和对解决方案形式的构想。
你可以在《如何定义你的机器学习问题》一文中更深入地探讨核查清单的这一部分。
1.1 问题是什么?
本节旨在捕捉对问题的清晰陈述,以及可能已经设定的任何期望和可能存在的偏见。
- 非正式和正式地定义问题。
- 列出关于问题的假设(例如,关于数据的假设)。
- 列出与你的问题相似的已知问题。
1.2 为什么需要解决这个问题?
本节旨在捕捉解决问题的动机,并迫使你预先思考预期的结果。
- 描述解决问题的动机。
- 描述解决方案(模型或预测)的好处。
- 描述解决方案将如何被使用。
1.3 如何手动解决这个问题?
本节旨在挖掘出任何剩余的领域知识,并帮助你判断是否真的需要机器学习解决方案。
- 描述当前是如何解决该问题的(如果存在的话)。
- 描述领域专家会如何进行手动预测。
- 描述程序员可能会如何手动编写一个分类器。
2. 准备数据
理解你的数据是你应该花费大部分时间的地方。
你对数据理解得越好,就越能更好地将其内在结构展现给算法学习。
在《如何为机器学习准备数据》和《为你的机器学习问题进行快速粗略的数据分析》这两篇文章中深入探讨这部分核查清单。
2.1 数据描述
本节旨在迫使你思考所有可用和不可用的数据。
- 描述可用数据的范围。
- 描述不可用但期望获得的数据。
- 描述你不需要的可用数据。
2.2 数据预处理
本节旨在将原始数据整理成一种你可以在建模工具中使用的形式。
- 格式化数据,使其成为你可以处理的形式。
- 清理数据,使其统一且一致。
- 对数据进行抽样,以便在冗余和问题保真度之间取得最佳平衡。
插曲:数据抽样简表
关于抽样的最后检查可能有很多内容需要展开。
这里有两个重要的考虑因素
- 抽样实例:创建一个既能代表各种属性密度,又足够小,以便你能快速构建和评估模型的数据样本。通常不是一个样本,而是多个。例如,一个用于亚分钟级模型评估,一个用于亚小时级,一个用于亚天级等等。更多的数据可以改变算法的性能。
- 抽样属性:选择最能将数据中的结构暴露给模型的属性。不同的模型有不同的要求,实际上是不同的偏好,因为有时打破“要求”会得到更好的结果。
以下是你可以用来抽样数据的一些不同方法的想法。不要选择,而是依次使用每一种方法,让你的测试框架的结果告诉你该使用哪种表示方式。
- 随机或分层抽样
- 按类别重新平衡实例(更多关于重平衡方法)
- 移除异常值(更多关于异常值方法)
- 移除高度相关的属性
- 应用降维方法(主成分分析或 t-SNE)
2.3 数据转换
本节旨在创建数据的多个视图,以便在后续步骤中向建模算法揭示更多问题结构。
- 对所有属性进行线性和非线性变换
- 将复杂属性分解为其构成部分。
- 将非规范化属性聚合为更高阶的量。
插曲:数据转换简表
你可以使用的数据转换数量是有限的。也有一些经典的方法可以作为起点,帮助你判断是否值得探索特定的途径。
以下是一些你可以使用的单变量(单个属性)数据转换列表。
- 平方和立方
- 平方根
- 标准化(例如,均值为0,单位方差)
- 归一化(例如,缩放到0-1范围)
- 离散化(例如,将实数转换为分类变量)
你应该使用哪一种?依次使用所有方法,同样,让你的测试框架的结果告诉你哪种转换最适合你的问题。
2.4 数据汇总
本节旨在发掘数据中任何明显的关系。
- 为每个属性创建单变量图。
- 为每个属性与所有其他属性创建双变量图。
- 为每个属性与类别变量创建双变量图
3. 抽查算法
现在是时候开始构建和评估模型了。
要深入了解核查清单的这一部分,请参阅文章《如何评估机器学习算法》和《为什么你应该在机器学习问题上抽查算法》。
3.1 创建测试框架
本节旨在帮助您定义一种稳健的模型评估方法,可以可靠地用于比较结果。
- 创建一个留出验证数据集以供后续使用。
- 评估并选择一个合适的测试选项。
- 选择一个(或一小组)用于评估模型的性能指标。
3.2 评估候选算法
本节旨在快速探明问题的可学习性,以及哪些算法和数据视图可能适合在下一步中进行更深入的研究。
- 选择一组多样化的算法进行评估(10-20个)。
- 使用常见或标准的算法参数配置。
- 在每个准备好的数据视图上评估每个算法。
插曲:分类问题上可尝试的算法简表
坦白说,清单本身不如抽查策略重要,而不是固守你最喜欢的算法。
尽管如此,如果你正在处理一个分类问题,可以尝试多种以不同方式建模的算法。例如:
- 基于实例的方法,如 k-近邻 和 学习向量量化
- 更简单的方法,如朴素贝叶斯、逻辑回归和线性判别分析
- 决策树,如 CART 和 C4.5/C5.0
- 复杂的非线性方法,如反向传播和支持向量机
- 总是要试试随机森林和梯度提升机
要获得可尝试的算法想法,请参阅帖子《机器学习算法巡览》
4. 改进结果
此时,你将有一个较小的模型池,这些模型已知在该问题上是有效的。现在是时候改进结果了。
你可以在《如何改进机器学习结果》一文中更深入地探讨核查清单的这一部分。
4.1 算法调优
本节旨在从表现良好的模型中获得最佳性能。
- 使用历史上有效的模型参数。
- 搜索模型参数的空间。
- 优化表现良好的模型参数。
4.2 集成方法
本节旨在结合表现良好的模型的结果,并进一步提升准确性。
- 对表现良好的模型使用 Bagging。
- 对表现良好的模型使用 Boosting。
- 融合表现良好模型的结果。
4.3 模型选择
本节旨在确保模型选择过程经过深思熟虑。
- 选择一个多样化的子集(5-10个)表现良好的模型或模型配置。
- 在留出验证数据集上评估表现良好的模型。
- 选择一个小的(1-3个)表现良好的模型池。
5. 完成项目
我们现在有了结果,回顾问题定义,并提醒自己如何善用它们。
你可以在《如何使用机器学习结果》一文中更深入地探讨核查清单的这一部分。
5.1 展示结果
本节旨在确保你记录下你所做的事情和学到的知识,以便他人(以及未来的你)能够最好地利用它
- 将项目写成一份简短的报告(1-5页)。
- 将报告转换为幻灯片,与他人分享发现。
- 与相关方分享代码和结果。
5.2 实施结果
本节旨在确保您兑现了最初的解决方案承诺。
- 将发现的从原始数据到结果的流程调整到操作环境中。
- 交付并利用预测结果。
- 交付并利用预测模型。
充分利用此核查清单的技巧
我认为这个核查清单,如果遵循的话,是一个非常强大的工具。
在本节中,我将为您提供一些额外的技巧,以便您在自己的问题上充分利用该核查清单。
- 简化流程。不要在第一次尝试时就做所有事情。选择两种算法进行抽查,一种数据转换,一种改进结果的方法,等等。完成一轮核查清单,然后再开始增加复杂性。
- 使用版本控制。你将创建大量的模型和大量的脚本(如果你使用 R 或 Python)。通过使用版本控制(如 GitHub),确保你不会丢失一个好的结果。
- 程序化。没有哪个结果、转换或可视化是特殊的。一切都应该通过程序创建。如果你使用Weka,这可能是一个你写下的过程;如果你使用R或Python,这可能是Makefiles。你会发现你的东西里有bug,你会希望能够随时重新生成可能所有的结果。如果从一开始就全部程序化,这就和输入“make”一样简单。
- 记录所有结果。我认为,每次算法运行都将预测保存在文件中是一个好习惯。同样,将每个数据转换和样本保存在单独的文件中。如果数据作为项目的一部分存储在目录的文件中,你随时可以对数据进行新的分析。如果一个结果需要数小时、数天或数周才能获得,这一点就更为重要。这包括交叉验证的预测,这些预测在更复杂的融合策略中可能很有用。
- 不要跳过步骤。你可以将一个步骤简化到最低限度,但不要跳过任何步骤,即使你认为自己什么都懂。核查清单的理念是保证一个结果。医生非常聪明且资历深厚,但他们仍然需要被提醒洗手。有时你可能会忘记流程中一个绝对关键的步骤(比如定义你的问题,然后意识到你根本不需要机器学习)。
我持怀疑态度,这真的能行吗?
这只是一个核查清单,不是万能药。
你仍然需要付出努力。你仍然需要学习算法和数据处理方法,以便从中获得最大收益。你仍然需要学习你的工具以及如何最好地使用它们。
亲身试试吧。
向自己证明,端到端地解决一个问题是可能的。在一个小时内完成它。
一旦你得到了第一个结果,你就会看到它有多容易,以及为什么在流程的前端花大量时间在问题定义、数据准备上,以及在流程的后端展示解决方案是如此重要。
这种方法不会让你得到最好的结果。
这个核查清单能够可靠地、持续地在不同问题上提供良好的结果。
你不会通过一次这个核查清单就赢得 Kaggle 竞赛,但你会得到一个可以提交的结果,并且可能排在排行榜的前50%以上(通常要高得多)。
你可以用它来获得出色的结果,但这取决于你想投入多少时间。
该核查清单适用于表格数据的分类问题。
我选择用表格数据上的分类问题来演示这个核查清单。
这并不意味着它仅限于分类问题。你可以很容易地将其调整到其他问题类型(如回归)和其他数据类型(如图像和文本)。
我过去在这两种情况下都使用过这个核查清单的变体。
核查清单没有涵盖“XYZ”技术。
核查清单的美妙之处在于其理念的简洁性。
如果你不喜欢我列出的步骤,就用你自己的来替换它们。加入所有你喜欢使用的技术。创建你自己的核查清单!
如果你这样做了,我很想看看你的版本。
这种方法有很多冗余。
我认为解决一个机器学习问题是在利用(exploitation)和探索(exploration)之间取得平衡。
你想要利用你所知道的关于机器学习、关于数据以及关于领域的一切。将这些元素添加到你针对特定问题的流程中。
但不要排除探索。你需要尝试那些你的偏见认为不会是最好的东西。因为有时候,甚至常常是,你的偏见并不靠谱。这就是数据和机器学习的本质。
为什么不直接把这个流程编码成管道呢?
为什么不呢!如果你是系统方面的人,也许你应该这么做。
我自己已经用许多不同的工具链和平台尝试过很多次。在一个编码系统中找到合适的灵活性水平非常困难。似乎总有一种方法或一个工具不能很好地融入其中。
我怀疑许多机器学习即服务(MLaaS)平台会创建一个类似于上述核查清单的流水线来确保良好的结果。
我会在不知道原因的情况下得到好结果。
当你是初学者时,这种情况可能会发生。
你可以而且应该对最终的数据准备和建模算法组合进行更深入的研究。你应该在提供结果的同时提供你的全部流程,以便其他人可以复制它(比如公开或在你的组织内部,如果这是一个工作项目)。
如果好结果的交付方式是可复现的,且评估是严谨的,那么它们就可以独立存在。如果执行得当,上述的核查清单提供了这些特性。
行动步骤
使用核查清单完成一个项目并建立一些信心。
- 选择一个你可以在1到2小时内完成的问题。
- 使用核查清单并得到一个结果。
- 分享你的第一个项目(在评论中)。
你想要上述电子表格的 PDF 和电子表格版本吗?
立即下载,并获取独家邮件技巧和窍门。
谢谢你。我正在使用基于规则的方法(而不是机器学习)来挖掘一些文本。你的博客在很多方面仍然很有 relevance。我已经做了一个粗略的核查清单,以适应文本挖掘的非机器学习技术。
嗨,Jason,
感谢这篇文章。您能否给我们举一个例子,使用任何数据集,说明您将如何使用这个核查清单来解决机器学习问题。
我觉得一个更实际的方法对我们这些新手来说会更容易适应。
谢谢你
Jason,这太棒了。非常感谢你。
太棒了!感谢这篇帖子。这个核查清单非常有用 ~ 来自实践者部落。
谢谢 Avaré,我很高兴听到这个消息。
嗨,我下载你的核查清单时遇到了困难。我已经成为你博客的忠实粉丝,谢谢你。
很抱歉听到这个消息,Michael,你应该会收到一封包含下载核查清单链接的电子邮件。
我真的很喜欢这篇文章。我发现自己很多次都陷入困境!无数次的探索和利用,但有时我会对下一步该做什么感到困惑。
感谢您提供这个 🙂
我想我也成了您博客和邮件订阅的忠实粉丝 ^^
听到这个消息我很高兴,Happy。祝你在未来的机器学习项目中好运。
我喜欢你的出版物,Jason!感谢你分享如此宝贵的知识和专业经验!我刚进入机器学习领域不久,但有了像你这样杰出人物的贡献,我正快速稳健地前进,而且令人惊讶的是,我似乎比我工作单位里一些被吹捧的数据科学家更了解和理解机器学习的概念和最佳实践。再次感谢你!!!
埃德
谢谢你的支持,Ed,我很高兴你觉得这篇文章有用。
谢谢 Jason,这些要点里包含了大量的信息。
“抽样实例:创建一个既能代表各种属性密度,又足够小,以便你能快速构建和评估模型的数据样本。通常不是一个样本,而是多个。例如,一个用于亚分钟级模型评估,一个用于亚小时级,一个用于亚天级等等。更多的数据可以改变算法的性能。”
我对此有几个问题
1. 你有关于如何在 python 中“创建一个既能代表各种属性密度的数据样本”的示例代码吗?感觉这个陈述中蕴含了很多知识。如果不能分享示例代码,能否给我指个方向?我知道 scikit learn 可以做分层抽样,但据我所知只能对一个属性进行。如何能跨多个特征,包括分类和连续特征来做呢?
2. 我喜欢亚分钟模型评估的建议。这意味着数据集必须相当小,这可能意味着“抽查”结果的方差会很高。这一定是你建议不是一个而是多个样本的原因,对吧?但是小样本也限制了我们在抽查中可以引入的特征数量,对吗?
这是否意味着对于亚分钟/亚小时的抽查,做特征工程(这会增加样本的维度)没有太大意义,也许应该把自己限制在变换上?你的建议是什么?
3. 您是否已经有更详细地介绍以下内容的帖子?或者也许是您的某本电子书?
随机或分层抽样
按类别重新平衡实例(更多关于重平衡方法)
移除异常值(更多关于异常值方法)
移除高度相关的属性
4. 您说的“将非规范化属性聚合成更高阶的量”是什么意思?能给个例子吗?
非常感谢!
嗨,Carmen,很好的问题。
总的来说,别忘了博客上的搜索功能,它会帮你找到你正在寻找的许多特定帖子。
1. 不,这是具体问题具体分析的。也许你需要查看每个单变量的描述性统计数据。也许是联合分布。我在这里无法给出具体的指导。尝试一些方法,查看相关的统计数据,并使用模型性能来评估效果。
2. 也许吧。我相信我当时想表达的观点是关于时间粒度的,并考虑在不同尺度上建模。在更精细的粒度上,你将拥有更多而不是更少的实例。任何增加的方差是在其他尺度上丢失的信息——这可能有助于也可能无助于建模。不同的尺度可能为特征工程提供不同的机会。不要过早地排除任何可能性——去尝试看看。
3.
– 重新平衡: https://machinelearning.org.cn/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/
– 异常值:https://machinelearning.org.cn/how-to-identify-outliers-in-your-data/
– 特征选择: https://machinelearning.org.cn/an-introduction-to-feature-selection/
– 移除高度相关的特征:https://machinelearning.org.cn/feature-selection-with-the-caret-r-package/
4. 当然,也许所有交易可以被压缩成按客户划分的每日交易摘要,包含计数和总额。也许可以将某个时间范围内与此记录相似的记录计数作为特征,等等。思考一下你可以揭示的更高阶信息,这样模型就不必花时间去弄清楚。
谢谢 Jason,真的很有帮助。
对于偶然看到这篇文章的人,这是我为“抽样实例:创建一个既能代表各种属性密度,又足够小,以便你能快速构建和评估模型”所做的尝试。
1. 我构建了一个基本的 Sampler 对象,它从原始数据集中不放回地抽取 n 个大小为 N 的样本(默认为原始数据集的 5%)。
2. 如果特征数量很少,我会遍历所有特征,并为*每个特征*绘制一个KDE图(使用seaborn)。每个图都包含所有样本的kde线以及原始数据集的kde线,以查看各特征的分布是否与原始数据集相似。
我还在图上标注了柯尔莫哥洛夫-斯米尔诺夫检验的结果(该检验针对每个样本与完整数据集进行,并将样本间p值的均值和标准差标注在图下)。
目标是测试不同百分比水平下抽样的稳定性,并确保它能产生代表性的结果。这让我了解了样本量可以多小而仍能保持代表性。
3. 如果特征数量太多无法进行可视化,我就只创建一个抽样报告,其中包含每个特征在样本间的平均/标准差p值(在一个DataFrame中)。
不确定这是否是正确的方法,但感觉它足够通用,(至少目前)很有帮助。
太棒了。
我喜欢带有分位数和q-q图的单变量快照。我也喜欢计算不同样本量的均值标准误。
计算相关矩阵并比较原始数值可以帮助弄清楚成对联合分布的情况。
这是一个非常困难的问题,我预计多元统计学家有更好的工具。最终,每个样本量(n)的均值和标准差交叉验证性能是一个难以超越的指标(就我们正在优化的目标而言)。
一些很棒的想法,Jason,我会采纳其中一些。
我所在行业中特别相关的一件事是,事物会随着时间而变化。
我可能会尝试在我的抽样器中添加另一种方法,来抽取有时间限制的样本(例如,从2014年第一季度获取的客户中抽取n个样本,然后再从2014年第二季度抽取n个样本……),然后比较a)分布是否随时间变化,以及最终b)“算法抽查”结果的稳定性。我相信这与分层抽样不同,而是完全不同的东西(不确定它是否有这样一个名称)。
这个想法是为了快速了解基础人群是否随时间发生了变化。
对建模的影响可能是,如果客户行为随时间发生了显著变化,那么提供给算法的完整数据集可能需要限制在最近的X年内,因为较早的行为不再相关(实际上,对业务而言),甚至可能损害算法的预测能力。
抱歉,这与这篇文章无关,但您是否有任何资源/技巧可以用来确定一个数据集是否实际上包含多个子群体,以及我们拥有的完整数据集在建模前是否应该被修剪/子集化?
不错,是的,你正在应对“概念漂移”或数据随时间变化的问题。
你也可以包含时间变量,让模型自己学习和利用这种变化,而不是手动管理。两种方法都试试。
不,我没有太多涉及统计/多元统计的内容。
哦,“概念漂移”。太好了,Jason,非常感谢。一旦有了正确的术语,自学起来就变得非常容易,这真是太神奇了 🙂
很高兴听到这个消息,Carmen。
你好,Jason,我是机器学习技术实践的新手,我发现你的文章非常有用。
我有一个问题需要您有经验的建议。
我有被分为正面和负面的电影评论。现在我想创建一个分类器,可以预测电影评论是正面情绪还是负面情绪。所有的电影评论都是文本文件。我以前没有处理过文本数据挖掘。
我的问题是
哪种算法最适合这个特定目标?
我是否需要从两个类别中划分我的数据用于训练和测试?
或者我需要创建一个新的数据集,其中一列是文本,另一列是类别(正面和负面),还是可以直接处理?
我需要使用自然语言处理吗?
这个教程会有帮助,它正好处理了这个问题
https://machinelearning.org.cn/predict-sentiment-movie-reviews-using-deep-learning/
关于机器学习初学者的精彩文章
谢谢,Farrukh。
首先感谢您的精彩文章,非常有用!我有一个关于特征选择的简短问题。您会在哪个步骤评估和移除特征?
对我来说,不是很清楚这应该在抽查不同算法之前还是之后进行。我想换一种方式提问:不同的算法是否从特定特征中获益不同,还是说一个特征所携带的“信息价值”与算法无关?
很好的问题。
如果自动进行,理想情况下是在每个交叉验证折叠内。
在实践中,您通常可以将其作为建模前的预处理步骤。
哪种算法适合分析销售数据集?
我们无法知道,尝试一套算法看看哪个效果最好
https://machinelearning.org.cn/start-here/#process
嗨,Jason,你熟悉长短期记忆算法吗?它适合用于预测吗?谢谢
嗨,Jason,
我真的很想试试你的核查清单,但不知何故我无法给你发送所需的邮件。
能否请您把核查清单发给我,以便我在我的项目上尝试一下。
那真是太好了。
非常感谢
塞缪尔
没问题,我发给你了。
嗨,Jason,
遇到了和其他人一样的问题。核查清单的链接似乎坏了。你能发一下核查清单吗?
谢谢
约翰
抱歉,现在已经收到了,那条资源不可用的消息误导了我。
谢谢。
很高兴听到这个消息,我会修复它的。
非常感谢这篇帖子。如果能附上一个例子,会更容易理解。
感谢您的建议。
嗨,Jason,
感谢您的帖子。它们真是太棒了!
我想了解为什么我们首先要“抽查各种算法”,然后再“调整表现良好的算法”?为什么我们不应该先“调整可用的算法”,然后选择给出最好结果的那个?
如果我们采用前一种方法,我们可能会排除掉一个算法,而这个算法在经过调整后可能会比我们最终选择的那个算法给出更好的结果。
速度。抽查能突出重点领域,而调优很耗时。
如果你有资源,可以合并这两个步骤。
好的。非常感谢你的回复。
我没有收到核查清单,检查了我的垃圾邮件文件夹,但什么都没有。你能发给我吗?
很抱歉听到这个消息,这是一个直接链接
https://s3.amazonaws.com/MLMastery/MachineLearningChecklist.zip
嗨,Jason,
请问所描述的步骤和行动是按顺序进行的,还是可以调整执行每个步骤的顺序?
上面的帖子按顺序列出了步骤。你具体遇到了什么困难?
在步骤 2.2 中,您的意思是不是“移除高度**相关**的属性”(Remove highly **correlated** attributes),而不是“移除高度纠正的属性”(Remove highly corrected attributes)?
谢谢!
谢谢,已修复!
刚刚开始研究如何解决我遇到的问题,就发现了这篇文章。非常精准且有帮助。
非常感谢 Jason
谢谢!
嗨,Jason,这个问题来自一个机器学习领域的新人。
我完成了一个项目——几乎完成了——是为 edX 上 IBM 的一个机器学习课程做的。项目是 NBA 球队表现预测。
我几乎凭直觉完成了“核查清单”,并确定了在准确率、精确率、F-分数等方面表现最佳的特征子集等。
下一步——我想用这个解决方案来预测我的数据集中没有的、不同年份的球队表现。
您或者其他人能稍微指导我一下如何解决这个问题吗?
谢谢并致以问候。
是的,你必须在所有可用数据上拟合你的模型,然后用该模型对新数据进行预测。
如果你正在使用 scikit-learn,这个会有帮助
https://machinelearning.org.cn/make-predictions-scikit-learn/
会试试的。谢谢
找不到下载链接?
点击文章末尾的链接“立即下载,并获取独家邮件技巧”会把我带到同一个网站(https://machinelearning.org.cn/machine-learning-checklist/)
感谢这篇精彩的博客文章!这对于深度学习,尤其是图像处理,还适用吗?您对这个核查清单有什么建议的改动吗?再次感谢!
嗨 Ayoub...非常欢迎!是的!这个核查清单对机器学习和深度学习都适用。
太棒了!非常有帮助!谢谢你。
不客气,Erick!我们感谢您的支持!