Scikit-learn

义项:Python机器学习库
Scikit-learn

Scikit-learn是面向Python语言的免费开源机器学习库, 建立在NumPy、SciPy与matplotlib之上, 以BSD许可证发布, 可同时用于学术研究和商业项目[1]。它把分类、回归、聚类、降维、模型选择与数据预处理等常用方法收进一套风格一致的接口里, 让不具备深厚编程背景的使用者也能完成预测性数据分析[2]。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Scikit-learn是一个用Python编写、面向机器学习与数据挖掘的软件库, 官方将其定位为预测性数据分析的工具集[1]。其文档说明, 该库支持监督学习与无监督学习, 并提供模型拟合、数据预处理、模型选择、模型评估等配套组件[2]。

该库依赖若干科学计算基础包, 自身并不重复实现底层的数组运算与数值计算[1]。它采用简化的BSD许可证发行, 因此既可在学术界使用, 也允许在商业环境中使用。项目的源码与文档由国际化的开发者社区共同维护[3]。

原理

库中的各类算法与模型统一被称为估计器(estimator)。每个估计器都通过fit方法与数据结合, 需要输入样本矩阵$X$(通常为$n_{samples}\times n_{features}$的二维数组)和目标值$y$; 无监督任务可以不给$y$[2]。训练完成后, 调用predict即可对新样本给出预测, 不必重新训练[2]。

负责预处理与特征变换的对象称为转换器, 它们与估计器继承同一个基类, 区别在于提供transform方法而非predict方法, 输出的是变换后的样本矩阵[2]。多个转换器与一个最终的预测器可以用Pipeline串成单个对象, 该对象同样具备fit与predict, 这种组合方式还能避免测试数据混入训练过程[2]。

超参数调节与模型比较由专门的工具承担。交叉验证在数据的若干折上重复训练与评估, 网格搜索则遍历给定的参数组合, 依据评估指标挑出较优设置[2]。部分算法还可借助joblib与Python的多进程机制并行运行, 但这只在单机的多核范围内扩展[4]。

发展历程

该项目于2007年以Google Summer of Code项目的形式由David Cournapeau发起, 最初的名称为scikits.learn, 意为建立在SciPy之上的第三方工具包[3][5]。同年晚些时候, Matthieu Brucher因学位论文的需要加入开发[3]。

2010年, 法国国家信息与自动化研究所(INRIA)的Fabian Pedregosa、Gael Varoquaux、Alexandre Gramfort与Vincent Michel接手项目主导工作, 并于2010年2月1日完成首次公开发布[3]。此后版本大致以3个月为周期迭代, 期间原始代码库由其他开发者重写[3][5]。

在版本演进中, 0.21.0版加入了受LightGBM启发的直方图梯度提升算法, 0.22版则引入了堆叠(stacking)集成方法[4]。2021年9月发布1.0.0版, 标志着版本号进入1.x阶段[5]。据官网公告, 1.6.0版于2024年12月发布, 1.6.1版于2025年1月发布[1]。

应用

在分类任务中, 该库用于识别样本所属类别, 典型场景包括垃圾信息判别与图像识别; 在回归任务中, 则用于预测与对象关联的连续数值, 例如药物反应与股票价格[1]。可供调用的算法涵盖梯度提升、最近邻、随机森林、逻辑回归、岭回归等[1]。

降维模块用于减少需要考察的随机变量数目, 常见用途是数据可视化与提升运算效率, 相关方法包括主成分分析、特征选择与非负矩阵分解[1]。聚类方面的实现包括k-均值与高斯混合模型, 核方法与支持向量机则通过LIBSVM完成[6]。

文本处理是另一类常见用途。库内提供把文档集合转换为词频矩阵、计算词频—逆文档频率(tf-idf)表示以及抽取特征的工具, 这些结果可直接输入后续的分类或聚类模型[7][2]。在科研领域, 也有将其用于神经影像数据分析的实例[8]。

局限

官方常见问题明确说明, 深度学习与强化学习不在该库的设想范围内, 原因是二者需要描述网络结构的丰富词汇, 且深度学习还依赖图形处理器(GPU)才能高效运算[9]。该库同样不提供GPU支持, 若要获得GPU加速的实现或更灵活的深度学习框架, 需转向其他项目[9]。

规模方面, 该库面向小到中等规模的数据集, 部分算法虽可借助joblib并行, 但可扩展的上限受单台机器的内存与物理核心数约束[4]。对于超大规模训练, 通常需要改用Dask-ML等提供分布式版本的工具[4]。

即便是库内的多层感知机, 文档也注明其实现并非面向大规模应用, 且隐藏层带来的非凸损失函数会使结果受随机初始化影响, 需要调节隐藏神经元数、层数与迭代次数等超参数[9]。

参见

  • NumPy —— Scikit-learn 所依赖的数组与数值计算基础库。

  • SciPy —— 该库名称中SciKit所指的科学计算包, 也是其运行依赖之一。

  • 支持向量机 —— 库中通过LIBSVM实现的经典分类与回归算法。

  • 主成分分析 —— 库中降维模块里常用的线性降维方法。

  • 交叉验证 —— 库中用于评估模型泛化能力的模型选择工具。

  • XGBoost —— 与之接口兼容的梯度提升实现, 常与Scikit-learn配合使用。

参考资料

  1. scikit-learn [引用日期2026-10-29]
  2. Getting Started [引用日期2026-10-29]
  3. About us [引用日期2026-10-29]
  4. arxiv.org 上的网页 [引用日期2026-10-29]
  5. Wikipedia - scikit-learn (formerly scikits [引用日期2026-10-29]
  6. 软件包:python3-sklearn(1.2.1+dfsg-1) [引用日期2026-10-29]
  7. API Reference [引用日期2026-10-29]
  8. ox.ac.uk 上的网页 [引用日期2026-10-29]
  9. neural_networks_supervised [引用日期2026-10-29]
词条评价
词条统计

浏览次数:1 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:30:03Z

历史版本

本条目引用的词条
BSD许可证 Google Summer of Code NumPy SciPy 支持向量机 主成分分析 交叉验证 XGBoost