使用 sklearn 等软件包与从头开始构建 ML 算法

数据挖掘 机器学习 方法
2022-02-12 12:47:54

我在大学的各种项目中一直在使用不同的机器学习算法,并参加了一些鼓舞人心的讲座,工业公司展示并展示了他们如何在工作中使用机器学习、数据挖掘等。我自己主要使用 Python,并且之前使用过诸如 sklearn 之类的库。我的问题是,我很难理解内置算法的作用,而不是用纯编码和数学从头开始制作它们——即使用理论机器学习工具自己实际完成工作。我知道自己做任何事情都会受到时间/金钱/资源的限制。此外,有时重新发明已经被其他人大大优化的东西是没有意义的。

我一直觉得使用 sklearn 内置的随机森林分类器或在 python 中使用 xgboost 有点作弊。我只是在准备数据,清理它以获得正确的格式,也许做一些特征工程 og 初始绘图和统计分析。问题是,当所有这些都完成后,我们只需将数据提供给这个预制算法,它会在幕后完成所有事情,并且只是输出预测。我觉得我什么都没做,也没有使用我在数据探索分析中学到的所有知识。我也没有使用我在数据中找到的任何模式。我仍然从大公司那里听说他们使用 xgboost 和 sklearn - 我可以看到它在 Kaggle 比赛中被积极使用。

我发现的几乎每个网站都只提供了使用这些内置库的示例,根本没有进行任何更深入的数学或统计。我真的很喜欢使用机器学习——但我有一种强烈的感觉,我完全错过了做事的“专业”方法。我知道有很多关于理论机器学习的书籍——但仍然几乎每个网上的人似乎都只是使用预制算法。大约一年来,我一直在为这种理解而苦苦挣扎。这些预制算法在严肃的工业/商业/学术用途中的有效性我仍然不清楚。

编辑:更具体地说。我的问题是:与自己实际构建模型相比,如何在专业/工业/学术环境中查看这些库/工具。它们只是开始为学生和业余爱好者学习机器学习和数据挖掘的一种“快速而简单”的替代方法,还是它们实际上更强大(比我至少知道的)并且不应该被视为替代方法,而是一种可行的方法专业人士的解决方案?

我上面的单个问题的动机可以通过解释我问自己的问题来阐述。正是这些问题让我感到困惑。使用这些模型是作弊吗?在哪些情况下您会使用预建库,以及何时避免使用它?我如何合并(或使用)从我在建模之前所做的科学数据分析中获得的知识,以及这些预先构建的分类器。

2个回答

这完全取决于你的目标。

学生阶段 当您学习机器学习算法时,我认为实现玩具示例是一个非常好的主意。我发现这个过程有助于找到你理解的好和你不理解的和你想的一样。它正在做这项工作,您将更深入地了解算法的实际工作原理以及您必须做出的不同内部选择。

专业阶段 当您有一个项目要交付时,您不需要从头开始重写随机森林实现。即使您可以在合理的时间内构建一个,拥有像 sklearn 这样经过严格审查且足够强大以处理您甚至不会考虑的边缘情况的东西也是有价值的。这就是使用预建库的优势。

我需要更多阶段 最终,您了解了数学并知道如何很好地使用这些包,并且您意识到缺少一个功能。那是你打开一个像 xgboost 或 sklearn 这样的框架并修改现有代码甚至创建你自己的实现的时候。你这样做的原因是因为方法是最先进的,所以那里没有任何东西,或者框架的实现实际上是生产中的一个障碍(正如我倾向于在 sklearn 中发现的那样)。

您似乎面临的问题是对您的输出缺乏责任感。如果您所做的只是将干净的数据推入模型并获得良好的结果,然后制作显示结果的图表,我会说您忘记了数据科学中的“科学”部分。

具有挑战性的部分不是使用模型,而是知道什么会推动您的模型以及您的模型在现实世界中可能面临的潜在障碍。我在我的职业生涯中经常看到这种情况,初级成员将在训练和测试数据集上制作一个很棒的模型,然后突然出现生产和性能坦克。为什么会这样?好吧,因为测试和训练是相似的(而且通常来自同一个来源),但是初级成员没有质疑数据源缺乏多样性,也没有质疑现实世界的行为方式是否相同。

我想说的是,作为一名数据科学家,工作的一小部分是清理数据、运行模型和制作漂亮的图片。真正的挑战是问为什么的问题。为什么这行得通?为什么模型表现不佳?为什么模型表现良好?为什么这个功能很重要?

如果您的目标是学习如何创建新的或改进的数据科学方法,那么从头开始工作可能是一个好主意。优点是您将学习算法的详细内部工作原理,并且您将学习到足以思考新方法或新功能的知识。其他人可能会认为您是创新者。

如果您的目标是应用数据科学工具来解决问题,那么我鼓励您使用已发布/共享的工具,例如 scikit-learn 等。优点是代码已经过社区检查、测试、调试和更新,因此降低了隐藏错误的可能性。没有什么是完美的,但社区代码通常比从头开始编写的代码更接近完美。其他人可能会认为您是一位使用经过验证的优质方法并且其结果值得信赖的分析师。

祝你好运!