如何使用机器学习结果
原文:
machinelearningmastery.com/how-to-use-machine-learning-results/
一旦发现和调整一个可行的问题模型,就可以利用该模型了。你可能需要重新审视你的为什么,并提醒自己,你需要一个解决你正在解决的问题的形式。
在对结果执行某些操作之前,不会解决此问题。在这篇文章中,您将学习在将原型模型转换为生产系统时回答问题和考虑因素的结果。
结果展示
照片归属于 Phil Sexton ,保留一些权利
根据您要解决的问题类型,结果的呈现方式会有很大差异。利用机器学习成果的结果有两个主要方面:
- 报告结果
- 操作系统
报告结果
一旦你发现了一个好的模型和一个足够好的结果(或者不是,视情况而定),你将需要总结所学的内容并将其呈现给利益相关者。这可能是您自己,客户或您工作的公司。
使用 powerpoint 模板并解决下面列出的部分。您可能希望编写一个分页器并将部分部分用作部分标题。即使在您为自己做的小型实验项目(例如教程和比赛)上也要尝试遵循此过程。很容易在项目上花费过多的时间,并且您希望确保捕获您沿途学到的所有伟大的事物。
以下是报告项目结果时可以完成的部分。
- 上下文(为什么):定义问题所在的环境,并为研究问题设置动机。
- 问题(问题):简要描述问题是你出去解答的问题。
- 解决方案(答案):简要描述解决方案,作为您在上一节中提出的问题的答案。请明确点。
- 调查结果:您在观众感兴趣的路上发现的项目符号列表。它们可能是数据中的发现,已完成或未起作用的方法,或者您在旅程中获得的模型表现优势。
- 限制:考虑模型不起作用的地方或模型未回答的问题。不要回避这些问题,如果你可以定义它不擅长的地方,那么定义模型擅长的地方会更加可信。
- 结论(为什么+问题+答案):重新审视为什么,研究问题和你在一个简单的小包装中发现的答案,这些包装易于记忆并为自己和他人重复。
您要呈现的受众类型将定义您要详细说明的详细信息量。通过结果报告来完成项目的纪律,即使是小型项目,也会加速您在现场的学习。在这些小型项目中,我强烈建议在博客或社区上分享辅助项目的结果,并获得您可以捕获的反馈,并将其带入您下一个项目的开始。
操作化
您已经找到了一个足以解决您希望将其投入生产的问题的模型。对于有趣的项目,这可能是您工作站上的操作安装,一直到将模型集成到现有企业应用程序中。范围很广。在本节中,您将学习操作模型的三个关键方面,您可以在将系统投入生产之前仔细考虑。
您应该仔细考虑的三个方面是算法实现,模型的自动测试以及随时间跟踪模型的表现。这三个问题很可能会影响您选择的模型类型。
算法实现
您可能正在使用研究库来发现表现最佳的方法。研究库中的算法实现可以很好,但它们也可以针对问题的一般情况而不是您正在使用的特定情况编写。
通过将这样的实现直接投入生产,可以非常认真地考虑您可能创建的依赖关系和技术债务。请考虑查找支持您要使用的方法的生产级库。如果此时切换到生产级别库,则可能必须重复算法调整过程。
您也可以考虑自己实现算法。此选项可能会引入风险,具体取决于您选择的算法的复杂程度以及它使用的实现技巧。即使使用开源代码,也可能存在许多复杂的操作,这些操作可能很难内化并且可靠地重现。
模型测试
编写自动化测试,验证可以构建模型并重复实现最低级别的表现。还要为任何数据准备步骤编写测试。您可能希望控制每个单元测试运行的算法使用的随机性(随机数种子),以便测试 100%可重复。
跟踪
添加基础设施以监控模型的表现,并在精度降至最低水平以下时发出警报。跟踪可以在单独的环境中实时发生,也可以在重新创建的模型上使用实时数据样本。引发警报可以指示数据中的模型所学习的结构已经改变(概念漂移)并且可能需要更新或调整模型。
有些模型类型可以执行在线学习并自行更新。仔细考虑允许模型在生产环境中自我更新。在某些情况下,管理模型更新过程并切换模型(其内部配置)可能更明智,因为它们经过验证更具表现。
摘要
在这篇文章中,您了解到在交付结果之前,项目不会被视为完成。结果可能会呈现给您自己或您的客户,并且在呈现结果时需要遵循最低结构。
在生产环境中使用学习模型时,您还学习了三个问题,特别是算法实现的性质,模型测试和正在进行的跟踪。
如何像数据科学家一样解决问题
原文:
machinelearningmastery.com/how-to-work-through-a-problem-like-a-data-scientist/
在 2010 年的一篇文章中,Hilary Mason 和 Chris Wiggins 将 OSEMN 流程描述为数据科学家应该感到舒服的任务分类。
该帖子的标题是“数据科学分类”,现已解散的数据库博客。这个过程也被用作最近一本书的结构,特别是“命令行的数据科学:面向未来的经过时间测试的工具”,作者是由 O’Reilly 出版的 Jeroen Janssens。
在这篇文章中,我们仔细研究了解决数据问题的 OSEMN 流程。
像数据科学家一样解决问题
照片来自美国陆军 RDECOM ,保留一些权利
OSEMN 流程
OSEMN 是与“负鼠”或“令人敬畏”押韵的缩写,代表获取,磨砂,探索,模型和 iNterpret。
这是数据科学家应该熟悉和熟悉的任务列表。尽管如此,作者指出,没有数据科学家会成为所有这些人的专家。
除了任务列表之外,OSEMN 还可以用作使用机器学习工具处理数据问题的蓝图。
从这个过程中,作者指出数据黑客符合“O
”和“S
”任务,机器学习符合“E
”和“M
”任务,而数据科学需要所有元素的组合。
1.获取数据
作者指出,数据收集的手动过程不会扩展,您必须学习如何自动获取给定问题所需的数据。
他们指向手动过程,如使用鼠标指向和单击,并从文档中复制和粘贴数据。
作者建议您采用一系列工具并使用最适合手头工作的工具。他们指向 unix 命令行工具,数据库中的 SQL,使用 Python 和 shell 脚本进行 Web 抓取和脚本编写。
最后,作者指出了使用 API访问数据的重要性,其中 API 可能是公共的,也可能是组织内部的。数据通常以 JSON 格式呈现,而像 Python 这样的脚本语言可以使数据检索变得更加容易。
2.磨砂数据
您获得的数据将是混乱的。
真实数据可能存在不一致,缺失值和各种其他形式的损坏。如果从困难的数据源中删除它,可能需要跳闸和清理。即使是干净的数据也可能需要进行后期处理才能使其统一和一致。
数据清理或清理需要“命令行 fu”和简单的脚本。
作者指出,数据清理是处理数据问题最不性感的部分,但良好的数据清理可以为您实现的结果提供最大的好处。
对干净数据的简单分析比对噪声和不规则数据的复杂分析更有成效。
作者指出了简单的命令行工具,如 sed,awk,grep 和脚本语言,如 Python 和 Perl。
有关更多信息,请查看数据准备过程。
3.探索数据
在这种情况下探索是指探索性数据分析。
这是没有正在测试的假设,也没有正在评估的预测。
数据探索对于了解您的数据,构建对其形式的直觉以及获取数据转换的想法以及甚至在此过程中使用的预测模型非常有用。
作者列出了许多可能有助于此任务的方法:
- 命令行工具,用于检查更多,更少,头部,尾部或其他任何数据。
- 直方图总结了各个数据属性的分布。
- 成对直方图可以相互绘制属性并突出显示关系和异常值
- 维度减少方法,用于创建较低维度的图和数据模型
- 聚类以暴露数据中的自然分组
有关更多信息,请查看探索性数据分析。
4.模型数据
模型准确率通常是给定数据问题的最终目标。这意味着最具预测性的模型是选择模型的过滤器。
通常,“最佳”模型是最具预测性的模型
通常,目标是使用模型预测和解释。可以定量地评估预测,而解释更柔和和定性。
模型的预测准确率可以通过它在看不见的数据上的表现来评估。可以使用诸如交叉验证之类的方法来估计。
您尝试的算法以及您对可以为问题构建的可能模型的假设空间的偏差和减少。做出明智的选择。
有关更多信息,请查看如何评估模型和如何进行采样检查算法。
5.解释结果
计算的目的是洞察力,而不是数字
- 理查德汉明
作者使用手写数字识别的例子。他们指出,这个问题的模型没有每个数字的理论,而是一种区分数字的机制。
此示例强调预测的关注点可能与模型解释不同。事实上,他们可能会发生冲突。复杂模型可以是高度预测的,但是执行的术语或数据变换的数量可以使得理解为什么在域的上下文中进行特定预测几乎是不可能的。
模型的预测能力取决于其推广的能力。作者认为,模型的解释力是它能够建议接下来要进行的最有趣的实验。它提供了对问题和领域的见解。
作者在选择模型以平衡模型的预测性和可解释性时指出了三个关键问题:
- 选择一个好的表示形式,您获得的数据形式,大多数数据都是混乱的。
- 选择好的功能,您选择建模的数据的属性
- 选择一个良好的假设空间,受您选择的模型和数据转换的约束。
有关更多信息,请查看如何使用机器学习结果。
摘要
在这篇文章中,你发现了 Hilary Mason 和 Chris Wiggins 提出的 OSEMN。
OSEMN 代表 Obtain,Scrub,Explore,Model 和 iNterpret。
与数据库中的知识发现和应用的机器学习过程类似,您可以使用此过程来解决机器学习问题。
通过数据预处理提高模型准确率
原文:
machinelearningmastery.com/improve-model-accuracy-with-data-pre-processing/
数据准备可以决定您模型的预测能力。
在他们的书 Applied Predictive Modeling 的第三章中,Kuhn 和 Johnson 介绍了数据准备过程。他们将其称为训练集数据的添加,删除或转换。
在这篇文章中,您将发现可用于提高模型预测能力的数据预处理步骤。
我喜欢电子表格
照片由 Craig Chew-Molding ,保留一些权利
数据准备
在建模问题之前,您必须预先处理原始数据。具体准备工作可能取决于您可用的数据和您要使用的机器学习算法。
有时,数据的预处理可能会导致模型准确率的意外改善。这可能是因为数据中的关系已被简化或未被遮挡。
数据准备是一个重要的步骤,您应该尝试适合您的数据的数据预处理步骤,看看您是否能够获得模型准确率的理想提升。
您可以为数据考虑三种类型的预处理:
- 为数据添加属性
- 从数据中删除属性
- 转换数据中的属性
我们将深入研究这三种预处理中的每一种,并查看您可以执行的一些特定操作示例。
添加数据属性
高级模型可以从复杂属性中提取关系,尽管某些模型要求明确说明这些关系。从训练数据中获取新属性以包含在建模过程中可以提高模型表现。
- 虚拟属性:分类属性可以转换为 n 二进制属性,其中 n 是属性具有的类别(或级别)的数量。这些非规范化或分解的属性称为虚拟属性或虚拟变量。
- 转换后的属性:可以将变换后的属性变量添加到数据集中,以便允许线性方法利用属性之间可能的线性和非线性关系。可以使用简单的变换,如 log,square 和 square root。
- 缺少数据:缺少数据的属性可以使用可靠的方法(例如 k-最近邻居)估算缺失数据。
删除数据属性
某些方法在冗余或重复属性方面表现不佳。通过从数据中删除属性,可以提高模型的准确率。
- 投影:训练数据可以投影到较低维空间,但仍然表征数据中的固有关系。一种流行的方法是主成分分析(PCA),其中该方法找到的主要成分可以作为一组简化的输入属性。
- 空间符号:数据的空间符号投影将数据转换到多维球体的表面。结果可用于突出显示可以修改或从数据中删除的异常值的存在。
- 相关属性:由于存在高度相关的属性,某些算法的重要性会降低。可以识别具有高相关性的成对属性,并且可以从数据中移除最相关的属性。
转换数据属性
训练数据的变换可以减少数据的偏度以及数据中异常值的突出性。许多模型希望在应用算法之前转换数据。
- 居中:转换数据,使其平均值为零,标准差为 1。这通常称为数据标准化。
- 缩放:标准缩放变换是将原始比例的数据映射到 0 到 1 之间的比例。这通常称为数据规范化。
- 删除偏斜:偏斜数据是指分布被推送到一侧或另一侧(更大或更小的值)而不是正态分布的数据。某些方法假设正常分布的数据,并且如果消除了偏斜,则可以更好地执行。尝试使用值的日志,平方根或反转替换属性。
- Box-Cox :Box-Cox 变换或变换系列可用于可靠地调整数据以消除偏斜。
- Binning :通过将值分组到 bin 中,可以使数字数据离散。这通常称为数据离散化。此过程可以手动执行,但如果系统地执行并使用在域中有意义的启发式自动执行则更可靠。
摘要
数据预处理是准备原始数据进行建模,满足特定机器学习算法数据期望所需的重要步骤,并且可以在模型准确率方面带来意想不到的提升。
在这篇文章中,我们发现了三组数据预处理方法:
- 添加属性
- 删除属性
- 转换属性
下次您希望提高模型准确率时,请考虑您可以为数据设计哪些新视角,以便模型进行探索和利用。
处理机器学习的大数据文件的 7 种方法
原文:
machinelearningmastery.com/large-data-files-machine-learning/
将机器学习算法探索并应用于太大而无法放入内存的数据集非常常见。
这导致了以下问题:
- 如何加载我的多千兆字节数据文件?
- 我尝试运行数据集时算法崩溃;我该怎么办?
- 你能帮我解决内存不足错误吗?
在这篇文章中,我想提供一些您可能想要考虑的常见建议。
处理机器学习的大数据文件的 7 种方法
Gareth Thompson 的照片,保留一些权利。
1.分配更多记忆
某些机器学习工具或库可能受默认内存配置的限制。
检查是否可以重新配置工具或库以分配更多内存。
一个很好的例子是 Weka,你可以在启动应用程序时将内存作为参数增加。
2.使用较小的样本
您确定需要处理所有数据吗?
随机抽取一些数据,例如前 1000 行或 100,000 行。在为所有数据拟合最终模型之前,使用此较小的示例来解决您的问题(使用渐进式数据加载技术)。
我认为这对于机器学习来说是一种很好的做法,可以让您快速抽查算法和结果。
您还可以考虑对用于拟合一种算法的数据量进行灵敏度分析,与模型技能进行比较。也许有一个自然的收益递减点,您可以将其用作较小样本的启发式大小。
3.使用具有更多内存的计算机
你必须在你的电脑上工作吗?
也许你可以访问更大的计算机,内存更多。
例如,一个好的选择是在像 Amazon Web Services 这样的云服务上租用计算时间,该服务为机器提供数十 GB 的 RAM,每小时不到一美元。
我发现这种方法在过去非常有用。
看帖子:
4.更改数据格式
您的数据是否以原始 ASCII 文本存储,如 CSV 文件?
也许您可以通过使用其他数据格式来加速数据加载并减少使用内存。一个很好的例子是像 GRIB,NetCDF 或 HDF 这样的二进制格式。
有许多命令行工具可用于将一种数据格式转换为另一种不需要将整个数据集加载到内存中的数据格式。
使用其他格式可以允许您以更紧凑的形式存储数据,以节省内存,例如 2 字节整数或 4 字节浮点数。
5.流数据或使用渐进式加载
是否所有数据都需要同时存在于内存中?
也许您可以使用代码或库来根据需要将数据流或逐步加载到内存中进行训练。
这可能需要可以使用诸如随机梯度下降之类的优化技术迭代地学习的算法,而不是需要存储器中的所有数据来执行矩阵运算的算法,诸如线性和逻辑回归的一些实现。
例如,Keras 深度学习库提供此功能以逐步加载图像文件,称为 flow_from_directory 。
另一个例子是 Pandas 库,它可以以块加载大型 CSV 文件。
6.使用关系数据库
关系数据库提供了存储和访问非常大的数据集的标准方法。
在内部,存储在磁盘上的数据可以批量逐步加载,并且可以使用标准查询语言(SQL)进行查询。
可以使用免费的开源数据库工具,如 MySQL 或 Postgres ,大多数(全部?)编程语言和许多机器学习工具可以直接连接到关系数据库。您也可以使用轻量级方法,例如 SQLite 。
我发现这种方法在过去对非常大的表格数据集非常有效。
同样,您可能需要使用可以处理迭代学习的算法。
7.使用大数据平台
在某些情况下,您可能需要求助于大数据平台。
也就是说,一个专为处理非常大的数据集而设计的平台,允许您在其上使用数据转换和机器学习算法。
两个很好的例子是带有 Mahout 机器学习库的 Hadoop 和带有 MLLib 库的 Spark。
我相信,如果您已经用尽上述选项,这是最后的选择,只是因为这会给您的机器学习项目带来额外的硬件和软件复杂性。
然而,存在数据非常大且以前的选项不会削减数据的问题。
摘要
在这篇文章中,您发现了一些在处理机器学习的大型数据文件时可以使用的策略。
您是否知道或尝试过其他方法?
在下面的评论中分享。
你尝试过这些方法吗?
请在评论中告诉我。
建立机器学习系统的经验教训
原文:
machinelearningmastery.com/lessons-learned-building-machine-learning-systems/
在 MLConf 最近的一次演讲中, Xavier Amatriain 描述了他在 Netflix 的研究/工程经理建立机器学习系统时学到的 10 个课程。
在这里,您将从他的演讲和幻灯片中总结发现这 10 节课。
建筑机器学习系统的经验教训摘自 Xavier 的演讲
10 经验教训
Xavier 提出的 10 个课程可归纳如下:
- 更多数据与/和更好的模型
- 您可能不需要所有大数据
- 更复杂的模型不能改善事物的事实并不意味着你不需要
- 要深思熟虑的训练数据
- 学会处理(诅咒)演示偏见
- UI 是算法唯一最重要的通信渠道:用户
- 数据和模型都很棒。你知道什么更好吗?正确的评估方法
- 分发算法很重要,但知道在哪个级别执行它更为重要
- 选择你的超参数是明智的,这是值得的
- 有一些你可以离线做的事情,有些东西你不能…而且两者之间的所有东西都近在咫尺
我们将依次查看每个帖子的其余部分。
1.更多数据与更好的模型
泽维尔质疑引用的“_ 更多数据胜过更好的模型 _”。我指向 Anand Rajaraman 的帖子“更多数据通常胜过更好的算法”,可以用这句话来概括:
总而言之,如果您的资源有限,请添加更多数据,而不是微调机器学习算法的权重。
他还指出 Novig 2009 年与 Facebook 工程部就更多数据与更好的算法进行的谈话。
然后,他指出了一篇论文“推荐新电影:甚至一些评级比元数据更有价值”,其中明确指出,较少数据具有高预测性,而更多数据则不是。
它不是,也不是。您需要更多数据和更好的算法。
2.您可能不需要所有大数据
在本课中,他指出,仅仅因为你拥有大数据并不意味着你应该使用它。
他评论说,大数据样本可以提供良好的结果,更智能的采样(如分层或平衡采样)可以带来更好的结果。
3.复杂数据可能需要复杂的模型
下一课是关于特征工程的一个微妙但重要的提醒。
他评论说,为线性模型添加更复杂的特征可能不会显示出改进。相反,使用具有简单特征的复杂模型也可能不会带来改进。
他的观点是,有时需要复杂的模型来模拟复杂的特征。
我还要指出,复杂的特征可以分解为简单的特征,供简单的线性模型使用。
4.考虑你的训练数据
Xavier 评论了对用户行为数据进行非规范化时可能存在的困难。他指出了选择正面和负面案例的问题,在对问题进行建模之前,必须先考虑在哪里绘制线条。这是一个数据表示问题,对您可以实现的结果产生巨大影响。
我建议你为许多这样的可能线路产生想法并测试它们,或者最有希望的。
他还提醒说,如果您在离线实验中看到了很好的结果,那么您应该检查旅行时间 - 预测决策是否使用了样本信息,例如包含用户未来行为的摘要。
5.学会处理表达偏见
第五课是关于向用户呈现的所有可能选择没有统一概率的问题。
用户界面和人类用户行为影响将选择呈现项目的概率。那些预测但未呈现的项目可能没有失败,也不应该这样建模。
这是一个复杂的课程,需要对点击行为进行建模,以便梳理模型预测的实际表现。
6. UI< =>通过用户的算法
与第 5 课相关,这是观察到建模算法和用户界面紧密耦合。
对用户界面的更改可能需要更改算法。
7.使用正确的评估方法
Xavier 概述了所使用的在线离线测试过程。
离线在线训练流程
摘自 Xavier 的演讲
该图显示了离线模型的反向测试,以测试假设,并在线进行 A / B 测试验证这些结果。这是一张有价值的幻灯片。
他指出,模型可以针对短期目标(如点击或手表)进行优化,但用户保留是一个真正的目标,称为整体评估标准。
他提醒我们尽可能使用长期指标,只考虑长期指标。
与他们的离线在线方法相关,Xavier 评论了将离线指标与在线 A / B 测试相关联的公开问题。
8.选择正确的级别
他指出了三个级别,可以划分给定的实验以测试假设,并且每个级别都有不同的要求。
- 人口子集
- 超参数的组合
- 训练数据的子集
谨慎选择。
9.选择你的超参数是明智的,这是值得的
Xavier 警告说,在调整模型时选择正确的指标非常重要。但他也提到包括模型复杂性在内的东西也是一个重要问题。
除了网格或随机参数搜索之外,Xavier 还提醒我们查看可以减少搜索时间的概率方法。
10.离线,在线和近线
最后的课程告诫要花时间考虑何时需要计算模型的元素并尽可能早地计算这些元素。他指出,除了离线和在线计算之外,你可以近距离接近(他称之为近线)。
摘要
这是一套很棒的课程,可以应用于您自己的建模。
您可以在这里查看 Xavier 的幻灯片:“从建筑机器学习系统中学到的 10 个经验教训”
<iframe allowfullscreen=“” frameborder=“0” height=“356” marginheight=“0” marginwidth=“0” scrolling=“no” src=“https://www.slideshare.net/slideshow/embed_code/41571741” style=“border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;” width=“427”></iframe>
10 Lessons Learned from Building Machine Learning Systems from Xavier Amatriain
Xavier 的演示文稿被记录下来,您可以在这里观看整个内容:“ Xavier Amatriain,算法工程总监,Netflix @ MLconf SF ”
<iframe allowfullscreen=“” frameborder=“0” height=“281” src=“https://www.youtube.com/embed/WdzWPuazLA8?feature=oembed” width=“500”></iframe>
如何使用机器学习清单可靠地获得准确的预测(即使您是初学者)
如何在问题出现后使用机器学习获得准确的结果?
困难在于每个问题都是独特的,需要不同的数据源,特征,算法,算法配置等等。
解决方案是使用每次都能保证良好结果的清单。
在这篇文章中,您将发现一个清单,您可以使用该清单可靠地获得有关机器学习问题的良好结果。
机器学习清单
照片由 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,它可能是 Makefile。你会发现你的东西中的错误,你可能希望能够在一滴一滴的情况下重新生成你所有的结果。如果它从零开始都是程序化的,那就像键入“
make
”一样简单。 - 记录所有结果。我认为每个算法都运行以保存文件中的预测是一种很好的做法。还要将每个数据转换和样本保存在单独的文件中。如果数据作为项目的一部分位于目录中的文件中,则始终可以对数据运行新的分析。如果结果需要数小时,数天或数周才能实现,那么这一点非常重要。这包括交叉验证预测,这些预测可用于更复杂的混合策略。
- 不要跳过步骤。你可以缩短一步,但不要跳过任何步骤,即使你认为你知道这一切。清单的想法是保证结果。医生非常聪明,非常合格,但仍需要提醒他们洗手。有时您可以简单地忘记过程中的关键步骤,这绝对是关键(比如定义您的问题并意识到您甚至不需要机器学习)。
我很怀疑,这真的有用吗?
这只是一张清单,而不是银弹。
你仍然需要投入工作。您仍然需要了解算法和数据操作方法以从中获得最大收益。您仍然需要了解您的工具以及如何充分利用它们。
亲自试试吧。
向自己证明可以通过端到端的方式解决问题。一小时内完成。
一旦获得第一个结果,您将看到它是多么容易以及为什么在问题定义,数据准备和在流程后端提供解决方案时花费大量时间这么重要。
这种方法不会给你带来最好的结果。
该清单可以在问题中可靠,一致地提供良好的结果。
你不会通过这个核对清单赢得 Kaggle 比赛,你会得到一个你可以提交的结果,并且可能超过排行榜的 50%(通常要高得多)。
您可以使用它来获得很好的结果,但这是您想要投入多少时间的问题。
清单用于表格数据的分类问题。
我选择演示这个清单,其中包含表格数据的分类问题。
这并不意味着它仅限于分类问题。您可以轻松地将其适应其他问题类型(如回归)和其他数据类型(如图像和文本)。
我过去曾使用过这个清单的变体。
清单不包括技术“XYZ
”。
清单的美妙之处在于简单的想法。
如果您不喜欢我已经布置的步骤,请用您自己的步骤替换它们。添加您想要使用的所有技术。建立自己的清单!
如果你这样做,我很乐意看到一份副本。
这种方法有很多冗余。
我认为通过机器学习问题来处理开发和探索之间的平衡。
您希望利用有关机器学习,数据和域名的所有知识。将这些元素添加到您的流程中以解决给定问题。
但不要排除探索。你需要尝试你偏见所暗示的不是最好的东西。因为有时候,你的偏见往往不好。这是数据和机器学习的本质。
为什么不只是对管道进行编码?
为什么不!也许你应该如果你是一个系统人。
我有很多次使用许多不同的工具链和平台。在编码系统中很难找到合适的灵活性。似乎总有一种方法或工具不适合整齐。
我怀疑许多机器学习即服务(MLaaS)创建一个类似于上述清单的管道,以确保良好的结果。
我不知道为什么会得到好结果。
这可能发生在你是初学者的时候。
您可以而且应该更深入地了解数据准备和建模算法的最终组合。您应该将所有程序都提供给您的结果,以便其他任何人都可以复制它(如果是工作项目,则公开或在您的组织内)。
如果交付方式具有可重复性且评估严格,那么良好的结果可以独立存在。如果执行得好,上面的清单会提供这些功能。
行动步骤
使用清单完成项目并建立一些信心。
- 选择一个问题,你可以在 1 到 2 小时内完成。
- 使用清单并获得结果。
- 分享您的第一个项目(在评论中)。
您想要上述电子表格的 PDF 和电子表格版本吗?
现在下载 并获得独家电子邮件提示和技巧。
机器学习模型运行期间要做什么
原文:
machinelearningmastery.com/machine-learning-model-running/
最近有一个问题是“如何在 ml 脚本运行时不浪费时间/拖延? “。
我认为这是一个重要的问题。我认为这个问题的答案显示了你的工作方法的组织或成熟程度。
我在这个问题上留下了小评论,但是在这篇文章中,我详细阐述了我的答案并给出了一些关于如何考虑这个问题,最小化它甚至完全避免它的观点。
在机器学习模型运行期间做什么
照片由 Mark Fischer ,保留一些权利
少运行实验
考虑一下为什么要执行模型运行。您几乎可以肯定地执行探索性数据分析的形式。
您试图了解您的问题,以达到特定准确度的结果。您可能需要报告结果,或者您可能希望模型可以运行。
您的实验旨在教您一些有关该问题的信息。因此,您需要清楚地了解要从您执行的每个实验中学习的内容。
如果您没有明确的明确问题,实验结果会启发,请考虑是否需要运行实验。
当您获得问题的经验答案时,请尊重这些结果。尽力将新知识整合到您对问题的理解中。这可能是半正式的工作产品,如日报或技术报告。
运行更快的实验
现代编程的编译运行修复循环非常有效。立竿见影的回报可以让您不断测试想法和课程更正。
这个过程并不总是那么有效。作为工程师,您曾经使用笔和纸手工设计模块和桌面检查他们的逻辑。如果你在编程中做任何数学,你很可能仍然使用这个过程。
一个有用的现代工具是单元测试,它使桌面检查过程自动化,使它们可重复。良好的测试设计的准则是速度。反馈越直接,您就可以更快地纠正错误并修复错误。
这里的教训是你想要速度。
您希望快速获得问题的经验答案,以便您可以提出后续问题。这并不意味着设计糟糕的实验。这意味着使实验变得很大或足够详细以回答一个问题。
实现更快速实验的最简单方法是使用减少的数据样本。它是如此简单的技术,它经常被忽视。
通常情况下,您正在寻找的效果可以与数据进行可预测的比例,无论是数据本身的属性,如异常值还是数据模型的准确率。
运行调整作为实验
一些实验本身就很慢,就像调整超参数一样。事实上,当您的追求是优化精确度时,调整可能会让人上瘾。
完全避免手动调整任何参数,这是一个陷阱!我的建议是使用随机或网格搜索等搜索方法设计有条理的调整实验。
收集结果并使用实验建议的最佳参数。
如果您想获得更好的结果,请在参数空间中减少超立方体设计后续实验,并将搜索算法更改为使用基于梯度(或准梯度)的方法。
在停机时间运行实验
避免在最有效的时间内进行实验。如果您在白天工作时间完成工作,请不要占用您的机器,并在此时关注模型运行等阻塞任务。
安排您的实验在您不工作时运行。在晚上,午餐时间和周末进行实验。
要在停机时间运行实验,意味着您需要安排它们。如果您能够批量实验,这将变得更加容易。
你可以花时间在一批中设计 5-10 个实验,准备模型运行并在你的关闭时间顺序或并行地运行实验。
这可能需要纪律来解决问题和实验所服务的答案。这样做的好处将是您获得的有关问题的深度知识以及获得问题的速度。
在场外进行实验
有些实验可能需要数天或数周,这意味着在工作站上运行它们实际上是不可行的。
对于长时间运行的实验,您可以利用云中的计算服务器(如 EC2 和朋友)或本地计算服务器。无论是哪种语言环境,都不能实时使用计算服务器。您提出问题并收到答案。
计算服务器的最有效使用是拥有一个问题队列和一个过程,用于消费并将答案集成到您不断增长的问题知识库中。
例如,您可以设置每天(或夜晚)运行一个实验的目标,无论如何。我经常尝试在新项目上坚持这种模式。这有助于保持高势头。
当想法减弱时,您可以通过轻率的优化实验填充队列,以调整表现良好的模型的参数,这是一个可以随时备份的持续后台任务。
在实验运行时进行计划
有时您必须在工作站上实时运行实验。模型运行时,工作站必须阻塞。原因将是一些迫切的实时要求,你不能拖延。
发生这种情况时,请记住您的项目并没有阻止您的想法,只有您的工作站。
拉出文本编辑器或笔和纸(首选,这样您就不会从实验运行中偷走任何循环)。利用这段时间深入思考您的项目。制作如下列表:
- 列出并优先考虑您想要执行的实验
- 列出问题,预期答案,所需的设置并影响每个实验的结果。
- 列出并优先考虑您可以做出的假设和实验以对其提出异议。
- 列出并优先考虑您要编写单元测试的代码区域。
- 列出您的问题的替代视角和框架。
要有创意,并考虑测试有关该项目的长期信念。
我喜欢在一天结束时做我的创造性工作,让我的潜意识在我睡觉时解决问题。我也喜欢在我的工作站上进行实验过夜,让它与我的潜意识一起思考。
摘要
在这篇文章中,您已经发现了一些方法来解决机器学习模型运行期间的高效问题。
以下是您可以使用的关键策略的摘要:
- 考虑每个实验是否需要使用它将为您理解问题作为评估标准提供的贡献。
- 设计实验运行速度更快,并使用数据样本来实现加速。
- 永远不要手动调整超参数,总是设计自动化实验来回答模型校准的问题。
- 在您的停工期间进行实验,例如过夜,午休和周末。
- 批量设计实验,以便您可以排队并安排执行。
- 委派实验运行来计算工作站以外的服务器以提高效率。
- 如果您必须运行阻止实时实验,请利用该时间深入思考您的问题,设计未来的实验并挑战基本假设。
机器学习表现改进备忘单
原文:
machinelearningmastery.com/machine-learning-performance-improvement-cheat-sheet/
32 个可以用来做出更好预测的技巧,窍门和黑客。
机器学习中最有价值的部分是预测性建模。
这是对历史数据进行训练并对新数据做出预测的模型的开发。
在预测性建模方面,首要问题是:
我怎样才能获得更好的结果?
这个备忘单包含了我自己应用多年的最佳建议,并研究了顶级机器学习从业者和竞赛获胜者。
通过本指南,您不仅可以获得不稳定性和提升表现,甚至可以获得有关预测问题的世界级结果。
让我们潜入。
请注意,本指南的结构基于早期指南,您可能对提高深度学习的表现非常有用,标题为:如何提高深度学习表现。
机器学习表现改进备忘单
照片由 NASA ,保留一些权利。
概观
此备忘单旨在为您提供提升机器学习问题表现的想法。
所有这一切都是获得突破的好主意。
找到一个想法,然后回来找另一个想法。
我将列表分为 4 个子主题:
- 通过数据提高表现。
- 使用算法提高表现。
- 通过算法调优提高表现。
- 使用 Ensembles 提高表现。
从列表中进一步增加,收益通常会变小。
例如,您的问题或更多数据的新框架通常会比调整最佳表现算法的参数给您更多的回报。并非总是如此,但总的来说。
1.通过数据提高表现
通过更改训练数据和问题定义,您可以获得巨大成功。也许即使是最大的胜利。
策略:为您的数据创建新的和不同的视角,以便最好地将基础问题的结构暴露给学习算法。
数据策略
- 获取更多数据。 _ 您可以获得更多或更好的质量数据吗?_ 现代非线性机器学习技术,如深度学习,可以通过更多数据继续提高表现。
- 发明更多数据。 _ 如果您无法获得更多数据,是否可以生成新数据?_ 也许您可以扩充或置换现有数据或使用概率模型生成新数据。
- 清理您的数据。 _ 你能改善数据中的信号吗?_ 可能存在可以修复或删除的缺失或损坏的观察结果,或者可以修复或删除的合理范围之外的异常值,以提高数据质量。
- 重采样数据。 _ 您可以重采样数据以更改大小或分布吗?_ 也许您可以在实验中使用更小的数据样本来加速或过度采样或对特定类型的欠采样观察,以便更好地在数据集中表示它们。
- 重构你的问题:_ 你能改变你正在解决的预测问题的类型吗?_ 将您的数据重新构建为回归,二元或多分类,时间序列,异常检测,评级,推荐等类型问题。
- 重缩放数据。 _ 你能重缩放数字输入变量吗?_ 输入数据的标准化和标准化可以提高使用加权输入或距离测量的算法的表现。
- 转换您的数据。 _ 您能重塑数据分发吗?_ 使输入数据更高斯或通过指数函数传递可以更好地将数据中的特征暴露给学习算法。
- 投射您的数据:_ 您可以将数据投影到较低维度的空间吗?_ 您可以使用无监督聚类或投影方法来创建数据集的全新压缩表示。
- 特征选择。 _ 所有输入变量都同等重要吗?_ 使用特征选择和特征重要性方法创建数据的新视图,以便使用建模算法进行探索。
- 特色工程。 _ 您可以创建和添加新的数据功能吗?_ 也许有些属性可以分解为多个新值(如类别,日期或字符串)或可以聚合以表示事件的属性(如计数,二进制标记或统计摘要)。
结果:您现在应该拥有一套新的数据集视图和版本。
下一页:您可以使用预测性建模算法评估每个值。
2.使用算法提高表现
机器学习就是算法。
策略:确定在表现基准之上执行且优于平均值的算法和数据表示。保持对结果和设计实验的怀疑,这使得很难欺骗自己。
算法策略
- 重采样方法。 _ 使用什么重采样方法来估算新数据的技巧?_ 使用可充分利用可用数据的方法和配置。具有保持验证数据集的 k 折交叉验证方法可能是最佳实践。
- 评估指标。 _ 用什么指标来评估预测技巧?_ 使用最能捕获问题和域要求的指标。它可能不是分类准确率。
- 基线表现。 _ 比较算法的基准表现是什么?_ 使用随机算法或零规则算法(预测均值或模式)来建立基线,通过该基线对所有评估的算法进行排名。
- 抽查线性算法。 _ 什么线性算法运作良好?_ 线性方法通常更偏向,易于理解并且训练速度快。如果你能取得好成绩,他们是首选。评估各种线性方法。
- 抽查非线性算法。 _ 哪些非线性算法效果很好?_ 非线性算法通常需要更多数据,具有更高的复杂性,但可以实现更好的表现。评估各种非线性方法。
- 从文献中窃取。 _ 文献中报道了哪些算法可以很好地解决您的问题?_ 也许您可以获得算法类型的想法或经典方法的扩展来探索您的问题。
- 标准配置。 _ 被评估算法的标准配置是什么?_ 每个算法都需要有机会在您的问题上做得很好。这并不意味着调整参数(但是)确实意味着要研究如何很好地配置每个算法并在算法烘烤中给它一个战斗机会。
结果:您现在应该有一个表现良好的算法和数据表示的简短列表。
下一步:下一步是通过算法调整来提高表现。
3.通过算法调整提高表现
算法调整可能是您花费大部分时间的地方。这可能非常耗时。您通常可以通过现场检查快速发现一两个表现良好的算法。从这些算法中获取最大收益可能需要数天,数周或数月。
策略:充分利用表现良好的机器学习算法。
调整策略
- 诊断。 _ 您对算法的诊断和评论是什么?_ 也许您可以查看学习曲线,以了解该方法是否过度或不合适,然后更正。不同的算法可以提供不同的可视化和诊断。查看算法预测的是非。
- 尝试直觉。 _ 你的直觉告诉你什么?_ 如果您将参数调整得足够长并且反馈周期很短,您可以直观地了解如何针对问题配置算法。试试这个,看看你是否可以提出新的参数配置来尝试更大的测试工具。
- 从文献中窃取。 _ 文献中使用了哪些参数或参数范围?_ 评估标准参数的表现是开始任何调整活动的好地方。
- 随机搜索。 _ 哪些参数可以使用随机搜索?_ 也许您可以使用算法超参数的随机搜索来公开您从未想过要尝试的配置。
- 网格搜索。 _ 什么参数可以使用网格搜索?_ 也许有标准超参数值的网格可以枚举以找到好的配置,然后用更精细和更精细的网格重复该过程。
- 优化。 _ 您可以优化哪些参数?_ 也许有结构或学习率等参数可以使用直接搜索程序(如模式搜索)或随机优化(如遗传算法)进行调整。
- 替代实现。 _ 该算法的其他实现是什么?_ 也许该方法的替代实现可以在相同数据上获得更好的结果。每种算法都有许多必须由算法实现者做出的微决策。其中一些决定可能会影响您的问题的技能。
- 算法扩展。 _ 算法的常见扩展是什么?_ 也许您可以通过评估方法的常用或标准扩展来提升表现。这可能需要实现工作。
- 算法定制。 _ 针对您的特定情况,可以对算法进行哪些自定义?_ 也许您可以对数据算法进行修改,从损失函数,内部优化方法到算法特定决策。
- 联系专家。 _ 算法专家在您的案例中推荐什么?_ 写一封简短的电子邮件,总结您的预测问题以及您尝试过的一位或多位专家学者对该算法的看法。这可能会揭示以前不为您所知的前沿工作或学术工作的新想法或新想法。
结果:您现在应该有一个关于机器学习问题的高度调整算法的简短列表,甚至可能只有一个。
下一步:此时可以完成一个或多个模型,用于预测或投入生产。通过组合来自多个模型的预测,可以获得表现的进一步提升。
4.用合奏提高表现
您可以组合多个模型的预测。在算法调整之后,这是下一个需要改进的重要领域。实际上,通过组合多个“足够好”模型的预测而不是多个高度调整(和脆弱)模型,您通常可以获得良好的表现。
策略:结合多个表现良好的模型的预测。
合奏策略
- 混合模型预测。 _ 你能直接结合多个模型的预测吗?_ 也许您可以使用相同或不同的算法来制作多个模型。从多个表现良好的模型的预测中获取均值或模式。
- 混合数据表示。 _ 您可以结合使用不同数据表示训练模型的预测吗?_ 您可能有许多不同的问题预测,可用于训练表现良好的算法,然后可以将其预测结合起来。
- 混合数据样本。 _ 您可以结合使用不同数据视图训练的模型吗?_ 也许你可以创建训练数据的多个子样本并训练一个表现良好的算法,然后结合预测。这称为 bootstrap 聚合或装袋,当每个模型的预测都是熟练的但以不同的方式(不相关)时,效果最佳。
- 正确预测。 _ 你能纠正表现良好的模特的预测吗?_ 也许您可以明确地纠正预测或使用像提升这样的方法来学习如何纠正预测错误。
- 学会结合。 _ 您是否可以使用新模型来学习如何最好地结合多个表现良好的模型的预测?_ 这称为堆叠泛化或堆叠,并且当子模型熟练但以不同方式并且聚合器模型是预测的简单线性加权时,通常可以很好地工作。这个过程可以重复多层深度。
结果:您应该拥有一个或多个表现优异的模型,其表现优于任何单一模型。
下一步:此时可以完成一个或多个集合,用于预测或投入生产。
最后的话
这个备忘单充满了想法,试图提高你的问题的表现。
如何开始
你不需要做任何事情。你需要一个好主意来提升表现。
以下是如何处理压倒性的问题:
- 选一组
- 数据。
- 算法。
- 调整。
- 合奏。
- 从组中选择一种方法。
- 选择一个尝试所选方法的东西。
- 比较结果,如果有改进,请保留。
- 重复。
分享您的结果
你觉得这篇文章有用吗?
你有没有一个有所作为的想法或方法?
让我知道,发表评论!我很乐意听到它。
来自世界级从业者 Phil Brierley 的机器学习技巧
原文:
machinelearningmastery.com/machine-learning-tips-from-a-world-class-practitioner-phil-brierley/
Phil Brierley 赢得了遗产健康奖 Kaggle 机器学习竞赛。 Phil 是一名机械工程师,并在他的公司 Tiberius Data Mining 中拥有数据挖掘的背景。这些天他很重视 R,并在另一个数据挖掘博客上留下了博客。
2013 年 10 月,他向 RG 特殊利益集团的墨尔本用户展示了他们。他的演讲题目是“提高预测模型准确率的技术”,您可以在下面观看:
<iframe allowfullscreen=“” frameborder=“0” height=“281” src=“http://www.youtube.com/embed/1fIyQL9FiAk?feature=oembed” width=“500”></iframe>
如果您想深入了解一个高度务实和有效的机器学习从业者如何解决问题,这是一个很好的演示。我想强调一下我从这个演讲中拿走的三点。
实用主义
菲尔打开演讲时发表评论说“布丁的证据在吃” - 你只能在尝试之后表明某些事情是成功的。菲尔对这个伟大的理论并不感兴趣,他希望证明一个模型通过查看它的结果而起作用。
他评论说,大多数问题涉及与人类有关的数据,而不是自然法则,这可能使问题变得复杂。他还评论说,他对发明新算法不感兴趣,而是从可用的算法中获得最佳效果。 R 有很多算法,这就是他使用它的原因。
合奏
菲尔是合奏的巨大支持者。他在他的 Heratage 健康奖中使用了他们,他用一个简单的足球小费示例展示了他们的力量,甚至使用众包来猜测房间里人的体重作为一个例子。
菲尔评论:不要建立一个伟大的模型,要求 10 个人创建每个模型并平均它们。
菲尔评论说不应该完全抛弃坏模式,但你应该寻找的是模型结果的多样性,你可以重新组合成一个改进的解决方案。通过寻找预测之间缺乏相关性来评估预测的多样性,预测应该最大化。
可视化
Phil 评论说可视化是一个重要且未充分利用的工具。他强调了眼球分布属性的实用性,以了解它们是多么明智,并突出数据的问题。他评论说,视觉检查可以帮助您了解统计摘要所不具备的数据中的陌生感。
这是一个很好的谈话,我强烈建议观看它。另请注意 Heratage Health Prize 中多年来对数据校准的深刻见解。
模型预测准确率与机器学习中的解释
原文:
machinelearningmastery.com/model-prediction-versus-interpretation-in-machine-learning/
在他们的书 Applied Predictive Modeling 中,Kuhn 和 Johnson 早期就模型预测准确率与模型解释的权衡进行了评论。
对于给定的问题,清楚地了解哪个是优先级,准确率或可解释性是至关重要的,以便可以明确而不是隐式地进行这种权衡。
在这篇文章中,您将发现并考虑这一重要的权衡。
模型准确率与可解释性
摄影:Donald Hobern,保留一些权利
准确率和可解释性
模型表现根据其准确率来估计,以预测事件在看不见的数据上的发生。更准确的模型被视为更有价值的模型。
模型可解释性提供了对输入和输出之间关系的深入了解。解释模型可以回答关于独立特征为什么预测依赖属性的问题。
之所以出现这个问题,是因为随着模型准确率的提高,模型复杂性也会增加,但代价是可解释性。
模型复杂性
准确度越高的模型可能意味着公司有更多的机会,收益,时间或金钱。并且因此优化了预测准确率。
精度的优化导致以附加模型参数(以及调整那些参数所需的资源)的形式进一步增加模型的复杂性。
“_ 不幸的是,最强大的预测模型通常是最不易解释的。_ “
具有较少参数的模型更易于解释。这很直观。线性回归模型具有每个输入特征的系数和截距项。例如,您可以查看每个术语并了解它们对输出的贡献。转向逻辑回归在底层关系方面提供了更多的权力,这些关系可以以功能转换为输出为代价进行建模,现在也必须与系数一起理解。
决策树(适度大小)可能是可以理解的,袋装决策树需要不同的视角来解释预测事件发生的原因。进一步推动,将多个模型的优化混合组合成单个预测可能超出有意义或及时的解释。
准确度特朗普可解释性
在他们的书中,库恩和约翰逊以牺牲解释为代价关注模型的准确率。
他们评论说:
“_ 只要复杂模型得到适当验证,使用为解释而不是预测表现而构建的模型可能是不合适的。_ “
解释是模型准确率的次要因素,它们的例子包括将电子邮件区分为垃圾邮件和非垃圾邮件,以及评估房屋作为问题的例子。医学实例被触及两次,并且在两种情况下都用于捍卫绝对需要和对可解释性准确率的需求,只要模型得到适当的验证。
我敢肯定,“但我验证了我的模型”在模型做出导致生命损失的预测时,无法进行调查。然而,有人怀疑这是一个需要仔细考虑的重要问题。
摘要
无论何时对问题进行建模,您都要决定模型准确率和模型解释之间的权衡。
您可以在选择用于模拟问题的方法时使用这种权衡的知识,并在呈现结果时明确您的目标。
机器学习竞赛的模型选择技巧
原文:
machinelearningmastery.com/model-selection-tips-from-competitive-machine-learning/
在对您的问题进行采样检查算法并调整好几个之后,您最终需要选择一个或两个最佳模型来继续。
这个问题被称为模型选择,可能很烦人,因为您需要在给定不完整信息的情况下做出选择。这是您创建的测试线束和您选择的测试选项的关键所在。
在这篇文章中,您将发现模型选择的灵感来自于机器学习竞赛,以及如何将这些技巧提升到更高水平并像其他任何复杂系统一样研究测试工具的想法。
型号选择
照片由 tami.vroma 拍摄,部分版权所有
比赛中的模型选择
在机器学习竞赛中,您将获得一些数据样本,您需要从中构建模型。
您为不可见的测试数据集提交预测,并评估这些预测的一小部分,并在公共排行榜上报告准确率。在比赛结束时,您在比赛中的排名取决于您对完整测试数据集的预测。
在某些比赛中,您必须选择一组或两组预测(以及创建它们的模型),您认为这些预测代表您与最终排名的所有其他参与者竞争的最佳努力。选择要求您根据自己的测试工具的估计精度和公共排行榜单独报告的准确度来评估模型的准确率。
这是模型选择的问题,因为您的信息不完整而具有挑战性。更糟糕的是,公共排行榜和您自己的私人测试工具报告的准确率很可能不同意。您应该选择哪种模式,如何在这种不确定性下做出正确的决策?
避免过拟合训练数据集
Log0 在他的帖子“如何在单打比赛中选择你的最终模特”中探讨了这个问题。
他评论说他个人在以前的比赛中遇到了过拟合训练数据集的问题,现在努力避免这个陷阱。竞赛中的症状是你在公共排行榜上排名很好,但是当最终分数被释放时,你的排名会落在私人排行榜上,通常很长。
他提供了许多建议,他建议可以帮助克服这个问题。
1.始终使用交叉验证
他评论说,单个验证数据集将对模型对未见数据的准确率给出不可靠的估计。一个小的验证数据集就是公共排行榜。
他建议在选择模型时始终使用交叉验证(CV)并遵循自己的 CV 估计精度,即使它可以是乐观的。
2.不要相信公共排行榜
公共排行榜非常令人分心。它向所有参与者展示了与其他人相比你有多好。除此之外,它充满了谎言。它不是对模型准确率的有意义的估计,实际上通常是对模型准确率的可怕估计。
Log0 评论公共排行榜得分不稳定,特别是与您自己的离线 CV 测试工具相比时。他评论说,如果您的简历看起来不稳定,您可以增加折叠数量,如果运行缓慢,您可以对数据样本进行操作。
这些是不使用交叉验证的常见异议的好方法。
3.选择不同的型号
多样化。 Log0 建议如果您能够选择两个或更多模型,那么您应该利用这个机会选择不同的模型子集。
他建议您按类型或方法对模型进行分组,并从每个组中选择最佳模型。从这个简短的列表中,您可以选择最终的型号。
他建议选择类似的模型意味着如果策略很差,那么模型会一起失败,让你失去一点。一个反驳的观点是,多样性是一种在您无法做出明确决定时使用的策略,而且倍增可以带来最大的回报。您需要仔细考虑您对模型的信任。
Log0 还提醒选择健壮的模型,即它们本身不太可能过拟合,例如大(多参数)模型。
坚固的测试线束的扩展
这是一个很棒的帖子和一些很棒的提示,但我认为你可以而且应该更进一步。
您可以像研究任何系统一样研究测试安全带的稳定性。
研究交叉验证线束的稳定性
您可以采用标准的稳健算法并评估交叉验证配置中折叠数的稳定性。每次交叉验证(CV)折叠执行 30 次重复,并重复 CV 折叠尺寸从 1 到 10。绘制结果并考虑给定 CV 折叠数的扩散和 CV 折叠从 1(您的基线)增加的准确度变化。
您可以使用给定 CV 折叠数上限/下限作为准确度的粗略不确定性。您还可以使用 CV fold = 1 与您选择的 CV 折叠之间的准确度差异来纠正乐观偏差。
研究数据样本的稳定性
采样时可以使用类似的技巧。采样理论是一个庞大而复杂的主题。我们可以执行如上所述的类似过程,并获取给定大小的 n 样本并估计准确度,然后尝试不同大小的样本。
将结果绘制为方框图或类似图可以让您了解采样大小的稳定性(以及采样方法,如果您正在对类进行分层或重新平衡 - 您可能应该尝试这样做)。
小心
过拟合潜伏在各地。
对 CV 参数或采样方法的研究正在使用所有可用数据。您正在了解给定标准算法在数据集上的稳定性,但您也在使用比用于评估模型的给定折叠或样本更多的数据来选择配置。这可能导致过拟合。
然而,这可能是有用的和有价值的,你需要平衡过拟合的真正问题,提高你对问题的理解。
摘要
在这篇文章中,您发现了在使用机器学习时选择最终模型时可以使用的三个技巧。这些提示对于机器学习竞赛非常有用,也可用于数据分析和生产系统,其中来自少数选定模型的预测是整体组合的。
您还学习了如何扩展这些技巧,以及如何针对给定的机器学习问题研究测试工具的配置,就像您使用任何机器学习算法的参数一样。
通过示例数据深入了解问题的稳定性,可以让您深入了解模型对未见数据的预期准确率。
机器学习需要多少训练数据?
原文:
machinelearningmastery.com/much-training-data-required-machine-learning/
您需要的数据量取决于问题的复杂程度和所选算法的复杂程度。
这是一个事实,但如果你处于机器学习项目的尖端,它对你没有帮助。
我被问到的一个常见问题是:
_ 我需要多少数据?_
我不能直接为你或任何人回答这个问题。但我可以给你一些思考这个问题的方法。
在这篇文章中,我列出了一套方法,您可以使用这些方法来考虑将机器学习应用到您的问题所需的训练数据量。
我希望这些方法中的一个或多个可以帮助您理解问题的难度以及它如何与您试图解决的归纳问题的核心紧密结合。
让我们深入研究它。
注意:您是否有自己的启发式方法来决定机器学习需要多少数据?请在评论中分享。
机器学习需要多少训练数据?
Seabamirum 的照片,保留一些权利。
你为什么问这个问题?
重要的是要知道为什么要询问训练数据集所需的大小。
答案可能会影响您的下一步。
例如:
- 你有太多的数据吗? 考虑开发一些学习曲线,以找出代表性样本有多大(下图)。或者,考虑使用大数据框架以使用所有可用数据。
- 你的数据太少了吗? 考虑确认你确实有太少的数据。考虑收集更多数据,或使用数据增加方法人为地增加样本量。
- 你还没有收集数据吗? 考虑收集一些数据并评估它是否足够。或者,如果是用于研究或数据收集是昂贵的,请考虑与域专家和统计学家交谈。
更一般地说,您可能会有更多的行人问题,例如:
- 我应该从数据库导出多少条记录?
- 需要多少样品才能达到理想的表现水平?
- 训练集必须有多大才能获得对模型表现的充分估计?
- 需要多少数据来证明一个模型比另一个更好?
- 我应该使用训练/测试拆分或 k 折交叉验证吗?
这篇文章中的建议可能试图解决这些后面的问题。
在实践中,我自己使用学习曲线(见下文)回答这个问题,在小数据集上使用重采样方法(例如 k 折交叉验证和自举),并在最终结果中添加置信区间。
您询问机器学习所需样品数量的原因是什么?
请在评论中告诉我。
_ 那么,您需要多少数据?_
它取决于;没有人能告诉你
没有人能告诉您预测性建模问题需要多少数据。
这是不可知的:一个棘手的问题,你必须通过实证调查发现答案。
机器学习所需的数据量取决于许多因素,例如:
- 问题的复杂性,名义上是未知的基础函数,它最好地将输入变量与输出变量联系起来。
- 学习算法的复杂性,名义上是用于从特定示例中归纳地学习未知底层映射函数的算法。
这是我们的出发点。
并且“_ 取决于 _”是大多数从业者在您第一次提出时会给您的答案。
比喻的理由
很多人在你面前研究过很多应用的机器学习问题。
其中一些人已公布了他们的结果。
也许您可以查看与您类似的问题的研究,作为对可能需要的数据量的估计。
同样,通常会对算法表现如何随数据集大小进行扩展进行研究。也许这些研究可以告诉您使用特定算法需要多少数据。
也许你可以平均多次研究。
在 Google, Google Scholar 和 Arxiv 上搜索论文。
3.使用域专业知识
您需要一个代表您要解决的问题的问题数据样本。
通常,示例必须是独立且相同的。
请记住,在机器学习中,我们正在学习将输入数据映射到输出数据的功能。学习的映射函数只能与您提供的数据一样好。
这意味着需要有足够的数据来合理地捕获输入要素之间以及输入要素和输出要素之间可能存在的关系。
使用您的领域知识,或找到领域专家和有关域的合理性以及可能需要合理捕获问题中有用复杂性所需的数据规模。
4.使用统计启发式
有统计启发式方法可用于计算合适的样本量。
我见过的大部分启发式算法都是分类问题,它是类,输入特征或模型参数的函数。一些启发式方法看起来很严谨,其他启发式方式看起来很特别。
以下是您可以考虑的一些示例:
- 类别的因子:每个类必须有 x 个独立的例子,其中 x 可以是数十,数百或数千(例如 5,50,500,5000)。
- 输入特征数量的因子:必须有比输入特征多 x%的例子,其中 x 可以是十(例如 10)。
- 模型参数数量的因子:模型中每个参数必须有 x 个独立的例子,其中 x 可以是数十(例如 10)。
它们看起来都像是特殊的缩放因子给我。
你使用过这些启发式算法吗?
怎么回事?请在评论中告诉我。
在关于这个主题的理论工作(不是我的专业领域!)中,分类器(例如 k-最近邻居)经常与最优贝叶斯决策规则形成对比,并且难度在维数灾难的背景下表征;也就是说随着输入特征数量的增加,问题的难度呈指数增长。
例如:
- 统计模式识别中的小样本量效应:对从业者的建议,1991
- 模式识别实践中的维度和样本量考虑,1982
结果建议避免使用局部方法(如 k-最近邻居)来处理来自高维问题的稀疏样本(例如,少量样本和许多输入特征)。
有关该主题的更友善的讨论,请参阅:
- 第 2.5 节高维局部方法,统计学习的要素:数据挖掘,推理和预测,2008。
5.非线性算法需要更多数据
更强大的机器学习算法通常被称为非线性算法。
根据定义,他们能够学习输入和输出特征之间复杂的非线性关系。您可能正在使用这些类型的算法或打算使用它们。
这些算法通常更灵活,甚至是非参数的(除了这些参数的值之外,它们还可以确定模拟问题所需的参数数量)。它们也是高方差,意味着预测因用于训练它们的特定数据而异。这种增加的灵活性和功率需要更多的训练数据,通常需要更多的数据。
实际上,一些非线性算法(如深度学习方法)可以在您为其提供更多数据时继续提高技能。
如果线性算法通过每个类的数百个示例实现了良好的表现,则每个类可能需要数千个示例用于非线性算法,如随机森林或人工神经网络。
6.评估数据集大小与模型技能
在开发新的机器学习算法时,通常会演示甚至解释算法的表现以响应数据量或问题的复杂性。
这些研究可能会或可能不会由算法的作者执行和发布,并且可能存在或可能不存在您正在使用的算法或问题类型。
我建议您使用可用数据和一个表现良好的算法(如随机森林)进行自己的研究。
设计一项评估模型技能与训练数据集大小的研究。
将结果绘制为具有 x 轴上的训练数据集大小和 y 轴上的模型技能的线图,将使您了解数据大小如何影响模型对特定问题的技能。
该图称为学习曲线。
从该图中,您可以预测开发熟练模型所需的数据量,或者在达到收益递减拐点之前实际需要的数据量。
我强烈推荐这种方法,以便在全面理解问题的背景下开发健壮的模型。
7.朴素的猜测
在应用机器学习算法时,您需要大量数据。
通常,您需要的数据超出了传统统计中可能需要的数据。
我经常回答轻率响应需要多少数据的问题:
_ 获取并使用尽可能多的数据。_
如果按下问题,并且对问题的具体细节一无所知,我会说一些朴素的事情:
- 你需要成千上万的例子。
- 不下百个。
- 理想情况下,数十或数十万的“平均”建模问题。
- 数百万或数百万的“硬”问题,如深度学习所解决的问题。
同样,这只是更多的临时猜测,但如果你需要它,它就是一个起点。所以开始吧!
8.获取更多数据(无关紧要!?)
大数据通常与机器学习一起讨论,但您可能不需要大数据来适应您的预测模型。
有些问题需要大数据,所有数据都有。例如,简单的统计机器翻译:
如果您正在执行传统的预测性建模,那么训练集大小的回报可能会有所减少,您应该研究您的问题和您选择的模型以查看该点的位置。
请记住,机器学习是一个归纳过程。该模型只能捕获它所看到的内容。如果您的训练数据不包含边缘情况,则模型很可能不支持它们。
不要拖延;入门
现在,停止准备为您的问题建模并对其进行建模。
不要让训练集大小的问题阻止您开始预测性建模问题。
在许多情况下,我认为这个问题是拖延的一个原因。
获取所有可用的数据,使用您拥有的数据,并查看模型对您的问题的有效性。
学习一些东西,然后采取行动,通过进一步分析更好地了解您拥有的内容,通过扩充扩展您拥有的数据,或从您的域中收集更多数据。
进一步阅读
如果您要深入了解,本节将提供有关该主题的更多资源。
在 Quora,StackOverflow 和 CrossValidated 等 Q&amp; A 网站上围绕这个问题进行了大量讨论。以下是一些可能有用的选择示例。
- 需要多大的训练集?
- 考虑维数诅咒的神经网络训练集大小
- 如何减少训练集大小?
- 训练集大小的增加是否有助于永久提高准确度或是否存在饱和点?
- 如何为小样本数据选择训练,交叉验证和测试集大小?
- 训练神经网络时,很少有训练样例太少?
- 训练深度神经网络的建议最小训练数据集大小是多少?
我希望对这个问题有一些很好的统计研究;这里有一些我能找到的。
- 分类模型的样本量规划,1991
- 模式识别实践中的维度和样本量考虑,1982
- 统计模式识别中的小样本量效应:对从业者的建议,1991
- 预测分类表现所需的样本量,2012
其他相关文章。
如果您了解更多信息,请在下面的评论中告诉我们。
摘要
在这篇文章中,您发现了一套思考和推理回答常见问题的方法:
_ 机器学习需要多少训练数据?_
这些方法有帮助吗?
请在下面的评论中告诉我。
你有任何问题吗?
在下面的评论中提出您的问题,我会尽力回答。
当然,除了 _ 你 _ 特别需要多少数据的问题。
如何系统地规划和运行机器学习实验
原文:
machinelearningmastery.com/plan-run-machine-learning-experiments-systematically/
机器学习实验可能需要很长时间。在某些情况下,小时,天,甚至几周。
这为您提供了大量时间来思考和规划要执行的其他实验。
此外,平均应用的机器学习项目可能需要数十到数百个离散实验,以便找到提供良好或良好表现的数据准备模型和模型配置。
实验的抽象性质意味着您需要仔细计划和管理您运行的实验的顺序和类型。
你需要系统化。
在这篇文章中,您将发现一种计划和管理机器学习实验的简单方法。
通过这种方法,您将能够:
- 随时掌握项目中最重要的问题和发现。
- 跟踪您已完成并希望运行的实验。
- 放大提供最佳表现的数据准备,模型和模型配置。
让我们潜入。
如何系统地规划和运行机器学习实验
照 Qfamily ,保留一些权利。
数以百计的实验混乱
我喜欢一夜之间进行实验。大量的实验。
这样,当我醒来时,我可以查看结果,更新我的工作(以及不工作的)的想法,并启动下一轮实验,然后花一些时间分析结果。
我讨厌浪费时间。
考虑到我所拥有的时间和资源,我讨厌运行不会让我更接近找到最熟练模型的目标的实验。
很容易忘记你所处的位置。特别是在您有数百个实验的结果,分析和发现之后。
对实验的管理不善会导致以下情况:
- 你正在看实验。
- 您正试图在当前批次完成后立即提出好的实验想法。
- 您运行之前已经运行过的实验。
你永远不想在任何这些情况下!
如果你在游戏中,那么:
- 您确切地知道您一目了然地进行了哪些实验以及结果是什么。
- 您有很长的实验列表,按预期收益排序。
- 你有时间深入研究结果分析,并想出新的和疯狂的想法来尝试。
但是,我们如何才能在数百个实验中保持领先地位?
系统地设计和运行实验
我发现的一种方法是帮助我系统地进行项目实验,就是使用电子表格。
管理您已完成的,正在运行的实验,以及您希望在电子表格中运行的实验。
它简单而有效。
简单
这很简单,我或任何人都可以从任何地方访问它,看看我们在哪里。
我使用 Google 文档来托管电子表格。
没有代码。没有笔记本。没有华丽的网络应用程序。
只是一个电子表格。
有效
这是有效的,因为它只包含每个实验一行所需的信息,以及每个信息的一列,以跟踪实验。
完成的实验可以与计划的实验分开。
只设置和运行计划中的实验,并且它们的顺序确保首先运行最重要的实验。
您会惊讶于这种简单的方法可以节省您的时间并让您深入思考您的项目。
示例电子表格
我们来看一个例子。
我们可以设想一个包含以下列的电子表格。
这些只是我上一个项目的一个例子。我建议根据自己的需要调整这些。
- 子项目:子项目可能是您正在探索的一组想法,技术,数据准备等。
- 上下文:上下文可能是特定目标,例如击败基线,调整,诊断等。
- 设置:设置是实验的固定配置。
- 名称:名称是唯一标识符,也许是脚本的文件名。
- 参数:参数是实验中变化或查看的内容。
- 值:该值是实验中正在探索的参数的值。
- 状态:状态是实验的状态,例如计划,正在运行或已完成。
- 技能:该技能是对项目真正重要的北极指标,如准确率或错误。
- 问题:问题是该实验试图解决的激励性问题。
- 发现:该发现是实验结果的一行摘要,即问题的答案。
为了具体说明,下面是 Google Doc 电子表格的屏幕截图,其中包含这些列标题和一个人为的例子。
系统实验记录
我不能说这种方法花了多少时间拯救了我。并且在追求获得最佳结果时被证明是错误的假设数量。
事实上,我发现深度学习方法通常对假设和默认值非常不利。在设计实验时请记住这一点!
充分利用您的实验
以下是一些技巧,可以帮助您在项目中充分利用这种简单的方法。
- 头脑风暴:花时间经常审查发现并列出新问题和实验来回答这些问题。
- 挑战:挑战假设并挑战先前的发现。扮演科学家并设计可能会伪造您的发现或期望的实验。
- 子项目:考虑使用子项目来组织您的调查,您可以跟踪线索或调查特定方法。
- 实验顺序:使用行顺序作为优先级,以确保首先运行最重要的实验。
- 深入分析:将结果和汇总结果的更深入分析保存到另一份文件中;电子表格不是地方。
- 实验类型:不要害怕混入不同的实验类型,如网格搜索,采样检查和模型诊断。
你会知道这种方法在以下情况下运作良好:
- 您正在搜索 API 文档和论文,以获取更多有关事物的想法。
- 排队的实验远远多于运行它们的资源。
- 你正在认真考虑雇用更多的 EC2 实例。
摘要
在这篇文章中,您了解了如何有效地管理已运行,正在运行以及您希望在电子表格中运行的数百个实验。
您发现一个简单的电子表格可以帮助您:
- 跟踪您运行的实验和发现的内容。
- 跟踪您想要运行的实验以及他们将回答的问题。
- 为您的预测性建模问题放大最有效的数据准备,模型和模型配置。
您对此方法有任何疑问吗?你自己做过类似的事吗?
请在下面的评论中告诉我。
应用机器学习的过程
原文:
machinelearningmastery.com/process-for-working-through-machine-learning-problems/
_
_ 提供高于平均结果的 _
_ 预测模型问题的系统过程 __
随着时间的推移,在应用机器学习问题时,您需要开发一种模式或流程,以便快速获得良好的稳健结果。
开发完成后,您可以在项目之后一次又一次地使用此过程。您的流程越健壮,越发展,您获得可靠结果的速度就越快。
在这篇文章中,我想与您分享我处理机器学习问题的过程的骨架。
您可以将其用作下一个项目的起点或模板。
5 步系统过程
我喜欢使用 5 个步骤:
- 定义问题
- 准备数据
- 采样检查算法
- 改善结果
- 目前的结果
这个过程有很多灵活性。例如,“准备数据”步骤通常分解为分析数据(汇总和图表)并准备数据(为实验准备样品)。 “抽查”步骤可能涉及多个正式实验。
这是一条伟大的大型生产线,我尝试以线性方式进行。使用自动化工具的好处在于您可以返回几个步骤(例如从“改进结果”回到“准备数据”)并插入数据集的新变换并在中间步骤中重新运行实验以查看有趣的结果出来了,它们与你之前执行的实验相比如何。
生产线
摄影: East Capital ,部分版权所有
我使用的过程是从数据库(或 KDD)中的知识发现的标准数据挖掘过程改编而来的,有关详细信息,请参阅文章什么是数据挖掘和 KDD 。
1.定义问题
我喜欢使用三步过程来定义问题。我喜欢快速行动,我使用这个迷你流程从几个不同的角度很快看到问题:
- 第 1 步:有什么问题? 非正式地和正式地描述问题并列出假设和类似问题。
- 第 2 步:为什么问题需要解决? 列出解决问题的动机,解决方案提供的好处以及解决方案的使用方法。
- 第 3 步:我该如何解决这个问题? 描述如何手动解决问题以刷新领域知识。
您可以在帖子中了解有关此过程的更多信息:
2.准备数据
我将数据准备与数据分析阶段相结合,该阶段涉及总结属性并使用散点图和直方图对其进行可视化。我还想详细描述属性和属性之间的关系。这种笨拙的工作迫使我在问题丢失之前考虑问题上下文中的数据
实际的数据准备过程分为以下三个步骤:
- 步骤 1:数据选择:考虑可用的数据,缺少的数据以及可以删除的数据。
- 步骤 2:数据预处理:通过格式化,清理和采样来组织您选择的数据。
- 步骤 3:数据转换:通过使用缩放,属性分解和属性聚合的工程特征,转换为机器学习做好准备的预处理数据。
您可以在帖子中了解有关准备数据的此过程的更多信息:
3.抽查算法
我默认在测试工具中使用 10 倍交叉验证。所有实验(算法和数据集组合)重复 10 次,并收集和报告准确度的均值和标准偏差。我还使用统计显着性检验从噪声中清除有意义的结果。箱形图对于总结每个算法和数据集对的准确度结果的分布非常有用。
我发现了检查算法,这意味着将一堆标准机器学习算法加载到我的测试工具中并执行正式实验。我通常在我准备好的数据集的所有转换和缩放版本中运行来自所有主要算法系列的 10-20 个标准算法。
采样检查的目标是清除擅长挑选问题结构的算法类型和数据集组合,以便通过重点实验更详细地研究它们。
可以在该步骤中执行具有良好表现算法族的更集中的实验,但是算法调整留待下一步骤。
您可以在帖子中发现有关定义测试工具的更多信息:
您可以在帖子中发现抽查算法的重要性:
4.改善结果
在现场检查之后,是时候从钻机中挤出最好的结果了。我这样做是通过对最佳表现算法的参数进行自动灵敏度分析。我还使用顶级执行算法的标准集合方法设计和运行实验。我花了很多时间思考如何从数据集或已经证明表现良好的算法族中获得更多。
同样,结果的统计显着性在这里至关重要。很容易关注方法并使用算法配置。结果只有在它们很重要且所有配置都已经过考虑并且实验是批量执行时才有意义。我也想在问题上保持自己的个人排行榜。
总之,改进结果的过程包括:
- 算法调整:通过模型参数空间将发现最佳模型视为搜索问题。
- 集合方法:将多个模型的预测结合起来。
- 极限特征工程:数据准备中看到的属性分解和聚合被推到极限。
您可以在帖子中发现有关此过程的更多信息:
5.目前的结果
复杂的机器学习问题的结果除非付诸实现,否则毫无意义。这通常意味着向利益相关者展示。即使这是我为自己工作的竞争或问题,我仍然会经历呈现结果的过程。这是一个很好的练习,给了我明确的学习,我可以在下次建立。
我用来呈现结果的模板如下,可以采用文本文档,正式报告或演示幻灯片的形式。
- 上下文(为什么):定义问题所在的环境并设置研究问题的动机。
- 问题(问题):简单地将问题描述为你出去回答的问题。
- 解决方案(答案):简要描述解决方案,作为您在上一节中提出的问题的答案。请明确点。
- 调查结果:您在观众感兴趣的路上发现的项目符号列表。它们可能是数据中的发现,已完成或未起作用的方法,或者您在旅程中获得的模型表现优势。
- 限制:考虑模型不起作用的地方或模型未回答的问题。不要回避这些问题,如果你可以定义它不擅长的地方,那么定义模型擅长的地方会更加可信。
- 结论(为什么+问题+答案):重新审视“为什么”,研究问题以及您在一个易于记忆并为自己和他人重复的紧凑小包装中发现的答案。
您可以在帖子中发现有关使用机器学习项目结果的更多信息:
摘要
在这篇文章中,您已经学习了我处理机器学习问题的通用模板。
我使用这个过程几乎没有失败,我使用它跨越平台,从 Weka ,R 和 scikit-learn 甚至新平台我一直在玩像 pylearn2。
您的流程是什么,发表评论并分享?
您是否会复制此流程,如果是,您将对其进行哪些更改?
默认情况下可重现的机器学习结果
原文:
machinelearningmastery.com/reproducible-machine-learning-results-by-default/
在软件项目中获得可重现的结果是一种很好的做法。它现在甚至可能是标准做法,我希望它是。
您可以将任何开发人员从街上带走,他们应该能够按照您的流程检查修订控制的代码库,并构建可随时使用的软件。如果您有设置环境和将软件发布到用户/操作环境的过程,那就更好了。
它是工具和过程使结果可重复。在这篇文章中,您将了解到,使机器学习项目的结果具有可重复性并且机器学习领域的从业者和学者都在努力解决这一问题同样重要。
作为一名程序员和开发人员,如果您有这门学科,那么您已经拥有了向前发展的工具和流程。
可重复的计算研究
照片来源蔡司显微镜,保留一些权利
计算科学成果的再现性
实验的再现性是科学方法的主要原则之一。你写下你所做的,但其他科学家不必接受你的话,他们遵循相同的过程,并期望得到相同的结果。
计算科学的工作涉及代码,在读取和写入数据的计算机上运行。报告未明确指定任何这些元素的结果的实验很可能不易重现。如果实验无法再现,那么工作的价值是什么。
这是计算科学中的一个开放性问题,并且随着越来越多的领域依赖于实验的计算结果而变得越来越令人担忧。在本节中,我们将通过查看一些考虑该问题的论文来回顾这个未解决的问题。
可重复计算研究的十个简单规则
这是 2013 年由 Geir Kjetil Sandve,Anton Nekrutenko,James Taylor 和 Eivind Hovig 撰写的 PLoS 计算生物学文章。在论文中,作者列出了简单的 10 条规则,如果遵循这些规则,预计将导致更容易获得(可重复的!?)计算研究。规则总结如下。
- 规则 1 :对于每个结果,跟踪它是如何产生的
- 规则 2 :避免手动数据操作步骤
- 规则 3 :归档所有使用的外部程序的精确版本
- 规则 4 :版本控制所有自定义脚本
- 规则 5 :在标准化格式中记录所有中间结果
- 规则 6 :对于包含随机性的分析,请注意基础随机种子
- 规则 7 :始终将原始数据存储在地块之后
- 规则 8 :生成分层分析输出,允许检查增加细节的层
- 规则 9 :将文本陈述连接到基础结果
- 规则 10 :提供对脚本,运行和结果的公共访问
作者正在评论计算生物学领域。不过,我认为规则还远远不够。我发现它们具有描述性,而且我会更具说明性。
例如,通过规则 2“避免手动数据操作步骤”,我认为所有数据操作都是自动化的。对于规则 4“版本控制所有自定义脚本”,我认为创建工作产品的整个自动化过程都在版本控制中。
如果您是熟悉专业流程的开发人员,那么您应该充分考虑依赖关系管理,构建系统,可以执行嵌入式代码的文档的标记系统以及持续集成工具如何真正带来一些严谨性。
可访问的可重复研究
Jill Mesirov 在 2010 年发表在“科学”杂志上的一篇文章。在这篇简短的文章中,作者介绍了一系列促进科学家可重复计算研究的系统术语,特别是:
- 可重复研究系统(RRS):由可重复的研究环境和可重复的研究出版商组成。
- 可重复研究环境(RRE):计算工具,数据管理,分析和结果以及将它们打包在一起以进行再分配的能力。
- 可重复研究出版社(RRP):文件准备系统,链接到可重复研究环境,并提供嵌入分析和结果的能力。
描述了一种原型系统,该系统是为基因表达分析实验开发的,称为 GenePattern-Word RRS。
再次,通过软件开发和可用工具的眼睛,RRE 听起来像修订控制加上具有依赖关系管理和持续集成服务器的构建系统。 RRP 听起来像一个带有链接和构建过程的标记系统。
邀请可重复的计算研究
这是 David Donoho 在 2010 年生物统计学中撰写的一篇论文。这篇论文很精彩,我非常同意它的观点。例如:
“计算重现性不是事后的想法 - 它必须从一开始就被设计到一个项目中。”
我自己也无法清楚地表达出来。在本文中,作者列出了在计算研究中建立可重复性的好处。研究人员的好处是:
- 改善工作和工作习惯。
- 改善团队精神
- 影响更大。 (减少无意的竞争和更多的确认)
- 更大的连续性和累积影响。
作者为纳入研究经费的纳税人列出的好处是:
- 公共物品的管理。
- 公共获取公共物品。
我向袖口的同事们提出了一些相同的论点,能够指出这篇论文能够更好地制作案例是非常棒的。
使科学计算可重复
发表于“科学与计算”杂志工程,2000 年由 Matthias Schwab,Martin Karrenbach 和 Jon Claerbout 撰写。本文的开头句很棒:
“通常涉及科学计算的研究在原则上是可重复的,但在实践中却不是。已发表的文件仅仅是奖学金的广告,而计算机程序,输入数据,参数值等则体现了奖学金本身。因此,作者通常在几个月或几年后无法复制自己的作品。“
本文通过采用 GNU make,标准项目结构以及在 Web 上分发实验项目文件来描述计算实验的标准化。这些实践在斯坦福勘探项目(SEP)中标准化。
采用所解决的激励问题是,当研究生因为无法复制和建立实验而离开小组时,编程工作就会丢失。
标准项目结构和构建系统的想法对开发人员来说似乎很自然。
机器学习中的默认重现性
我想要做的关键是不要忽视在机器学习领域开始时在软件开发中建立标准的优秀实践。使用它们并以它们为基础。
我有一个用于机器学习项目的蓝图,并且随着我完成的每个项目的改进。我希望将来能分享它。关注此空间。在此之前,以下是重用软件工具的一些技巧,使重现性成为应用机器学习和机器学习项目的默认设置:
- 使用构建系统并使构建目标自动生成所有结果。如果它不是自动化的,它不是项目的一部分,即有想法进行图表或分析?自动化它的生成。
- 自动执行所有数据选择,预处理和转换。在进行机器学习竞赛时,我甚至将 wget 用于累积数据文件。我想在新工作站和快速服务器上从零开始运行。
- 使用修订控制和标记里程碑。
- 强烈考虑检查依赖关系或至少链接。
- 避免编写代码。编写瘦脚本并使用标准工具并使用标准的 unix 命令将事物链接在一起。编写重型代码是分析过程中的最后手段或操作前的最后一步。
- 使用标记为分析和演示输出产品创建报告。我喜欢批量思考很多有趣的东西并实现它们,让我的构建系统在下次运行时创建它们。这使我能够在以后没有处于想法模式时对观察结果进行深入评估和思考。
专家提示
使用 Continuous Integration 服务器经常(每天或每小时)运行测试工具。
持续整合
照片来源 regocasasnovas ,保留一些权利
我的测试工具中有条件检查输出产品是否存在,如果缺少则创建它们。这意味着每次运行线束时,只会计算已更改的内容或缺少的结果。这意味着我可以让我的想象力疯狂,并继续向线束添加算法,数据转换和各种疯狂的想法,某些服务器将在下一次运行中计算缺失的输出以供我评估。
我在想法生成和结果评估之间的这种脱节实际上加快了项目的进度。
我发现我的线束中有一个错误,我删除了结果并在下一个循环中重新重建它们。
摘要
在这篇文章中,您了解到机器学习的实践是项目工作,包括源数据,代码,具有中间工作产品和输出工作产品的计算。中间也可能存在各种各样的事情。
如果您像软件项目一样管理机器学习项目,并默认获得可重复性的好处。您还将获得速度和信心的额外好处,从而获得更好的结果。
资源
如果您想进一步阅读这些问题,我已在下面列出了本文研究中使用的资源。
- 再现性维基百科页面
- 可重复计算研究的十个简单规则,Geir Kjetil Sandve,Anton Nekrutenko,James Taylor 和 Eivind Hovig,2013
- 无障碍可重复研究,Jill Mesirov,2010 年
- 邀请可重复的计算研究,David Donoho,2010
- 科学计算可重复,Matthias Schwab,Martin Karrenbach 和 Jon Claerbout,2000
- R 和 RStudio 的重复研究(网站链接)由 Christopher Gandrud 撰写,是一本关于这个主题的书使用 R.我在撰写本书时没有读过这本书,但这是我的阅读清单。
您是否遇到过可重复的机器学习项目的挑战?您是否知道其他软件开发工具可以帮助实现这一目标?发表评论并分享您的经验。
10 个实践应用机器学习的标准数据集
原文:
machinelearningmastery.com/standard-machine-learning-datasets/
熟练应用机器学习的关键是在许多不同的数据集上练习。
这是因为每个问题都不同,需要略有不同的数据准备和建模方法。
在这篇文章中,您将发现可用于练习的 10 个顶级标准机器学习数据集。
让我们潜入。
- 更新 Mar / 2018 :添加了备用链接以下载 Pima Indians 和 Boston Housing 数据集,因为原件似乎已被删除。
- 2002 年 2 月更新:对保险数据集的预期默认 RMSE 进行小幅更新。
概观
结构化方法
每个数据集都以一致的方式汇总。这使得它们易于比较和导航,以便您练习特定的数据准备技术或建模方法。
您需要了解的有关每个数据集的方面是:
- 名称:如何引用数据集。
- 问题类型:问题是回归还是分类。
- 输入和输出:输入和输出功能的编号和已知名称。
- 表现:使用零规则算法进行比较的基线表现,以及最佳已知表现(如果已知)。
- 示例:前 5 行原始数据的快照。
- 链接:您可以在哪里下载数据集并了解更多信息。
标准数据集
以下是我们将介绍的 10 个数据集的列表。
每个数据集都足够小,可以放入内存并在电子表格中查看。所有数据集都包含表格数据和没有(明确)缺失值。
- 瑞典汽车保险数据集。
- 葡萄酒质量数据集。
- 皮马印第安人糖尿病数据集。
- 声纳数据集。
- 钞票数据集。
- 鸢尾花数据集。
- 鲍鱼数据集。
- 电离层数据集。
- 小麦种子数据集。
- 波士顿房价格数据集。
1.瑞典汽车保险数据集
根据索赔总数,瑞典汽车保险数据集涉及预测数千瑞典克朗的所有索赔的总付款额。
这是一个回归问题。它由 63 个观察值组成,包含 1 个输入变量和 1 个输出变量。变量名称如下:
- 索赔数量。
- 数千瑞典克朗的所有索赔的总付款额。
预测平均值的基线表现是大约 81,000 克朗的 RMSE。
下面列出了前 5 行的样本。
108,392.5
19,46.2
13,15.7
124,422.2
40,119.4
下面是整个数据集的散点图。
瑞典汽车保险数据集
2.葡萄酒质量数据集
葡萄酒质量数据集涉及根据每种葡萄酒的化学测量标准预测白葡萄酒的质量。
这是一个多类别的分类问题,但也可能被定为回归问题。每个班级的观察数量不均衡。有 4,898 个观测值,包含 11 个输入变量和一个输出变量。变量名称如下:
- 固定酸度。
- 挥发性酸度。
- 柠檬酸。
- 剩余的糖。
- 氯化物。
- 游离二氧化硫。
- 二氧化硫总量。
- 密度。
- pH 值。
- 硫酸盐。
- 醇。
- 质量(得分在 0 到 10 之间)。
预测平均值的基线表现是约 0.148 质量点的 RMSE。
下面列出了前 5 行的样本。
7,0.27,0.36,20.7,0.045,45,170,1.001,3,0.45,8.8,6
6.3,0.3,0.34,1.6,0.049,14,132,0.994,3.3,0.49,9.5,6
8.1,0.28,0.4,6.9,0.05,30,97,0.9951,3.26,0.44,10.1,6
7.2,0.23,0.32,8.5,0.058,47,186,0.9956,3.19,0.4,9.9,6
7.2,0.23,0.32,8.5,0.058,47,186,0.9956,3.19,0.4,9.9,6
3.皮马印第安人糖尿病数据集
皮马印第安人糖尿病数据集涉及在 Pima 印第安人中根据医疗细节预测 5 年内糖尿病的发病。
这是一个二元(2 级)分类问题。每个班级的观察数量不均衡。有 768 个观测值,有 8 个输入变量和 1 个输出变量。缺失值被认为是用零值编码的。变量名称如下:
- 怀孕次数。
- 口服葡萄糖耐量试验中血浆葡萄糖浓度为 2 小时。
- 舒张压(mm Hg)。
- 肱三头肌皮褶厚度(mm)。
- 2 小时血清胰岛素(μU/ ml)。
- 体重指数(体重 kg /(身高 m)^ 2)。
- 糖尿病谱系功能。
- 年龄(岁)。
- 类变量(0 或 1)。
预测最普遍类别的基线表现是大约 65%的分类准确度。最佳结果实现了大约 77%的分类准确度。
下面列出了前 5 行的样本。
6,148,72,35,0,33.6,0.627,50,1
1,85,66,29,0,26.6,0.351,31,0
8,183,64,0,0,23.3,0.672,32,1
1,89,66,23,94,28.1,0.167,21,0
0,137,40,35,168,43.1,2.288,33,1
4.声纳数据集
声纳数据集涉及在不同角度给出声纳返回强度的情况下预测物体是矿井还是岩石。
这是一个二元(2 级)分类问题。每个班级的观察数量不均衡。有 208 个观测值,包含 60 个输入变量和 1 个输出变量。变量名称如下:
- 声纳以不同的角度返回
- …
- 等级(M 代表我的,R 代表摇滚)
预测最普遍类别的基线表现是大约 53%的分类准确度。最佳结果实现了大约 88%的分类准确度。
下面列出了前 5 行的样本。
0.0200,0.0371,0.0428,0.0207,0.0954,0.0986,0.1539,0.1601,0.3109,0.2111,0.1609,0.1582,0.2238,0.0645,0.0660,0.2273,0.3100,0.2999,0.5078,0.4797,0.5783,0.5071,0.4328,0.5550,0.6711,0.6415,0.7104,0.8080,0.6791,0.3857,0.1307,0.2604,0.5121,0.7547,0.8537,0.8507,0.6692,0.6097,0.4943,0.2744,0.0510,0.2834,0.2825,0.4256,0.2641,0.1386,0.1051,0.1343,0.0383,0.0324,0.0232,0.0027,0.0065,0.0159,0.0072,0.0167,0.0180,0.0084,0.0090,0.0032,R
0.0453,0.0523,0.0843,0.0689,0.1183,0.2583,0.2156,0.3481,0.3337,0.2872,0.4918,0.6552,0.6919,0.7797,0.7464,0.9444,1.0000,0.8874,0.8024,0.7818,0.5212,0.4052,0.3957,0.3914,0.3250,0.3200,0.3271,0.2767,0.4423,0.2028,0.3788,0.2947,0.1984,0.2341,0.1306,0.4182,0.3835,0.1057,0.1840,0.1970,0.1674,0.0583,0.1401,0.1628,0.0621,0.0203,0.0530,0.0742,0.0409,0.0061,0.0125,0.0084,0.0089,0.0048,0.0094,0.0191,0.0140,0.0049,0.0052,0.0044,R
0.0262,0.0582,0.1099,0.1083,0.0974,0.2280,0.2431,0.3771,0.5598,0.6194,0.6333,0.7060,0.5544,0.5320,0.6479,0.6931,0.6759,0.7551,0.8929,0.8619,0.7974,0.6737,0.4293,0.3648,0.5331,0.2413,0.5070,0.8533,0.6036,0.8514,0.8512,0.5045,0.1862,0.2709,0.4232,0.3043,0.6116,0.6756,0.5375,0.4719,0.4647,0.2587,0.2129,0.2222,0.2111,0.0176,0.1348,0.0744,0.0130,0.0106,0.0033,0.0232,0.0166,0.0095,0.0180,0.0244,0.0316,0.0164,0.0095,0.0078,R
0.0100,0.0171,0.0623,0.0205,0.0205,0.0368,0.1098,0.1276,0.0598,0.1264,0.0881,0.1992,0.0184,0.2261,0.1729,0.2131,0.0693,0.2281,0.4060,0.3973,0.2741,0.3690,0.5556,0.4846,0.3140,0.5334,0.5256,0.2520,0.2090,0.3559,0.6260,0.7340,0.6120,0.3497,0.3953,0.3012,0.5408,0.8814,0.9857,0.9167,0.6121,0.5006,0.3210,0.3202,0.4295,0.3654,0.2655,0.1576,0.0681,0.0294,0.0241,0.0121,0.0036,0.0150,0.0085,0.0073,0.0050,0.0044,0.0040,0.0117,R
0.0762,0.0666,0.0481,0.0394,0.0590,0.0649,0.1209,0.2467,0.3564,0.4459,0.4152,0.3952,0.4256,0.4135,0.4528,0.5326,0.7306,0.6193,0.2032,0.4636,0.4148,0.4292,0.5730,0.5399,0.3161,0.2285,0.6995,1.0000,0.7262,0.4724,0.5103,0.5459,0.2881,0.0981,0.1951,0.4181,0.4604,0.3217,0.2828,0.2430,0.1979,0.2444,0.1847,0.0841,0.0692,0.0528,0.0357,0.0085,0.0230,0.0046,0.0156,0.0031,0.0054,0.0105,0.0110,0.0015,0.0072,0.0048,0.0107,0.0094,R
5.钞票数据集
钞票数据集涉及根据从照片中采取的一些措施来预测给定钞票是否真实。
这是一个二元(2 级)分类问题。每个班级的观察数量不均衡。有 1,372 个观测值,包含 4 个输入变量和 1 个输出变量。变量名称如下:
- 小波变换图像的方差(连续)。
- 小波的偏斜变换图像(连续)。
- 小波变换图像的峰度(连续)。
- 图像的熵(连续)。
- 类(0 表示真实,1 表示不真实)。
预测最普遍类别的基线表现是大约 50%的分类准确度。
下面列出了前 5 行的样本。
3.6216,8.6661,-2.8073,-0.44699,0
4.5459,8.1674,-2.4586,-1.4621,0
3.866,-2.6383,1.9242,0.10645,0
3.4566,9.5228,-4.0112,-3.5944,0
0.32924,-4.4552,4.5718,-0.9888,0
4.3684,9.6718,-3.9606,-3.1625,0
6.鸢尾花数据集
鸢尾花数据集涉及在测量虹膜花的情况下预测花种。
这是一个多类别的分类问题。每个班级的观察数量是平衡的。有 150 个观测值,包含 4 个输入变量和 1 个输出变量。变量名称如下:
- 萼片长度(cm)。
- 萼片宽度(cm)。
- 花瓣长度以厘米为单位。
- 花瓣宽度以厘米为单位。
- 班级(Iris Setosa,Iris Versicolour,Iris Virginica)。
预测最普遍类别的基线表现是大约 26%的分类准确度。
下面列出了前 5 行的样本。
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
7.鲍鱼数据集
鲍鱼数据集涉及根据个人的客观测量来预测鲍鱼的年龄。
这是一个多类别的分类问题,但也可以作为回归框架。每个班级的观察数量不均衡。有 4,177 个观测值,有 8 个输入变量和 1 个输出变量。变量名称如下:
- 性别(M,F,I)。
- 长度。
- 直径。
- 高度。
- 整体重量。
- 去掉了重量。
- 内脏重量。
- 壳重量。
- 戒指。
预测最普遍类别的基线表现是大约 16%的分类准确度。预测平均值的基线表现是大约 3.2 环的 RMSE。
下面列出了前 5 行的样本。
M,0.455,0.365,0.095,0.514,0.2245,0.101,0.15,15
M,0.35,0.265,0.09,0.2255,0.0995,0.0485,0.07,7
F,0.53,0.42,0.135,0.677,0.2565,0.1415,0.21,9
M,0.44,0.365,0.125,0.516,0.2155,0.114,0.155,10
I,0.33,0.255,0.08,0.205,0.0895,0.0395,0.055,7
8.电离层数据集
电离层数据集需要预测大气中的结构,因为雷达回波目标是电离层中的自由电子。
这是一个二元(2 级)分类问题。每个班级的观察数量不均衡。共有 351 个观测值,包含 34 个输入变量和 1 个输出变量。变量名称如下:
- 17 对雷达返回数据。
- …
- 等级(g 代表好,b 代表坏)。
预测最普遍类别的基线表现是大约 64%的分类准确度。最佳结果实现了大约 94%的分类准确度。
下面列出了前 5 行的样本。
1,0,0.99539,-0.05889,0.85243,0.02306,0.83398,-0.37708,1,0.03760,0.85243,-0.17755,0.59755,-0.44945,0.60536,-0.38223,0.84356,-0.38542,0.58212,-0.32192,0.56971,-0.29674,0.36946,-0.47357,0.56811,-0.51171,0.41078,-0.46168,0.21266,-0.34090,0.42267,-0.54487,0.18641,-0.45300,g
1,0,1,-0.18829,0.93035,-0.36156,-0.10868,-0.93597,1,-0.04549,0.50874,-0.67743,0.34432,-0.69707,-0.51685,-0.97515,0.05499,-0.62237,0.33109,-1,-0.13151,-0.45300,-0.18056,-0.35734,-0.20332,-0.26569,-0.20468,-0.18401,-0.19040,-0.11593,-0.16626,-0.06288,-0.13738,-0.02447,b
1,0,1,-0.03365,1,0.00485,1,-0.12062,0.88965,0.01198,0.73082,0.05346,0.85443,0.00827,0.54591,0.00299,0.83775,-0.13644,0.75535,-0.08540,0.70887,-0.27502,0.43385,-0.12062,0.57528,-0.40220,0.58984,-0.22145,0.43100,-0.17365,0.60436,-0.24180,0.56045,-0.38238,g
1,0,1,-0.45161,1,1,0.71216,-1,0,0,0,0,0,0,-1,0.14516,0.54094,-0.39330,-1,-0.54467,-0.69975,1,0,0,1,0.90695,0.51613,1,1,-0.20099,0.25682,1,-0.32382,1,b
1,0,1,-0.02401,0.94140,0.06531,0.92106,-0.23255,0.77152,-0.16399,0.52798,-0.20275,0.56409,-0.00712,0.34395,-0.27457,0.52940,-0.21780,0.45107,-0.17813,0.05982,-0.35575,0.02309,-0.52879,0.03286,-0.65158,0.13290,-0.53206,0.02431,-0.62197,-0.05707,-0.59573,-0.04608,-0.65697,g
9.小麦种子数据集
小麦种子数据集涉及通过测量来自不同品种小麦的种子来预测物种。
这是一个二元(2 级)分类问题。每个班级的观察数量是平衡的。有 210 个观测值,包含 7 个输入变量和 1 个输出变量。变量名称如下:
- 区域。
- 周长。
- 紧凑
- 内核的长度。
- 内核宽度。
- 不对称系数。
- 核仁沟的长度。
- 等级(1,2,3)。
预测最普遍类别的基线表现是大约 28%的分类准确度。
下面列出了前 5 行的样本。
15.26,14.84,0.871,5.763,3.312,2.221,5.22,1
14.88,14.57,0.8811,5.554,3.333,1.018,4.956,1
14.29,14.09,0.905,5.291,3.337,2.699,4.825,1
13.84,13.94,0.8955,5.324,3.379,2.259,4.805,1
16.14,14.99,0.9034,5.658,3.562,1.355,5.175,1
10.波士顿房价数据集
鉴于房屋及其附近的细节,波士顿房屋价格数据集涉及以数千美元预测房价。
这是一个回归问题。每个班级的观察数量是平衡的。共有 506 个观测值,包含 13 个输入变量和 1 个输出变量。变量名称如下:
- CRIM:城镇人均犯罪率。
- ZN:占地面积超过 25,000 平方英尺的住宅用地比例。
- INDUS:每个城镇的非复杂商业面积比例。
- CHAS:Charles River 虚拟变量(如果管道限制河流则= 1;否则为 0)。
- NOX:一氧化氮浓度(每千万份)。
- RM:每栋住宅的平均房间数。
- 年龄:1940 年以前建造的自住单位比例。
- DIS:到波士顿五个就业中心的加权距离。
- RAD:径向高速公路的可达性指数。
- 税:每 10,000 美元的全额物业税率。
- PTRATIO:城镇的师生比例。
- B:1000(Bk-0.63)^ 2 其中 Bk 是城镇黑人的比例。
- LSTAT:人口状况下降%。
- MEDV:自住房的中位数价值 1000 美元。
预测平均值的基准表现是大约 9.21 千美元的 RMSE。
下面列出了前 5 行的样本。
0.00632 18.00 2.310 0 0.5380 6.5750 65.20 4.0900 1 296.0 15.30 396.90 4.98 24.00
0.02731 0.00 7.070 0 0.4690 6.4210 78.90 4.9671 2 242.0 17.80 396.90 9.14 21.60
0.02729 0.00 7.070 0 0.4690 7.1850 61.10 4.9671 2 242.0 17.80 392.83 4.03 34.70
0.03237 0.00 2.180 0 0.4580 6.9980 45.80 6.0622 3 222.0 18.70 394.63 2.94 33.40
0.06905 0.00 2.180 0 0.4580 7.1470 54.20 6.0622 3 222.0 18.70 396.90 5.33 36.20
摘要
在这篇文章中,您发现了 10 个可用于练习应用机器学习的顶级标准数据集。
这是您的下一步:
- 选择一个数据集。
- 抓住你最喜欢的工具(如 Weka,scikit-learn 或 R)
- 看看你能打多少标准分数。
- 在下面的评论中报告您的结果。
通往最佳机器学习算法的简单三步法
原文:
machinelearningmastery.com/steps-to-the-best-machine-learning-algorithm/
您如何为数据集选择最佳算法?
机器学习是一种归纳问题,其中一般规则是从域中的特定观察数据中学习的。
不可能(不可能?)知道使用什么表示或什么算法来最好地从特定问题的数据中学习,而不必知道问题,以至于您可能不需要机器学习开始。
那么你应该在给定的问题上使用什么算法呢?这是一个试错的问题,或搜索最佳表示,学习算法和算法参数。
在这篇文章中,您将发现简单的 3 步方法,用于为业务中的一些最佳预测性建模者提出的问题找到最佳算法。
步骤到最好的机器学习算法
照片由 David Goehring ,保留一些权利。
三步骤方法
Max Kuhn 是插入符号包的创建者和拥有者,它为 R 中的预测性建模提供了一套工具。它可能是最好的 R 包,也是 R 是严重竞争的首选的原因之一和应用机器学习。
在他们出色的书“ Applied Predictive Modeling ”中,Kuhn 和 Johnson 概述了为特定问题选择最佳模型的过程。
我将他们建议的方法解释为:
- 从最不易解释且最灵活的模型开始。
- 研究不太透明的简单模型。
- 考虑使用最简单的模型,该模型可以合理地逼近更复杂模型的表现。
他们评论说:
使用此方法,建模者可以在确定模型之前发现数据集的“表现上限”。在许多情况下,一系列模型在表现方面是等效的,因此从业者可以权衡不同方法的好处…
例如,以下是您可以在下一次一次性建模项目中使用的此方法的一般解释:
- 调查一系列复杂模型并建立表现上限,例如:
- 支持向量机
- 梯度增压机
- 随机森林
- 袋装决策树
- 神经网络
- 研究一套更简单,更易解释的模型,例如:
- 广义线性模型
- LASSO 和弹性网正则化广义线性模型
- 多元自适应回归样条
- k-最近邻居
- 朴素贝叶斯
- 从(2)中选择最接近(1)精度的模型。
快速一次性模型
我认为这是一个很好的方法,可用于一次性项目,您需要快速获得良好的结果,例如在几分钟或几小时内。
- 您可以很好地了解模型中问题的准确率
- 您有一个更容易理解并向他人解释的模型。
- 你有一个相当高质量的模型非常快(如果你花了几天或几周,可能是问题可达到的前 10 到 25%)
我不认为这是解决所有问题的最佳方法。也许方法的一些缺点是:
- 更复杂的方法运行速度较慢并返回结果。
- 有时您希望复杂模式优于较简单的模型(例如,精度胜过可解释性的域)。
- 表现上限是首先进行的,而不是最后一次,因为可能有时间,压力和动力从最好的方法中提取最多。
有关此策略的更多信息,请参阅应用预测性建模的第 4.8 节“在模型之间选择”,第 78 页。对于使用 R 的任何严肃的机器学习从业者来说,必须有书。
您是否有找到问题的最佳机器学习算法的方法?发表评论并分享更广泛的笔画。
你用过这种方法吗?它对你有用吗?
任何问题?发表评论。
对抗机器学习数据集中不平衡类别的 8 种策略
原文:
machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/
这件事发生在你身上吗?
您正在处理数据集。您可以创建分类模型并立即获得 90%的准确度。你觉得“很棒”。你深入一点,发现 90%的数据属于一个类。该死的!
这是一个不平衡数据集的例子,它可能导致令人沮丧的结果。
在这篇文章中,您将发现可用于在具有不平衡数据的机器学习数据集上提供出色结果的策略。
在机器学习中找到一些平衡点。
摄影:MichaEli,保留一些权利。
掌握不平衡的数据
我一直收到有关课程不平衡的电子邮件,例如:
我有一个二分类问题,在我的训练集中有一个类与 60:1 的比例。我使用了逻辑回归,结果似乎只是忽略了一个类。
还有这个:
我正在研究分类模型。在我的数据集中,我有三个不同的标签要分类,让它们分别为 A,B 和 C.但是在训练数据集中,我有一个 70%体积的数据集,B 为 25%,C 为 5%。大部分时间我的结果都适合 A.你能否建议我如何解决这个问题?
我写了很长的技术列表来尝试思考解决这个问题的最佳方法。我终于接受了我的一个学生的建议:
也许您即将发布的一篇博文可以解决训练模型以解决高度不平衡数据的问题,并概述一些技术和期望。
挫折!
不平衡的数据可能会让您感到很沮丧。
当你发现你的数据有不平衡的类并且你认为你得到的所有好结果都变成了谎言时,你会感到非常沮丧。
当书籍,文章和博客文章似乎没有为您提供有关处理数据不平衡的良好建议时,下一波挫折就会出现。
放松,有很多选择,我们将全面介绍它们。您可以为不平衡数据构建预测模型。
什么是不平衡数据?
不平衡数据通常是指分类问题的问题,其中类没有被平等地表示。
例如,您可能有一个包含 100 个实例(行)的 2 类(二进制)分类问题。总共 80 个实例标记为 Class-1,其余 20 个实例标记为 Class-2。
这是一个不平衡的数据集,Class-1 与 Class-2 实例的比例为 80:20 或更简洁,为 4:1。
对于两类分类问题以及多分类问题,您可能会遇到类不平衡问题。大多数技术都可以使用。
剩下的讨论将假设一个两类分类问题,因为它更容易思考和描述。
不平衡是常见的
大多数分类数据集在每个类中没有完全相同数量的实例,但是小的差异通常无关紧要。
有些问题是阶级不平衡不仅仅是常见的,而是预期的。例如,在那些表征欺诈性交易的数据集中,这些数据集是不平衡的。绝大多数交易将在“非欺诈”类中进行,而极少数交易将在“欺诈”类中。
另一个例子是客户流失数据集,绝大多数客户都使用该服务(“No-Churn”类),少数客户取消订阅(“Churn”类)。
如果上面的示例中存在类似 4:1 的适度类不平衡,则可能会导致问题。
准确率悖论
准确率悖论是本文简介中确切情况的名称。
在这种情况下,您的准确度测量可以说明您具有出色的准确率(例如 90%),但准确率仅反映了潜在的阶级分布。
这是非常常见的,因为分类准确率通常是我们在评估分类问题模型时使用的第一个衡量标准。
把它全部放在红色!
当我们在不平衡的数据集上训练时,我们的模型中发生了什么?
正如您可能已经猜到的那样,我们在不平衡数据上获得 90%准确度的原因(在 Class-1 中有 90%的实例)是因为我们的模型会查看数据并巧妙地决定最好的做法是始终预测“1 级”并实现高精度。
使用简单的基于规则的算法时最好看到这一点。如果在最终模型中打印出规则,您将看到它很可能预测一个类,而不管它被要求预测的数据。
打击不平衡训练数据的 8 种策略
我们现在了解什么是类不平衡,以及它为什么提供误导性的分类准确率。
那么我们有什么选择呢?
1)你能收集更多数据吗?
您可能认为这很愚蠢,但收集更多数据几乎总是被忽视。
你能收集更多数据吗?花点时间考虑一下您是否能够收集有关问题的更多数据。
较大的数据集可能会在类上显示不同且可能更平衡的视角。
稍后当我们查看重采样数据集时,更多次要类的示例可能会有用。
2)尝试更改表现指标
准确率不是使用不平衡数据集时使用的指标。我们已经看到它具有误导性。
在使用不平衡类别时,有一些指标可以告诉您更真实的故事。
在我的帖子“分类准确率不够:可以使用的更多表现指标”中,我提供了更多关于选择不同表现指标的建议。
在那篇文章中,我看了一个不平衡的数据集,它描述了患者乳腺癌复发的特征。
从那篇文章中,我建议查看以下表现测量,这些测量可以比传统的分类准确度更深入地了解模型的准确率:
- 混淆矩阵:将预测分解为表格,显示正确的预测(对角线)和不正确的预测类型(分配了哪些类别的错误预测)。
- 精度:分类器精确度的度量。
- 召回:分类器完整性的度量
- F1 分数(或 F 分数):精确度和召回率的加权平均值。
我还建议你看一下以下内容:
- Kappa(或 Cohen 的 kappa ):分类准确率由数据中类别的不平衡归一化。
- ROC 曲线:与精确度和召回率一样,精度分为灵敏度和特异性,可以根据这些值的平衡阈值选择模型。
您可以学习更多关于使用 ROC 曲线来比较我们的帖子“评估和比较分类器表现与 ROC 曲线”的分类准确率。
还不确定吗?从 kappa 开始,它将让您更好地了解正在发生的事情,而不是分类准确率。
3)尝试重采样数据集
您可以更改用于构建预测模型的数据集,以获得更平衡的数据。
此更改称为对数据集进行采样,您可以使用两种主要方法来均衡类:
- 您可以从代表性不足的类中添加实例的副本,称为过采样(或更正式的替换采样),或
- 您可以从过度表示的类中删除实例,称为欠采样。
这些方法通常很容易实现并且运行速度快。他们是一个很好的起点。
事实上,我建议你总是在所有不平衡数据集上尝试这两种方法,只是为了看看它是否能提高你的首选精确度量。
您可以在 Wikipedia 文章“过采样和数据分析中的欠采样”中学到更多内容。
一些经验法则
- 当您拥有大量数据(数十或数十万个实例或更多)时,请考虑对欠采样进行测试
- 当您没有大量数据(数万条记录或更少)时,请考虑测试过采样
- 考虑测试随机和非随机(例如分层)采样方案。
- 考虑测试不同的重采样比率(例如,您不必在二分类问题中以 1:1 的比例为目标,尝试其他比率)
4)尝试生成合成样品
生成合成样本的一种简单方法是从少数类中的实例中随机采样属性。
您可以在数据集中凭经验对它们进行采样,或者您可以使用像 Naive Bayes 这样的方法,可以在反向运行时独立地对每个属性进行采样。您将拥有更多不同的数据,但可能无法保留属性之间的非线性关系。
您可以使用系统算法生成合成样本。最流行的此类算法称为 SMOTE 或合成少数过采样技术。
顾名思义,SMOTE 是一种过采样方法。它的工作原理是从次要类创建合成样本,而不是创建副本。该算法选择两个或更多个类似的实例(使用距离测量)并且通过差异内的相邻实例的随机量一次扰动实例一个属性。
了解有关 SMOTE 的更多信息,请参阅 2002 年原创题为“ SMOTE:合成少数过采样技术”的论文。
SMOTE 算法有许多实现,例如:
- 在 Python 中,看一下“ UnbalancedDataset ”模块。它提供了许多 SMOTE 实现以及您可以尝试的各种其他重采样技术。
- 在 R 中, DMwR 包提供了 SMOTE 的实现。
- 在 Weka 中,您可以使用 SMOTE 监督滤波器。
5)尝试不同的算法
与往常一样,我强烈建议您不要在每个问题上使用您喜欢的算法。您应该至少在给定问题上对各种不同类型的算法进行采样检查。
有关点检查算法的更多信息,请参阅我的文章“为什么你应该在机器学习问题上进行现场检查算法”。
话虽这么说,决策树通常在不平衡的数据集上表现良好。查看用于创建树的类变量的拆分规则可以强制解决这两个类。
如果有疑问,请尝试一些流行的决策树算法,如 C4.5,C5.0,CART 和随机森林。
对于使用决策树的一些 R 代码示例,请参阅我的帖子“带有决策树的 R 中的非线性分类”。
有关在 Python 和 scikit-learn 中使用 CART 的示例,请参阅我的帖子标题为“让你的手弄乱 Scikit-Learn Now ”。
6)尝试惩罚模型
您可以使用相同的算法,但为他们提供不同的视角。
惩罚分类会对模型造成额外成本,以便在训练期间对少数群体犯下分类错误。这些处罚可能会使模型偏向于更多地关注少数民族。
通常,类惩罚或权重的处理专用于学习算法。存在惩罚版本的算法,例如惩罚的 SVM 和惩罚的 LDA。
也可以为惩罚模型提供通用框架。例如,Weka 有一个 CostSensitiveClassifier ,可以包装任何分类器并应用自定义惩罚矩阵进行未命中分类。
如果您被锁定在特定算法中并且无法重新取样或者您的结果不佳,则需要使用惩罚。它提供了另一种“平衡”类的方法。设置惩罚矩阵可能很复杂。您很可能必须尝试各种惩罚方案,看看什么最适合您的问题。
7)尝试不同的观点
有专门针对不平衡数据集的研究领域。他们有自己的算法,措施和术语。
从这些角度看一看并思考你的问题有时会让一些想法失去理智。
您可能要考虑的两个是异常检测和变化检测。
异常检测是罕见事件的检测。这可能是由于其振动或由系统调用序列指示的程序的恶意活动而指示的机器故障。与正常操作相比,这些事件很少见。
思维的这种转变将次要类别视为异常类,这可能有助于您考虑分离和分类样本的新方法。
变化检测类似于异常检测,除了寻找异常之外,它正在寻找变化或差异。这可能是使用模式或银行交易所观察到的用户行为的变化。
这两种转变都会对分类问题采取更实时的立场,这可能会为您提供一些思考问题的新方法,也许还有一些尝试的技巧。
8)尝试获得创意
真正爬进你的问题并思考如何将其分解为更容易处理的小问题。
为了获得灵感,请回顾 Quora 上非常有创意的答案,回答问题“在分类中,您如何处理不平衡的训练集? “
例如:
将较大的类分解为较少数量的其他类…
…使用一类分类器…(例如对待异常检测)
…将不平衡的训练集重新取样到不是一个平衡集,而是几个。在这些集合上运行分类集合可以产生比单独一个分类器更好的结果
这些只是您可以尝试的一些有趣且富有创意的想法。
有关更多想法,请查看 reddit 帖子“分类时的这些评论,当我 80%的训练集属于一个类”时。
选择一种方法并采取行动
您不需要是算法向导或统计学家来从不平衡数据集构建准确可靠的模型。
我们已经介绍了许多可用于建模不平衡数据集的技术。
希望您可以从架子上立即应用一两个,例如更改精度指标和重采样数据集。两者都很快,并会立即产生影响。
你打算尝试哪种方法?
最后一句话,从小开始
请记住,我们无法知道哪种方法最适合您以及您正在处理的数据集。
您可以使用一些专家启发式方法来选择这种方法,但最后,我能给您的最佳建议是“成为科学家”并根据经验测试每种方法,并选择能够为您提供最佳结果的方法。
从小处着手,以你学到的东西为基础。
想要更多?进一步阅读…
如果你知道在哪里看,就会有关于阶级不平衡的资源,但它们很少而且很少。
我看起来和以下是我认为是作物的奶油。如果您想更深入地了解一些关于处理课堂不平衡的学术文献,请查看下面的一些链接。
图书
文件
你觉得这篇文章有用吗?还有问题吗?
发表评论并告诉我您的问题以及您在处理不平衡课程时仍然遇到的任何问题。