以下是根据您的要求改写的原文内容:
本次访谈是与 Scikit-learn 核心开发者 Andreas Muller 的深度对话,访谈由 Haebichan Jung 主持,他在 TowardsDataScience 担任项目负责人,并在旧金山的 Recurly 担任数据科学家。
Haebichan Jung:开源社区是如何维护 Scikit-learn 的?这个复杂的库是如何运作和管理的?
Andreas Muller:首先,用户是关键。大多数贡献者最初都是用户,如果没有实际使用该软件包,他们不会有动力去贡献。其次,大多数重要的贡献都来源于实际使用场景。有些功能是我自己为了使用而开发的,这些通常是最优秀的版本。我们尽量避免过度迎合特定用例。此外,对于复杂项目如 Scikit-learn,一开始添加新功能可能会带来问题。很多人想把自己喜欢的模型加入进来,但如今加入一个新模型需要大约一年的时间。因此,我建议从简单的任务开始,比如改善文档。文档的改进总能得到欢迎,也有很多关于问题跟踪的讨论。
Haebichan Jung:在使用 Scikit-learn 进行机器学习的过程中,你观察到了哪些常见的错误或低效率的操作?
Andreas Muller:通常有两类常见错误。一是不使用管道,如果你不使用管道,很可能存在某些错误。两年前,我们引入了列转换器,使处理连续和分类变量变得更容易。另一个常见错误是对评估指标的关注不够。Scikit-learn 默认使用准确率作为评估指标,但在不平衡数据集的情况下,准确率可能不是一个好的目标。因此,建议考虑使用其他评估指标,如 ROC 曲线下面积(AUC)或平均精确率(AP),它们更适合处理不平衡数据集。
Haebichan Jung:在 Scikit-learn 中,有哪些功能或工具你觉得没有被充分利用?
Andreas Muller:Hist 梯度增强是一个值得关注的功能。它是一种快速实现梯度增强的方法,比 XGBoost 快,但比 LightGBM 慢。目前它还不支持缺失值处理,但这一功能将在两周后的更新中推出。此外,它也不支持分类变量,但该功能预计将在明年春天发布。
Haebichan Jung:你提到了 LightGBM 和其他新兴的 Python 机器学习库,如 CatBoost 和 PyTorch。你如何看待这些库的发展?它们的竞争是否对 Scikit-learn 构成了威胁?
Andreas Muller:我认为多样性是有益的。许多新兴库提供了类似于 Scikit-learn 的接口,因此与我们的库兼容。尽管 Scikit-learn 使用广泛,但开发速度较慢。XGBoost 和 LightGBM 因其高效而受到欢迎。我们希望更多人知道这些库的价值,并将它们集成到 Scikit-learn 中。至于深度学习库,它们可以更快地迭代,因为我们的开发速度相对较慢。不过,我们面临资源有限的问题,难以与大型科技公司竞争。另外,实现跨平台的 GPU 支持仍然具有挑战性,这使得我们在添加复杂功能时更加谨慎。
Haebichan Jung:你在哥伦比亚大学的讲座中提到,解决不平衡数据问题的两种主要方法是欠采样和过采样,以及改变模型训练程序。每种方法的优点和缺点是什么?
Andreas Muller:重要的是要明确你的目标是什么,而不是单纯追求准确率或 ROC-AUC。你的目标应该是在具体应用场景中生成预期的结果。一旦确定了目标,你可以定义合适的评估指标,尝试不同的方法来优化这些指标。欠采样是一种有效的技术,尤其是当你有大量的数据时,可以显著减少数据集大小而不影响结果。然而,合成数据生成(如 SMOTE)的效果并不总是明显,而且可能会影响性能。另一方面,改变模型训练程序,如调整类权重,可以提高少数类的权重,从而提高模型性能。但这种方法同样需要合适的评估指标来衡量效果。
Haebichan Jung:你对 SMOTE 的看法似乎与很多人不同。你认为原因是什么?
Andreas Muller:很多情况下,机器学习的许多实践是经验性的。如果在多个数据集上尝试某项技术但没有明显效果,那么这项技术可能并不适用。关于 SMOTE,我认为它对数据分布做了某些假设,这可能导致某些情况下效果不佳。此外,合成数据生成不一定对所有模型都有帮助。
希望这段改写后的文本符合您的需求。