Scikit-Learn 简明介绍:一个 Python 机器学习库

如果你是一名 Python 程序员,或者正在寻找一个强大的库,可以用来将机器学习引入生产系统,那么 scikit-learn 将是你需要认真考虑的库。

在这篇文章中,你将获得 scikit-learn 库的概述,以及更多学习资源的有用参考。

通过我的新书《使用 Python 进行机器学习启动你的项目,其中包括分步教程和所有示例的 Python 源代码文件。

让我们开始吧。

它从何而来?

Scikit-learn 最初由 David Cournapeau 于 2007 年作为 Google 编程之夏项目开发。

后来 Matthieu Brucher 加入了该项目,并开始将其作为他论文工作的一部分使用。2010 年,INRIA 参与进来,第一个公开版本(v0.1 beta)于 2010 年 1 月下旬发布。

该项目现在有超过 30 名活跃贡献者,并获得了 INRIA、谷歌、TinycluesPython 软件基金会的资助。

什么是 scikit-learn?

Scikit-learn 通过 Python 中一致的接口提供了一系列有监督和无监督学习算法。

它在宽松的简化 BSD 许可下获得许可,并在许多 Linux 发行版中分发,鼓励学术和商业用途。

该库基于 SciPy(科学 Python)构建,在使用 scikit-learn 之前必须安装。此堆栈包括:

  • NumPy:基本 N 维数组包
  • SciPy:科学计算的基础库
  • Matplotlib:全面的 2D/3D 绘图
  • IPython:增强型交互式控制台
  • Sympy:符号数学
  • Pandas:数据结构和分析

SciPy 的扩展或模块通常被称为 SciKits。因此,该模块提供学习算法,并命名为 scikit-learn。

该库的愿景是达到在生产系统中使用的鲁棒性和支持水平。这意味着要深入关注易用性、代码质量、协作、文档和性能等方面。

尽管接口是 Python,但为了性能,它利用了 C 库,例如用于数组和矩阵操作的 numpy、LAPACKLibSVM 以及对 Cython 的谨慎使用。

有什么功能?

该库专注于数据建模。它不专注于加载、操作和汇总数据。对于这些功能,请参阅 NumPy 和 Pandas。

scikit-learn 提供的一些流行模型组包括

  • 聚类:用于对未标记数据进行分组,例如 KMeans。
  • 交叉验证:用于评估监督模型在未见数据上的性能。
  • 数据集:用于测试数据集和生成具有特定属性的数据集以研究模型行为。
  • 降维:用于减少数据中的属性数量,以进行汇总、可视化和特征选择,例如主成分分析。
  • 集成方法:用于组合多个监督模型的预测。
  • 特征提取:用于定义图像和文本数据中的属性。
  • 特征选择:用于从中有意义的属性中创建监督模型。
  • 参数调整:用于最大限度地发挥监督模型的性能。
  • 流形学习:用于总结和描绘复杂的多维数据。
  • 监督模型:种类繁多,不仅限于广义线性模型、判别分析、朴素贝叶斯、惰性方法、神经网络、支持向量机和决策树。

示例:分类与回归树

我想给你一个例子,展示这个库有多么容易使用。

在这个例子中,我们使用分类与回归树 (CART) 决策树算法对鸢尾花数据集进行建模。

该数据集作为示例数据集随库提供并已加载。分类器在数据上进行拟合,然后对训练数据进行预测。

最后,打印分类精度和混淆矩阵

运行此示例会产生以下输出,显示训练模型的详细信息、模型根据一些常见指标的表现以及混淆矩阵。

谁在使用它?

scikit-learn 推荐页面列出了 Inria、Mendeley、wise.io、Evernote、Telecom ParisTech 和 AWeber 作为该库的用户。

如果这只是已展示其使用情况的公司的一小部分,那么很可能有数十到数百家更大的组织正在使用该库。

它具有良好的测试覆盖率和管理的版本发布,适用于原型和生产项目。

资源

如果您有兴趣了解更多信息,请访问 Scikit-Learn 主页,其中包含文档和相关资源。

您可以从 GitHub 存储库获取代码,历史版本可在 Sourceforge 项目上获取。

文档

我建议从快速入门教程开始,然后浏览用户指南和示例库,寻找你感兴趣的算法。

最终,scikit-learn 是一个库,API 参考将是完成任务的最佳文档。

论文

如果您对项目如何启动及其愿景感兴趣,您可以查看一些论文。

书籍

如果您正在寻找一本好书,我推荐《使用 Python 构建机器学习系统》。它写得很好,例子也很有趣。

发现 Python 中的快速机器学习!

Master Machine Learning With Python

在几分钟内开发您自己的模型

...只需几行 scikit-learn 代码

在我的新电子书中学习如何操作
精通 Python 机器学习

涵盖自学教程端到端项目,例如
加载数据可视化建模调优等等...

最终将机器学习带入
您自己的项目

跳过学术理论。只看结果。

查看内容

《Scikit-Learn 温和入门:一个 Python 机器学习库》的 23 条回复

  1. Joe McCarthy 2014 年 4 月 19 日 上午 1:09 #

    这是对 scikit-learn 的精彩概述。

    我最近在 Brian Granger 的 Strata 2014 会议上了解了 IPython Notebooks,此后通过 GitHub 上发布和/或 ipython.org 上托管的 Notebooks 发现了大量有价值的 Pythonic 和机器学习资源。

    这里有两个我推荐的

    PyCon 2014 Scikit-learn 教程 作者:Jake VanderPlas

    使用 scikit-learn 和 IPython 进行并行机器学习 作者:Olivier Grisel(也在 Strata 2014 上提供)

    顺便说一句,我整理了自己的 IPython Notebook,内容是关于用于数据科学的 Python,旨在为那些了解其他编程语言的人提供快速入门指南,让他们学习足够的 Python 知识,以便有效使用 scikit-learn 和其他更高级的机器学习和科学计算工具。

    • jasonb 2014 年 4 月 19 日 上午 5:20 #

      嘿,乔,谢谢你的链接。

      你自己的《Python for Data Science》笔记本真是太棒了。我需要一些时间来完全消化它。谢谢分享!

    • Abhishek 2016 年 11 月 5 日 下午 2:45 #

      谢谢分享!!

    • Eugênio 2017 年 8 月 1 日 上午 3:23 #

      谢谢!

  2. Martin 2014 年 5 月 8 日 上午 5:50 #

    两处更正
    是 matplotlib 而不是 mathplotlib,它也能做 3D 绘图,以及 2D 绘图。

    • jasonb 2014 年 5 月 8 日 上午 7:53 #

      谢谢,已修正。

  3. jai 2015 年 3 月 27 日 下午 10:18 #

    感谢 jasonb 提供如此宝贵的机器学习教程,

    我基本上是一名生物学家,在过去的一两年里,我一直在涉足机器学习。目前我正在使用 scikit-learn,并且之前有过 WEKA 6 的经验,据我理解,WEKA 6 是最好的开源基于 GUI 的机器学习工具。在使用 scikit-learn 时,我在一点上遇到了很大的困难,即特征选择,如果我与 weka 比较,它提供了各种特征选择方法,结果会给你一个选定描述符的列表,可以很容易地以减少数据的形式保存。

    您能给我一些建议吗,我如何在 Scikit-learn 特征选择方法中执行相同的任务,并能够得到选定特征名称的列表。

    谢谢

  4. MB 2015 年 8 月 28 日 上午 7:52 #

    嗨,Jason,

    我想知道你之前是否遇到过这种情况。我们用训练数据训练了一个模型,并用 100 个实例的测试数据进行测试,例如,我们得到了大约 70% 的准确率。scikit-learn 有趣的一点是预测函数接受 n_samples,这在我们构建和测试模型时很好。但是如果我必须将其投入生产,我就会遇到问题
    1. 我一次只能发送一个请求(实例)。 2. 如果我们逐条记录进行测试,我们的准确率会下降到 30%。您知道为什么吗?

  5. Robin White 2016 年 1 月 21 日 下午 3:39 #

    太棒了!
    我还想介绍一门可以在 Python 中学习机器学习的课程 http://www.thedevmasters.com/machine-learning-using-python/ 我之前上过这门课程,之后我就可以构建自己的 Python 脚本库了。我确信你会对这个训练营感到满意!

  6. Alan 2017 年 5 月 18 日 晚上 8:27 #

    嗨,Jason,

    我是机器学习的初学者。

    当我尝试将上面的代码(用于分类和回归树)粘贴到我的 Python 中时,它显示

    回溯(最近一次调用)
    File “C:/Users/Desktop/DecisionTree.py”, line 2, in
    from sklearn import datasets
    ImportError: No module named ‘sklearn’

    看起来我需要为我的 Python 安装一些包?

    非常感谢!!!

  7. nandini 2018 年 1 月 31 日 下午 4:52 #

    嗨,Jason,

    sklearn-porter 包有什么用,这个模块的主要目的是什么?

    请您解释一下。

    • Jason Brownlee 2018 年 2 月 1 日 上午 7:15 #

      抱歉,我没听说过。

      • Balasubramanian Janakiraman 2022 年 5 月 22 日 晚上 8:07 #

        嗨,Jason,

        拜读您的著作真是太棒了。我希望您能扩展《机器学习精通》一书,增加关于如何评估模型准确性的内容。例如,线性回归的效果如何,需要关注哪些参数,以及模型是否有改进空间。如何判断我们是否已达到机器学习算法的最大优化。如果您能在您的任何一本书中推荐相关内容,那将非常棒。

        此致,
        巴拉.J

        • James Carmichael 2022 年 5 月 23 日 上午 10:42 #

          感谢您的反馈!

  8. Jesús Martínez 2018 年 3 月 27 日 上午 2:01 #

    嘿,杰森!对 sklearn 的概述写得真好,它是当今最直观、最有用和最流行的机器学习库之一!

    你这里有个小错别字:“Example: Classification and Regression Tress”。也许你是想说“Trees”? 🙂

    请继续保持出色的工作!

  9. Michal 2020 年 1 月 14 日 晚上 11:06 #

    感谢 Jason 的精彩文章。我对机器学习和 Scikit-Learn 的基本方法很熟悉,在哪里可以找到有关集成、特征选择等高级功能的更高级数据?

  10. Miriam 2020 年 11 月 19 日 下午 4:05 #

    您好!我是一名本科生,正在寻找进行预测诊断的论文项目。我想知道 scikit 是否对初学者友好,并且可以在本科水平使用?

  11. 万分感谢 2022 年 7 月 25 日 上午 11:52 #

    非常感谢 Jason。
    非常有用的指导
    阅读您的博客后,我受到鼓励去学习机器学习。

    • James Carmichael 2022 年 7 月 26 日 上午 8:34 #

      非常欢迎!我们非常感谢您的支持和反馈!

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。