Python中的Sklearn是什么?

2024 年 8 月 29 日 | 阅读 11 分钟

我们将学习sklearn库以及如何使用它来实现机器学习算法。在现实世界中,我们不希望每次需要使用一个挑战性的算法时都从头构建它。虽然从零开始构建算法是理解其底层工作原理的绝佳方法,但我们可能无法达到所需的效率或可靠性。

Scikit-learn是一个Python模块,提供了多种监督和无监督学习技术。它基于许多您可能已经熟悉的库,包括NumPy、pandas和Matplotlib。

什么是Sklearn?

Scikit-learn最初是法国研究科学家David Cournapeau通过Google Summer of Code项目启动的。它的名字来源于“SciKit”(SciPy Toolkit)的概念,这是对SciPy的一个修改,由他独立开发和发布。后来,其他程序员重写了核心代码库。

2010年,法国国家计算机科学与自动化研究所(INRIA)在Alexandre Gramfort、Gael Varoquaux、Vincent Michel和Fabian Pedregosa的指导下领导了这项工作。该项目于当年2月1日发布了第一个官方版本。2012年11月,scikit-learn和scikit-image被引用为“维护良好且受欢迎”的scikits的例子。Python的scikit-learn是GitHub上最广泛使用的机器学习包之一。

Sklearn的实现

Scikit-learn主要用Python编写,并大量利用NumPy库进行高效的数组和线性代数计算。一些基本算法也使用Cython构建,以提高库的效率。支持向量机、逻辑回归和线性SVM是通过Cython为LIBSVM和LIBLINEAR编写的封装器实现的。在这种情况下,用Python扩展这些例程可能不可行。

Scikit-learn与许多其他Python包配合良好,包括SciPy、Pandas数据框、用于数组向量化的NumPy,用于绘制图形的Matplotlib、seaborn和plotly,等等。

关键概念和特性包括

  • 决策制定算法,例如

分类:根据模式识别和对数据进行分类。

回归:使用历史和预期数据平均值来预测或预测数据值。

聚类:自动收集具有相关数据的多组数据集。

  • 各种算法支持预测分析,包括用于模式识别的神经网络和简单的线性回归。
  • 与NumPy、pandas和matplotlib库兼容

机器学习(ML)允许计算机通过使用输入数据来构建或训练预测模型,而无需显式编程。机器学习是人工智能的一个子集。

让我们看看它的修订历史-

  • 2019年5月:scikit-learn 0.21.0
  • 2019年3月:scikit-learn 0.20.3
  • 2018年12月:scikit-learn 0.20.2
  • 2018年11月:scikit-learn 0.20.1
  • 2018年9月:scikit-learn 0.20.0
  • 2018年7月:scikit-learn 0.19.2
  • 2017年7月:scikit-learn 0.19.0
  • 2016年9月:scikit-learn 0.18.0
  • 2015年11月:scikit-learn 0.17.0
  • 2015年3月:scikit-learn 0.16.0
  • 2014年7月:scikit-learn 0.15.0
  • 2013年8月:scikit-learn 0.14

开源程序的庞大社区是使用它们的主要原因之一,Sklearn在这方面也很相似。Python的scikit-learn库大约有35位贡献者,其中Andreas Mueller最为知名。

在scikit learn的主页上,列出了Evernote、Inria和AWeber等许多组织作为客户。但实际使用量远高于此。

除了这些团体,世界各地也有社区。

Scikit-learn的显著特点是

  • 该包为数据挖掘和机器学习算法提供易于使用且高效的数据分析功能。包括支持向量机、梯度提升、随机森林、K-means以及其他回归、分类和聚类算法。
  • 该包是开源的,对所有人开放,并可在多种场景下重用。
  • 它构建在SciPy、Matplotlib和NumPy之上。
  • 该包具有商业可用性-BSD许可证。

使用Scikit-Learn实现机器学习算法的好处

无论您是想概述ML、希望快速上手,还是寻求最新的ML学习工具,您都会发现scikit-learn文档齐全且易于理解。有了这个高级工具包的帮助,您可以快速构建一个预测性数据分析模型,并使用它来拟合收集到的数据。它具有适应性,并且与其他Python库配合良好。

在您的系统上安装Sklearn

安装Sklearn的要求

  1. NumPy
  2. SciPy作为其依赖项。

在安装scikit-learn库之前,请确保NumPy和SciPy库已安装在系统中。一旦NumPy和SciPy成功安装,安装scikit-learn最简单的方法就是使用pip。

pip install -U scikit-learn

机器学习的基本要素

在使用scikit-learn之前,让我们先回顾一下ML项目中使用的一些基本术语。

  • 准确率得分- 准确率得分表示正确预测的比例占总样本大小的比例。
    • 在涉及多个类的分类问题中,准确率得分的定义如下:
      准确率得分 = 正确预测的类别数 / 用于预测的总样本数
    • 在仅涉及两个类的分类问题中,准确率得分的定义如下:
      准确率得分 = (真正例样本数 + 真负例样本数) / 用于预测的总样本数
  • 示例数据- 这些是数据的具体示例(特征)。提供两种数据示例:
    • 标记数据- 此类数据包含独立特征样本的标签或目标值。其定义为:
      {独立特征, 标签}: (X, Y)
    • 未标记数据- 此类数据仅包含独立特征,不包含标签或目标值。其定义为:
      {独立特征, Null}: (x, Null)
  • 特征- 这些是输入参数,也称为独立特征。特征是正在观察的对象的可量化质量或属性。每个ML项目至少有一个特征。
  • 聚类- 聚类是一种根据样本相似性的各种度量来对数据点进行分组的技术。每个组称为一个聚类。
    • K-Means聚类- 这是一种无监督机器学习策略,通过将数据点放置在最接近的簇中,来找到由给定数据点组成的k个簇的中心(质心)。
  • 模型- 模型定义了独立特征与目标标签之间的关联。例如,一个用于检测谣言的模型将特定特征与谣言联系起来。
    • 回归与分类- 回归和分类模型都允许您构建预测,这些预测可以回答诸如哪个政党将主导某次选举之类的问题。
    • 回归模型输出的是一个数值或连续值。
    • 分类模型提供的是离散的或分类的值作为预测。
  • 监督学习- 系统使用标记数据集“学习”如何识别正确答案,然后可以将其部署到训练数据集。然后可以评估和改进算法的准确性。大多数机器学习项目都使用监督学习。
  • 无监督学习- 通过“学习”特征和模式,算法自行解释未标记数据。

在Sklearn中构建模型的步骤

现在让我们来学习建模过程。

步骤1:加载数据集

简单来说,数据集是样本数据点的集合。数据集通常由两个主要部分组成:

特征: 特征本质上是数据集中的变量,通常称为预测变量、数据输入或属性。由于可能存在许多特征,因此可以使用特征矩阵来表示它们,该矩阵通常用字母“X”表示。术语“特征名称”是指所有特征名称的列表。

响应: (有时称为目标特征、标签或输出)基于变量特征,此变量是输出。在大多数情况下,我们只有一个响应列,它由响应列或向量表示(字母“y”通常用于表示响应向量)。目标名称是指响应向量可以采取的所有不同值。

步骤2:分割数据集

每个机器学习模型的正确性是一个关键考虑因素。现在,可以使用给定的数据集训练一个模型,然后使用该模型预测另一个数据集集的的目标值,以确定模型的正确性。

总而言之

  • 将给定数据集分成训练数据集和测试数据集。
  • 在练习集上训练模型。
  • 使用测试数据集测试模型并评估其性能。

步骤3:训练模型

现在是时候使用训练数据集来训练模型了,该模型将进行预测。Scikit-learn提供了各种具有易于使用的接口的机器学习技术,用于拟合、预测准确性等。

我们必须使用测试数据集测试我们的分类器。为此,我们可以使用`.predict()`模型类方法,返回预测值。

通过比较测试数据集的实际值和预测值,我们可以在sklearn方法的帮助下评估模型的性能。为此,使用了`metrics`包中的`accuracy_score`函数。

ML算法

算法对于机器在没有特定编程的情况下进行学习是必不可少的。简单地说,算法只是用于计算的规则。

ML算法基本思想

表示- 数据可以被组织成一种形式,以便对其进行分析。示例包括规则、模型集成、决策树、神经网络、SVM、图模型等。

评估- 评估是确定假设有效性的方法。示例包括准确率得分、均方误差、预测和召回率、概率、成本、边际和似然。

优化- 通过应用组合优化、网格搜索、约束优化等方法,优化是通过调整估计器的超参数来减少模型误差。

Scikit-Learn ML算法

以下是几种典型的Scikit-learn算法和技术的列表,按复杂性递减的顺序排列:

线性回归算法示例

直线斜率是称为线性回归的监督机器学习过程的预期输出。它仅用于预测特定数据点范围内的值。

代码

输出

(150, 4)
(90, 4) (90,)
(60, 4) (60,)
Coefficients of each feature: [-0.12949807  0.03421679  0.23781661  0.60472254]
Accuracy Score:  0.8885645804630061

逻辑回归算法示例

逻辑回归是二元分类问题的首选方法(例如,目标值为0或1)。然后可以使用类似于线性回归的方程来评估结果(例如,某个目标值为0或1的可能性有多大?)。

代码

输出

The size of the complete dataset is:  150
Accuracy score of the predictions made by the model:  1.0

高级机器学习算法

随机森林

随机森林算法在机器学习中用于执行集成学习。集成学习系统使用多个决策树和其他机器学习算法来产生比任何单一学习算法更出色的预测分析。

代码

输出

Accuracy score for the model is:  0.95
array([1])

决策树算法

在决策树中,一个节点代表一个特征(或属性),一个分支表示一个决策函数,每个叶节点表示结论。决策树的根节点是顶部第一个节点。它获得根据属性值分割数据的能力。递归分割是重复分割树的过程。这个类似于流程图的框架有助于决策。它是一个流程图式的表示,完美地复制了人们的思考方式。因此,决策树易于理解和解释。

代码

输出

Accuracy scores:  [1.         0.93333333 1.         0.93333333 0.93333333 0.86666667
 0.93333333 1.         1.         1.        ]
Mean accuracy score:  0.96

梯度提升

当存在回归和分类问题时,我们可以使用梯度提升方法。它基于许多较小的预测模型(通常是决策树)创建预测模型。

为了工作,Gradient Boosting Classifier需要一个损失函数。除了处理自定义损失函数外,梯度提升分类器还可以接受许多标准化损失函数,但损失函数必须是可微的。

在回归技术中可以使用平方误差,但在分类算法中通常使用对数损失。在梯度提升系统中,我们不需要为每个增量提升步骤显式推导损失函数,而是可以使用任何可微的损失函数。

代码

输出

Accuracy scores:  0.9185416666666667