scikit-learn 概述
scikit-learn 是 Python 生态系统中广泛使用的一个开源库,专为机器学习相关任务而设计。它基于 NumPy、SciPy 和 Matplotlib 构建,提供一套强大的工具和算法,用于执行数据分析、预处理、模型开发和评估等机器学习任务。
scikit-learn 的核心组件是其精心设计的 API,可确保各种机器学习工作流的一致性和简便性。这便于开发者和数据科学家使用类似 API 轻松实施回归、分类、聚类和降维等任务。借助该库可以高效实施各种热门算法,如支持向量机、随机森林、XGBoost、梯度提升、k 均值聚类和 DBSCAN 等。
scikit-learn 还集成了其他数据处理和分析 Python 库,例如用于处理结构化数据集的 pandas 和用于创建可视化效果的 Matplotlib。由于它集成了 NumPy 生态系统,因此可进行高效的数值计算,而与 SciPy 的集成可确保提供先进的科学计算功能。
scikit-learn 主要使用 Python 编写,而 Cython 和 C/C++ 用于实施大多数计算密集型运算,以提高性能。scikit-learn 本质上不支持多线程,这限制了其高效处理大型数据集以及利用现代多线程计算平台的能力。可以利用新库和技术实现更高性能,同时兼顾易用性。
作为一个开源库,scikit-learn 离不开庞大开发者和研究人员社区的贡献,其源代码托管在 GitHub 上。使用 Sphinx 等工具,可以创建全面的文档和教程,该工具采用常见的文档布局,便于用户更轻松地学习 scikit-learn 并用它解决实际问题,尤其适用于以前遇到过此类文档的用户。
scikit-learn 与 Linux、macOS 和 Windows 等热门操作系统兼容,已成为采用 Python 的数据科学家事实使用的机器学习框架。它提供可重复使用的简单 Python API,并附带大量工具和算法,无论初学者还是专家,都可以轻松学习和采用。
为何选择 scikit-learn?
scikit-learn 是一个强大的 Python 库,也是实施机器学习模型的事实标准。scikit-learn 以简单易用、精心设计的 API 和活跃的社区而闻名,提供丰富多样的工具,可用于执行数据准备、预处理、模型构建、评估、推理和优化等机器学习运维任务。
scikit-learn 中的关键模组支持各种机器学习技术,包括:
- 预处理:用于特征提取、缩放和归一化的工具可以准备数据,以便进行高效分析和建模。无论对于监督式学习还是无监督式学习,这些步骤都至关重要,可确保各种模型提供一致的性能。
- 降维:scikit-learn 提供各种工具,可以减少数据集中的变量数量并提高效率和清晰度,对于可视化或计算成本高昂的模型而言尤为如此。
- 分类:scikit-learn 提供一系列分类器,包括逻辑回归、决策树、随机森林和梯度提升,可用于预测分类结果。例如,这些工具可以将电子邮件分类为垃圾邮件或合法邮件,也可以预测客户细分类别。
- 回归:回归工具可以对输入与输出变量之间的关系进行建模,从而预测连续值,如股价和住房成本。
- 聚类:在无监督式学习中,聚类方法会自动对具有相似特征的数据点进行分组,例如根据购买行为或地理位置对客户数据进行分组。
- 模型选择和指标:scikit-learn 提供了各种用于比较、验证和微调模型的算法和实用程序。利用适当的指标,这些工具可帮助确定执行特定机器学习任务所需的最佳模型和参数。
- 管道实用程序:scikit-learn 中的管道可以将从预处理到模型拟合和评估的多个步骤串联在一起,确保机器学习管道的高效性和可重现性,从而简化工作流。
- 可视化:scikit-learn 支持对数据和模型进行快速绘制和可视化,有助于完成模型解释和调整。
凭借对逻辑回归、决策树、随机森林和降维等工具的支持,scikit-learn 已成为处理机器学习任务的标准 Python 库。
scikit-learn 的工作原理
scikit-learn 是一个基于 NumPy 构建的通用 Python 库,已针对高性能线性代数和数组运算进行了优化。为了提高性能,核心 scikit-learn 算法通常以 Cython 实施。它提供了一个高效的高级框架,使用极少的代码即可构建、训练和评估机器学习模型。
本质上,scikit-learn 提供一致的 API,用于构建机器学习工作流,尤其注重模块化和易用性。其文档针对每项功能提供了详细指导,确保对开发者清晰易用。
scikit-learn 工作流的关键组件
- 输入数据和转换器
在 scikit-learn 工作流中,通常为数据帧形式的输入数据将通过转换器传递,以便进行预处理并提取特征。在将训练数据输入模型之前,转换器会应用算法来清理或重塑训练数据。例如,特征缩放或编码分类变量会准备输入数据子集,以获得出色性能。 - 降维
对于具有多种特征的数据集,PCA 等降维技术可通过减少变量数量,同时保留有意义的模式,以此来简化输入数据。这在涉及大型数据帧的工作流中尤为有用。 - 用于数据处理的迭代器
为了高效处理大量数据,scikit-learn 支持迭代器,无需将整个数据集加载到内存中,即可批量处理输入数据。 - 估计器和模型训练
估计器是核心机器学习算法,可对训练数据进行拟合以生成模型。估计器可以处理从回归到聚类的各种任务,如 k 均值或分类。 - 管道
scikit-learn 中的管道可将转换器和估计器串联为紧密衔接的工作流,确保预处理、训练和预测步骤的一致性。这消除了冗余并简化了实验。 - 模型选择和超参数调优
为了有效地选择模型,scikit-learn 整合了网格搜索和交叉验证等工具,可识别最佳超参数并评估模型性能。交叉验证可以将训练数据拆分成多个子集,以便进行迭代测试和验证。网格搜索会进一步自动完成超参数优化,测试各种配置,从而提高模型精度。
通过管道将转换器、估计器和评估器串联在一起,scikit-learn 确保了机器学习工作流的可重现性和高效性。从预处理输入数据到使用网格搜索进行微调,该库提供了一整套工具,可为数据科学家提供强效助力。
scikit-learn 有哪些实际应用?
scikit-learn 是一个各行各业广泛应用于机器学习和数据分析的通用工具。它提供的整套算法、指标和实用程序支持监督式学习和无监督式学习,因此在使用 Python 解决实际问题方面具有重要价值。
- 利用回归和分类模型进行预测性分析
在金融和医疗健康等行业,回归模型用于预测连续结果,如股价、患者恢复时间和能耗。scikit-learn 的分类器估计器有助于完成预测客户流失和垃圾邮件检测等任务。 - 决策树和集成方法
scikit-learn 能够可靠实施决策树、随机森林和梯度提升,以处理复杂数据集。这些算法经常用于欺诈检测、信用评分和推荐系统,可提供可解释的高性能模型。 - 用于大数据的降维
scikit-learn 采用的 PCA 和 t-SNE 等技术可以在不丢失关键信息的情况下减少特征数量,从而简化大型数据集。这在数据集通常包含数千个变量的基因组学或图像处理等领域尤为有用。 - 用于聚类和连接的无监督式学习
scikit-learn 的无监督式学习算法(如 k 均值聚类)通常用于进行客户细分、异常检测和网络分析。社交网络分析和供应链优化等涉及连接的应用高度依赖聚类技术。 - 模型评估指标
从分类器的精度和 F1 分数到回归任务的均方误差,scikit-learn 提供了一整套指标来评估模型性能。这些工具可以确保模型符合在生产环境中部署所需的标准。 - 与神经网络和深度学习集成
虽然 scikit-learn 专注于经典机器学习算法,但也可以与 TensorFlow 和 PyTorch 等深度学习框架无缝集成。这便于数据科学家使用 scikit-learn 进行数据分析、预处理和模型评估,同时利用神经网络的强大功能执行更复杂的任务。
凭借其通用性和易用性,scikit-learn 为执行降维、分类和高级机器学习任务提供了实用解决方案。
GPU 加速的 scikit-learn API 和端到端数据科学
GPU 提供专为并行处理数千个线程而优化的大规模并行架构,从而引领数据科学领域的变革。相比之下,CPU 的核心数量较少,并且针对顺序处理进行了优化。利用 NVIDIA 的 cuML 库,熟悉 scikit-learn 的数据科学家和机器学习工程师能够充分利用 GPU 的优势。
cuML 是一套经 GPU 加速的快速机器学习算法,专为数据科学和分析任务而设计,采用与 scikit-learn 类似的 API。它是 NVIDIA RAPIDS™ 开源库套件的一部分,提供了一个用于在 GPU 上执行端到端数据科学工作流的可扩展平台。GPU 的这一优势可以加速优化数据科学工作流,在数据处理、机器学习、深度学习、降维以及神经网络训练和推理等任务方面表现尤为突出。
NVIDIA cuML 利用 NVIDIA® CUDA® 基元提供低级别计算优化,同时通过 Python 友好型 scikit-learn API 实现 GPU 的强大功能。cuML 可在 GitHub 上获取,从业者无须在 GPU 上进行编程,即可轻松获得拟合-预测-转换范式。
采用与 scikit-learn 类似 API 的 RAPIDS 的主要功能
- 用于机器学习的常见 scikit-learn API
RAPIDS 可以通过 GPU 加速来实施 pandas、scikit-learn 和 XGBoost 等热门库和算法。这些库和算法沿用与 scikit-learn 类似的 API,为熟悉 scikit-learn 中实施的传统机器学习工作流的用户进行无缝集成提供了便利。 - 使用 GPU 数据帧加载数据
RAPIDS 引入了接口与 pandas 类似的基于 GPU 的数据帧,可以完全在 GPU 上加载和处理数据。这有助于通过联网的机器学习和图形分析工作流传输数据,无需在 GPU 与主机内存之间传输数据。 - 端到端数据科学工作流
通过集成降维、特征提取和深度学习,RAPIDS 支持对整个数据科学工作流进行加速。用户无需离开 GPU 即可预处理数据,构建机器学习模型,甚至训练神经网络。 - 设备显存共享
RAPIDS 支持在热门库之间共享设备显存,减少了数据传输开销。这确保了数据在工具之间的高效传输,避免了在主机与 GPU 显存之间进行成本高昂的来回复制。 - 优化了处理大量数据时的性能
与基于 CPU 的实施方案相比,NVIDIA RAPIDS 中的 GPU 加速算法处理大型数据集的速度提高了 5 到 50 倍。这种加速对于降维、模型训练和图形分析等任务至关重要。
借助 RAPIDS 推动数据科学转型
NVIDIA RAPIDS 生态系统与类似 scikit-learn 的 API 相结合,有助于数据科学家更高效地处理计算密集型机器学习和深度学习任务。
如何开始使用 cuML 加速 scikit-learn?
内容改编自:GPU 和 CPU 上的 cuML
所有安装文档均可在 RAPIDS 安装指南中找到。NVIDIA RAPIDS cuML 可以在 CPU 和 GPU 系统上运行。对于 GPU 系统,cuML 符合 RAPIDS 要求。cuML 的 CPU 功能有两种主要用法。CPU 软件包 cuml-cpu 是 cuML 软件包的一个子集,因此在使用纯 CPU 系统运行代码时,无需更改任何代码。除了无需更改代码即可在 CPU 系统中执行以外,在使用装有完整 cuML 的系统时,用户还可以手动控制由哪些设备执行部分代码。默认情况下,cuML 在 GPU/设备上执行估计器。但它也提供用于更改默认设备的全局配置选项,这在将 cuML 与占用大部分 GPU 算力的深度学习框架并行运行的共享系统中非常有用。此操作可以通过 set_global_device_type 函数来完成。
cuMl 24.12.00 文档中提供了完整的已加速函数表,如下表所示。
| 类别 | 算法 | 支持在 CPU 上执行 | 支持在 CPU 与 GPU 之间导出 |
| 聚类 | 基于密度的噪声应用空间聚类 (DBSCAN) | 是 | 否 |
| 基于密度的噪声应用层次空间聚类 (HDBSCAN) | 是 | 部分 | |
| K 均值 | 是 | 否 | |
| 单链接聚合聚类 | 否 | 否 | |
| 降维 | 主成分分析 (PCA) | 是 | 是 |
| 增量 PCA | 否 | 否 | |
| 截断奇异值分解 (tSVD) | 是 | 是 | |
| 统一流形逼近与投影 (UMAP) | 是 | 部分 | |
| 随机投影 | 否 | 否 | |
| t-分布随机邻域嵌入 (TSNE) | 否 | 否 | |
| 用于回归或分类的线性模型 | 线性回归 (OLS) | 是 | 是 |
