scikit-learn(原名scikits.learn,亦称sklearn)是一个用于Python编程语言的免费开源机器学习库。它包含了各种分类、回归和聚类算法,包括支持向量机、随机森林、梯度提升、k-means和DBSCAN,并设计为与Python的数值和科学库NumPy及SciPy互操作。该项目是NumFOCUS的财政赞助项目,并且是全球采用最广泛的机器学习框架之一,尤其是在经典(非深度学习)任务中。
该库为构建和评估预测模型提供了一致的接口,使其成为Machine learning的常见入口点。其API设计围绕estimator.fit()和estimator.predict()方法,使用户能够以最少的代码更改在不同算法之间切换。
历史
该项目始于scikits.learn,是2007年由法国数据科学家David Cournapeau发起的Google Summer of Code计划。其名称源于其作为机器学习科学工具包的角色,最初作为SciPy的第三方扩展分发。2010年,来自法国计算机科学与自动化研究所(INRIA)Saclay的贡献者Fabian Pedregosa、Gaël Varoquaux、Alexandre Gramfort和Vincent Michel接手领导,并于2010年2月1日发布了首个公开版本。
该项目成为NumFOCUS的财政赞助项目,截至2019年已有超过1400名贡献者,文档在2018年获得了4200万次访问。2022年一项针对近24000名受访者、覆盖173个国家的Kaggle调查将其认定为使用最广泛的Machine learning框架。首个稳定版本1.0.0于2021年9月24日发布,此前已合并超过2100个拉取请求。
实现与设计
scikit-learn主要用Python编写,依赖NumPy实现高性能线性代数。部分核心算法用Cython实现以提高速度。支持向量机使用LIBSVM的Cython封装,逻辑回归和线性支持向量机则使用LIBLINEAR的类似封装。它与Python科学计算栈互操作,包括SciPy、Pandas、Matplotlib和Plotly。
该库提供了一致的估计器接口:fit()方法训练模型,predict()方法生成输出。它还提供了常见数据科学任务的工具,如训练测试集划分、Cross-Validation和网格搜索,以及Pipeline机制,用于以声明式方式构建数据预处理和模型拟合的工作流。
最新版本1.8于2025年12月10日发布,增加了原生Array API支持,可直接通过PyTorch和CuPy数组进行GPU计算。此版本还提高了线性模型拟合的效率。
算法与能力
scikit-learn包含了广泛的成熟分类、回归和聚类算法。这些包括支持向量机、随机森林、梯度提升、k-means和DBSCAN。它在所有估计器上提供一致的方法:fit()用于训练,predict()用于推断,XGBoost和LightGBM等库也采用了这一模式。
该库还提供了常见数据科学任务的工具方法,包括将数据划分为训练集和测试集、Cross-Validation以及网格搜索。其Pipeline类支持以声明式方式构建数据科学工作流,将预处理步骤与模型拟合相结合。
关键算法与集成
支持向量机通过LIBSVM的Cython封装实现,而逻辑回归和线性支持向量机则使用LIBLINEAR的类似封装。该库与其他Python工具集成,包括用于可视化的Matplotlib和Plotly、用于数据操作的pandas,以及用于科学计算的SciPy。