常用术语和 API 元素词汇表#

本词汇表旨在明确地展现 Scikit-learn 及其 API 中使用的隐性和显性约定,同时为用户和贡献者提供参考。它旨在描述这些概念,并详细说明其对应的 API 或链接到文档中其他相关的部分。通过从 API 参考和用户指南链接到词汇表条目,我们可以最大限度地减少冗余和不一致。

我们首先列出一般概念(以及任何不适合放在其他地方的概念),但下面列出了更具体的相关术语集:类 API 和估计器类型目标类型方法参数属性数据和样本属性

一般概念#

一维#
一维数组#

一维数组。其 .shape 长度为 1 的 NumPy 数组。一个向量。

二维#
二维数组#

二维数组。其 .shape 长度为 2 的 NumPy 数组。通常表示矩阵。

API#

指 Scikit-learn 中实现的估计器的 *特定* 接口以及本词汇表中描述的和贡献者文档中概述的各种估计器类型的 *通用* 约定。

构成 Scikit-learn 公共 API 的特定接口主要记录在API 参考中。但是,如果访问它所需的任何标识符都没有以 _ 开头,我们非正式地将其视为公共 API。我们通常尝试为公共 API 中的所有对象保持向后兼容性

私有 API(包括以 _ 开头的函数、模块和方法)不能保证稳定。

类数组#

Scikit-learn 估计器和函数的 *输入* 最常见的的数据格式,类数组是任何类型的对象,numpy.asarray 将为此对象生成具有适当形状(通常是一维或二维)和适当 dtype(通常是数值型)的数组。

这包括

  • NumPy 数组

  • 数字列表

  • 长度为 k 的数字列表的列表(对于某个固定的长度 k)

  • 所有列均为数值型的pandas.DataFrame

  • 数值型pandas.Series

它不包括

请注意,来自 scikit-learn 估计器和函数的 *输出*(例如预测)通常应该是数组或稀疏矩阵,或者它们的列表(如多输出tree.DecisionTreeClassifierpredict_proba)。其中 predict() 返回列表或 pandas.Series 的估计器是无效的。

属性#
属性#

我们主要使用属性来指在拟合过程中如何在估计器上存储模型信息。存储在估计器实例上的任何公共属性都必须以字母字符开头,如果它是在fitpartial_fit中设置的,则以单个下划线结尾。这些是在估计器的“属性”文档中记录的内容。存储在属性中的信息通常是:用于预测或转换的充分统计量;转导 输出,例如labels_embedding_;或诊断数据,例如feature_importances_。常见的属性列在下面

公共属性可以与构造函数参数具有相同的名称,并附加一个 _。这用于存储用户输入的已验证或估计版本。例如,decomposition.PCA 使用 n_components 参数构造。由此,结合其他参数和数据,PCA 估计属性 n_components_

在拟合时还可以设置在预测/转换/等中使用的其他私有属性。这些以单个下划线开头,并且不能保证对公共访问是稳定的。

估计器实例上不以下划线结尾的公共属性应该是相同名称的 __init__ 参数 的存储的、未修改的值。由于这种等价性,这些在估计器的“参数”文档中进行了记录。

向后兼容性#

我们通常尝试在版本之间保持向后兼容性(即接口和行为可以扩展,但不能更改或删除),但这有一些例外情况

仅限公共 API

通过私有标识符(以 _ 开头的标识符)访问的对象的行为在版本之间可能会任意更改。

如文档中所述

我们通常假设用户已遵守已记录的参数类型和范围。如果文档要求提供列表而用户提供元组,我们不保证版本之间的行为一致。

弃用

弃用期(通常为两个版本)之后,行为可能会发生变化。警告使用Python的warnings模块发出。

关键字参数

我们有时可能会假设所有可选参数(fit及类似方法的X和y除外)都仅作为关键字参数传递,并且位置可以重新排序。

错误修复和增强功能

错误修复以及(较少见的)增强功能可能会改变估计器的行为,包括使用相同数据和random_state训练的估计器的预测。发生这种情况时,我们会尝试在变更日志中清楚地注明。

序列化

我们不保证在一个版本中对估计器进行pickle操作能够使其在后续版本中被解pickle为等效模型。(对于sklearn包中的估计器,即使它可能有效,我们也会在尝试此解pickle操作时发出警告。)参见安全与可维护性限制

utils.estimator_checks.check_estimator

我们对估计器检查提供的向后兼容性保证有限:我们可能会对使用此函数测试的估计器添加额外的要求,通常是在非正式假设但未正式测试的情况下。

尽管我们与用户之间存在这种非正式约定,但软件按原样提供,如许可证中所述。当发行版无意中引入与向后不兼容的更改时,这些更改被称为软件回归。

可调用对象#

实现__call__方法的函数、类或对象;当callable()的参数返回True时,任何对象。

类别特征#

类别或名义特征是指在数据总体中具有有限的离散值集的特征。这些通常表示为整数或字符串列。大多数scikit-learn估计器将拒绝字符串,并将整数视为序数或计数值。对于大多数估计器的使用,类别变量应进行独热编码。值得注意的例外包括基于树的模型,例如随机森林和梯度提升模型,这些模型通常在使用整数编码的类别变量时效果更好且速度更快。OrdinalEncoder有助于将字符串值类别特征编码为序数整数,而OneHotEncoder可用于对类别特征进行独热编码。另见编码类别特征categorical-encoding包,了解与编码类别特征相关的工具。

克隆#
克隆的#

使用clone复制估计器实例并创建一个具有相同参数的新实例,但不包含任何已拟合的属性

调用fit时,元估计器通常会在拟合克隆实例之前克隆包装的估计器实例。(出于遗留原因,例外情况包括PipelineFeatureUnion。)

如果估计器的random_state参数是整数(或者估计器没有random_state参数),则返回一个精确克隆:克隆和原始估计器将给出完全相同的结果。否则,返回统计克隆:克隆可能会产生与原始估计器不同的结果。更多详细信息可在控制随机性中找到。

通用测试#

这指的是在 Scikit-learn 中几乎每个估计器类上运行的测试,以检查它们是否符合基本的 API 约定。可以通过utils.estimator_checks.check_estimatorutils.estimator_checks.parametrize_with_checks进行外部使用,大部分实现位于sklearn/utils/estimator_checks.py中。

注意:通用测试机制的一些例外目前已硬编码到库中,但我们希望通过使用语义估计器标签来标记估计器的异常行为来替换它。

交叉拟合#
交叉拟合#

一种重采样方法,它迭代地将数据划分为互斥的子集以拟合两个阶段。在第一阶段,互斥子集使得能够对训练期间未见到的数据进行预测或转换。然后在第二阶段使用计算出的数据。目标是避免第一阶段的任何过拟合将偏差引入第二阶段的输入数据分布。有关其用法的示例,请参见:TargetEncoderStackingClassifierStackingRegressorCalibratedClassifierCV

交叉验证#
交叉验证#

一种重采样方法,它迭代地将数据划分为互斥的“训练”和“测试”子集,以便可以对未见数据评估模型性能。这节省了数据,避免了需要保留“验证”数据集,并通过通常执行多轮交叉验证来解释可变性。有关更多详细信息,请参见 用户指南

弃用#

我们使用弃用功能来逐步违反我们的 向后兼容性 保证,通常是为了

  • 更改参数的默认值;或

  • 删除参数、属性、方法、类等。

当使用弃用的元素时,我们通常会发出警告,尽管这可能存在局限性。例如,当有人设置已被弃用的参数时,我们会发出警告,但当他们访问估计器实例上该参数的属性时,则可能不会发出警告。

请参见 贡献者指南

维度#

可以用来指代特征(即 n_features)的数量,或二维特征矩阵中的列数。但是,维度也用于指代 NumPy 数组形状的长度,从而区分一维数组和二维矩阵。

文档字符串#

模块、类、函数等的嵌入式文档,通常在代码中作为字符串位于对象定义的开头,并可作为对象的 __doc__ 属性访问。

我们试图遵守 PEP257,并遵循 NumpyDoc 约定

双下划线#
双下划线表示法#

在为嵌套估计器指定参数名称时,在某些情况下,可以使用 __ 来分隔父项和子项。最常见的用法是通过元估计器使用 set_params 设置参数,因此在 参数搜索 中指定搜索网格时也是如此。参见 参数。它也用于 pipeline.Pipeline.fit 中,用于将 样本属性 传递给管道中估计器的 fit 方法。

数据类型#
数据类型#

NumPy 数组假定整个数组(或稀疏矩阵)都具有同质数据类型,可在数组的 .dtype 属性中获得。我们通常假设 scikit-learn 数据的简单数据类型:浮点数或整数。在编码或向量化之前,我们可能支持数组的对象或字符串数据类型。例如,我们的估计器不适用于结构化数组。

我们的文档有时可以提供有关 dtype 精度的信息,例如 np.int32np.int64 等。当提供精度时,它指的是 NumPy dtype。如果使用任意精度,文档将引用 dtype integerfloating。请注意,在这种情况下,精度可能是平台相关的。numeric dtype 指的是接受 integerfloating

在 64 位 dtype(即 np.float64np.int64)和 32 位 dtype(即 np.float32np.int32)之间进行选择时,归结为效率和精度之间的权衡。由于浮点误差较小,64 位类型提供了更精确的结果,但需要更多计算资源,导致操作速度变慢且内存使用量增加。相反,32 位类型承诺提高操作速度并减少内存消耗,但会引入更大的浮点误差。效率的提高取决于较低级别的优化,例如向量化、单指令多数据 (SIMD) 或缓存优化,但关键在于所用算法的兼容性。

具体来说,精度的选择应考虑所用算法是否可以有效地利用 np.float32。某些算法,特别是某些最小化方法,仅针对 np.float64 进行编码,这意味着即使传递 np.float32,也会触发自动转换回 np.float64。这不仅会抵消预期的计算节省,还会引入额外的开销,由于此额外的转换步骤,使用 np.float32 的操作意外地会变慢且更占用内存。

鸭子类型#

我们尝试应用鸭子类型来确定如何处理某些输入值(例如,检查给定的估计器是否为分类器)。也就是说,我们尽可能避免使用isinstance,并依靠属性的存在或不存在来确定对象的行为。遵循这种方法需要一些细微的差别。

  • 对于某些估计器,属性可能只有在拟合后才能使用。例如,我们无法预先确定在网格搜索中predict_proba 是否可用,其中网格在管道的最后一步交替使用概率预测器和非概率预测器。在下文中,我们只有在对某些数据进行拟合后才能确定clf 是否是概率的。

    >>> from sklearn.model_selection import GridSearchCV
    >>> from sklearn.linear_model import SGDClassifier
    >>> clf = GridSearchCV(SGDClassifier(),
    ...                    param_grid={'loss': ['log_loss', 'hinge']})
    

    这意味着我们只能在拟合后检查鸭子类型属性,并且必须小心地使元估计器仅根据拟合后底层估计器的状态呈现属性。

  • 检查属性是否存在(使用hasattr)通常与获取属性(getattr 或点表示法)一样代价高昂。在某些情况下,获取属性可能确实代价高昂(例如,对于feature_importances_ 的某些实现,这可能表明这是一个API设计缺陷)。因此,应避免执行hasattr 后跟getattr 的代码;在try-except 块中使用getattr 更可取。

  • 为了确定估计器期望的某些方面或对某些特征的支持,我们使用估计器标签 而不是鸭子类型。

提前停止#

这包括在训练损失收敛之前停止迭代优化方法,以避免过度拟合。这通常通过监控验证集上的泛化分数来完成。如果可用,则可以通过参数early_stopping 或设置正n_iter_no_change 来激活。

估计器实例#

我们有时使用此术语来区分估计器 类和构造的实例。例如,在下文中,cls 是一个估计器类,而est1est2 是实例。

cls = RandomForestClassifier
est1 = cls()
est2 = RandomForestClassifier()
示例#

我们尝试为 API 中的大多数函数和类提供基本用法的示例。

  • 作为其文档字符串中的 doctest(即在sklearn/ 库代码本身中)。

  • 作为示例库中的示例(使用sphinx-gallery)从examples/ 目录中的脚本渲染,举例说明估计器/函数的关键特征或参数。这些也应该从用户指南中引用。

  • 有时在用户指南(从doc/ 构建)中与估计器的技术描述一起出现。

实验性#

实验性工具已经可以使用,但其公共 API(例如默认参数值或拟合属性)在未来的版本中仍可能会发生更改,而不会遵循通常的弃用 警告策略。

评估指标#
评估指标#

评估指标衡量模型的性能。我们可能会专门使用此术语来指代metrics 中的函数(忽略pairwise),这与score 方法和交叉验证中使用的scoring API 不同。参见指标和评分:量化预测的质量

这些函数通常接受真值(或度量评估无真值的聚类的原始数据)和预测,无论是predict 的输出(y_pred)、predict_proba 的输出(y_proba),还是包括decision_functiony_score)在内的任意评分函数的输出。如果更高的分数表示更好的模型,函数通常命名为以_score 结尾;如果较低的分数表示更好的模型,则命名为以_loss 结尾。这种接口的多样性促使了评分 API 的产生。

请注意,某些估计器可以计算metrics 中未包含的指标,这些指标是特定于估计器的,特别是模型似然。

估计器标签#

估计器标签描述了估计器的某些功能。这将根据估计器检查启用某些运行时行为,但它也允许对每个估计器进行适当不变性的测试,同时将其排除在其他通用测试之外。

估计器标签的某些方面目前是通过predict_proba 等方法的鸭子类型以及估计器对象上的一些特殊属性来确定的。

有关更详细的信息,请参见估计器标签

特征#
特征#
特征向量#

抽象地说,特征是一个函数(在数学意义上),它将采样对象映射到数值或类别量。“特征”也常用于指代这些量,它们是表示样本的向量的单个元素。在数据矩阵中,特征表示为列:每一列都包含将特征函数应用于一组样本的结果。

在其他地方,特征被称为属性、预测变量、回归变量或自变量。

Scikit-learn 中几乎所有估计器都假设特征是数值型的、有限的且不缺失的,即使它们具有语义上不同的域和分布(分类的、序数的、计数值的、实值的、区间值的)。另见分类特征缺失值

n_features表示数据集中特征的数量。

拟合#

在估计器上调用fit(或fit_transformfit_predict等)。

已拟合#

拟合后估计器的状态。

没有检查估计器是否已拟合的常规程序。但是,未拟合的估计器

函数#

我们为许多算法提供了临时函数接口,而估计器类提供了更一致的接口。

特别是,Scikit-learn 可能提供一个函数接口,该接口将模型拟合到某些数据并返回学习到的模型参数,如linear_model.enet_path。对于转导模型,这也返回嵌入或聚类标签,如manifold.spectral_embeddingcluster.dbscan。许多预处理转换器也提供函数接口,类似于调用fit_transform,如preprocessing.maxabs_scale。用户应注意避免在使用这些fit_transform等效函数时发生数据泄漏

我们没有关于何时提供或不提供估计器的函数形式的严格策略,但维护者应考虑与现有接口的一致性,以及提供函数是否会误导用户偏离最佳实践(关于数据泄漏等)。

示例

超参数#
超参数#

参数

插补#
插补#

大多数机器学习算法要求其输入没有缺失值,如果违反此要求,则无法工作。尝试填充(或插补)缺失值的算法被称为插补算法。

可索引的#

类似数组的稀疏矩阵、pandas DataFrame 或序列(通常是列表)。

归纳#
归纳的#

归纳式(与转导式相对)机器学习构建某些数据的模型,然后可以将其应用于新实例。Scikit-learn 中的大多数估计器都是归纳式的,具有predict和/或transform方法。

Joblib#

Scikit-learn 中用于促进简单并行处理和缓存的 Python 库(https://joblib.readthedocs.io)。Joblib 面向于高效地处理 numpy 数组,例如通过使用内存映射。有关详细信息,请参见并行处理

标签指示矩阵#
多标签指示矩阵#
多标签指示矩阵#

用于表示多标签数据的格式,其中二维数组或稀疏矩阵的每一行对应一个样本,每一列对应一个类别,每个元素如果样本用该类别标记则为 1,否则为 0。

泄漏#
数据泄漏#

交叉验证中存在一个问题,由于无意中将测试数据的知识包含在模型训练中,可能会高估泛化性能。例如,将转换器应用于整个数据集而不是交叉验证拆分中的每个训练部分时,就会存在这种风险。

我们的目标是提供一些接口(例如 pipelinemodel_selection),以保护用户免受数据泄漏的影响。

内存映射#
内存映射#
内存映射#

一种内存效率策略,它将数据保留在磁盘上,而不是将其复制到主内存中。可以使用 numpy.memmap 创建可读、可写或同时可读可写的数组的内存映射。在使用 joblib 并行化 Scikit-learn 中的操作时,它可能会自动将大型数组映射到内存中,以减少多进程中的内存复制开销。

缺失值#

大多数 Scikit-learn 估计器不处理缺失值。当它们处理缺失值时(例如在 impute.SimpleImputer 中),NaN 是浮点型数组中缺失值的首选表示形式。如果数组的 dtype 为整数,则无法表示 NaN。因此,当可以在整数空间中执行插补或学习时,我们支持指定另一个 missing_values 值。未标记数据目标变量中缺失值的一种特殊情况。

n_features#

特征数量。特征

n_outputs#

目标变量中的输出数量。输出

n_samples#

样本数量。样本

n_targets#

n_outputs 的同义词。

叙述性文档#
叙述性文档#

用户指南 的别名,即撰写在 doc/modules/ 中的文档。与通过文档字符串提供的 API 参考 不同,用户指南旨在

  • 按主题或用法对 Scikit-learn 提供的工具进行分组;

  • 通过比较来解释为什么要使用每个特定的工具;

  • 提供工具的直观和技术描述;

  • 提供或链接到 示例,以演示工具的关键功能。

np#

由于常规的导入语句,它是 Numpy 的简写。

import numpy as np
在线学习#

模型通过在对相应的数据批次进行预测后不久接收每一批真实目标值 来迭代更新。从本质上讲,模型必须在每个批次之后都可用于预测。参见 partial_fit

核心外#

一种效率策略,其中并非所有数据都同时存储在主内存中,通常通过对数据批次执行学习来实现。参见 partial_fit

输出#

目标变量中每个样本的单个标量/分类变量。例如,在多标签分类中,每个可能的标签对应于一个二元输出。也称为 *响应*、*任务* 或 *目标*。参见 多类别多输出连续多输出

#

长度为二的元组。

参数#
参数#
参数#
参数#

我们主要使用 *参数* 来指代可以在估计器构建中指定的估计器的各个方面。例如,max_depthrandom_stateRandomForestClassifier 的参数。估计器构造函数的参数在估计器实例上作为属性存储,未经修改,通常以字母字符开头,以字母数字字符结尾。每个估计器的构造函数参数都在估计器的文档字符串中描述。

我们不使用统计意义上的参数,在统计意义上,参数是指定模型并可以从数据中估计的值。我们所说的参数可能是统计学家所说的模型的超参数:配置模型结构的方面,通常不能直接从数据中学习。但是,我们的参数也用于规定不影响学习模型的建模操作,例如用于控制并行的 n_jobs

当讨论元估计器的参数时,我们可能也包含了元估计器所包含的估计器的参数。通常,这些嵌套参数使用双下划线(__) 来区分作为参数的估计器及其参数。因此,clf = BaggingClassifier(estimator=DecisionTreeClassifier(max_depth=3)) 具有一个深度参数 estimator__max_depth,其值为 3,可以通过 clf.estimator.max_depthclf.get_params()['estimator__max_depth'] 访问。

可以使用其get_params 方法从估计器实例 中检索参数列表及其当前值。

在构造和拟合之间,可以使用set_params 修改参数。为实现此目的,通常在构造估计器时或设置每个参数时不会验证或更改参数。参数验证在调用fit 时执行。

常用参数列在下面

成对度量#
成对度量#

广义上讲,成对度量定义了一个函数,用于测量两个样本之间的相似性或相异性(每个样本通常表示为特征向量)。我们特别通过metrics.pairwise_distances 提供距离度量的实现(以及余弦距离等不正确的度量),并通过metrics.pairwise.pairwise_kernels 提供核函数的实现(一类受约束的相似性函数)。这些可以计算成对距离矩阵,这些矩阵是对称的,因此冗余地存储数据。

另见预计算度量

请注意,对于大多数距离度量,我们依赖于scipy.spatial.distance中的实现,但在我们的上下文中可能会为了效率而重新实现。 metrics.DistanceMetric 接口用于实现距离度量,以与高效的邻居搜索集成。

pd#

由于传统的导入语句,这是Pandas的缩写。

import pandas as pd
预计算#

在算法依赖于成对度量并且可以仅从成对度量计算的情况下,我们通常允许用户指定提供的X已处于成对(不)相似性空间中,而不是特征空间中。也就是说,当传递给fit时,它是一个方形对称矩阵,每个向量表示与每个样本的(不)相似性,当传递给预测/转换方法时,每一行对应一个测试样本,每一列对应一个训练样本。

预计算 X 的使用通常通过将metricaffinitykernel参数设置为字符串“precomputed”来指示。如果是这种情况,则估计器应将pairwise估计器标签设置为 True。

矩形#

可以表示为矩阵的数据,其中第一轴上有样本,第二轴上有固定、有限的特征集,称为矩形数据。

此术语不包括具有非向量结构的样本,例如文本、任意大小的图像、任意长度的时间序列、一组向量等。向量化器 的目的是产生这种数据的矩形形式。

样本#
样本#

我们通常使用这个术语作为名词来表示单个特征向量。在其他地方,样本被称为实例、数据点或观测值。n_samples表示数据集中的样本数,即数据数组X的行数。请注意,此定义是机器学习中的标准定义,与统计学中的定义不同,统计学中的定义是指_收集或选择的一组个体或对象_。

样本属性#
样本属性#

样本属性是每个样本的数据(例如,长度为 n_samples 的数组),传递给估计器方法或类似函数,与特征(X) 和目标(y)一起但与它们不同。最突出的例子是sample_weight;参见数据和样本属性中的其他属性。

从 0.19 版开始,我们还没有处理样本属性及其在元估计器中的路由的一致方法,尽管通常使用fit_params参数。

scikit-learn-contrib#

一个发布与 Scikit-learn 兼容的库的场所,这些库得到了核心开发者和 contrib 社区的广泛授权,但并非由核心开发者团队维护。参见https://scikit-learn-contrib.github.io

scikit-learn增强提案#
SLEP#
SLEP#

API 原则变更以及依赖项或支持版本的变更,需通过 SLEP 进行,并遵循Scikit-learn 治理和决策流程中概述的流程。所有投票均需在投票前公开提案并进行讨论。此类提案必须是一份完整的文档,以“Scikit-Learn 增强提案”(SLEP)的形式呈现,而不是在某个问题上进行冗长的讨论。SLEP 必须作为拉取请求提交到 增强提案,并使用 SLEP 模板.

半监督#
半监督学习#
半监督#

在模型拟合过程中,仅针对作为训练数据提供的一些样本提供预期预测(标签或真实值)的学习方法。在半监督分类中,我们通常将标签 -1 应用于 未标记 的样本。

稀疏矩阵#
稀疏图#

二维数值数据的表示方式,当几乎所有元素都为零时,比相应的稠密 numpy 数组更节省内存。我们使用 scipy.sparse 框架,该框架提供了多种底层的稀疏数据表示方式或格式。某些格式对于特定任务比其他格式更有效,当特定格式具有特殊优势时,我们会尝试在 Scikit-learn 参数描述中记录此事实。

某些稀疏矩阵格式(特别是 CSR、CSC、COO 和 LIL)区分隐式零和显式零。显式零被存储(即,它们在 data 数组中占用内存)在数据结构中,而隐式零对应于在显式存储中未定义的每个元素。

Scikit-learn 使用两种稀疏矩阵语义

矩阵语义

稀疏矩阵被解释为一个数组,其中隐式零和显式零都被解释为数字 0。这是最常采用的解释方式,例如,当稀疏矩阵用于特征矩阵或 多标签指示矩阵 时。

图语义

scipy.sparse.csgraph 一样,显式零被解释为数字 0,但隐式零表示被屏蔽或缺失的值,例如图中两个顶点之间缺少边,其中显式值表示边的权重。这种解释方式用于表示聚类中的连接性、最近邻的表示(例如 neighbors.kneighbors_graph)以及仅需要每个点邻域中的距离的预计算距离表示。

在使用稀疏矩阵时,我们假设它是出于某种原因而稀疏的,并避免编写使用户提供的稀疏矩阵稠密的代码,而是保持稀疏性,或者如果不可能(即,如果估计器不支持/无法支持稀疏矩阵)则引发错误。

无状态#

如果估计器不存储在 拟合过程中获得的任何信息,则该估计器为无状态的。此信息可以是在 拟合过程中学习的参数或从训练数据计算的统计数据。如果估计器除了在 __init__ 中设置的属性之外没有任何 属性,则该估计器为无状态的。对这些估计器调用 fit 将只验证在 __init__ 中传递的公共 属性

监督#
监督学习#

在模型拟合过程中,为每个样本提供预期预测(标签或真实值),作为 y 提供。这是在分类器或回归器等估计器中采取的方法。

目标#
目标变量#

监督(和 半监督)学习中,作为 y 传递给估计器的 fit 方法的因变量。也称为因变量结果变量响应变量真实值标签。Scikit-learn 使用结构最少的目标:来自有限集的类、有限实数值、多个类或多个数字。请参见 目标类型

转导#
转导的#

转导(与 归纳 相反)机器学习方法旨在对特定数据集进行建模,但不将该模型应用于未见数据。示例包括 manifold.TSNEcluster.AgglomerativeClusteringneighbors.LocalOutlierFactor

未标记#
未标记数据#

拟合时具有未知真实值的样本;等效地,缺失值目标 中。另请参见 半监督无监督 学习。

无监督#
无监督学习#

拟合模型时,学习每个样本的预期预测(标签或真实值)不可用的情况,就像在聚类器异常值检测器中一样。无监督估计器会忽略传递给fit的任何y

类 API 和估计器类型#

分类器#
分类器#

具有有限数量离散可能输出值的监督式(或半监督式预测器

分类器支持对一些二元多类多标签多类多输出目标进行建模。在 scikit-learn 中,所有分类器都支持多类分类,默认情况下使用针对二元分类问题的“一对多”策略。

分类器必须在拟合后存储classes_属性,并继承自base.ClassifierMixin,这将正确设置其相应的估计器标签

可以使用is_classifier将分类器与其他估计器区分开来。

分类器必须实现

实现decision_functionpredict_probapredict_log_proba也可能合适。

聚类器#
聚类器#

具有有限数量离散输出值的无监督预测器

聚类器通常在拟合后存储labels_,如果它是直推式的,则必须这样做。

聚类器必须实现

密度估计器#

输入概率密度函数的无监督估计。常用技术包括

  • 核密度估计 - 使用核函数(由带宽参数控制)来表示密度;

  • 高斯混合 - 使用高斯模型的混合来表示密度。

估计器#
估计器#

管理模型的估计和解码的对象。模型被估计为以下内容的确定性函数:

估计的模型存储在估计器实例上的公共和私有属性中,方便通过预测和转换方法进行解码。

估计器必须提供fit方法,并且应该提供set_paramsget_params,尽管这些通常是通过继承自base.BaseEstimator来提供的。

某些估计器的核心功能也可能作为函数提供。

特征提取器#
特征提取器#

一个转换器,它接受输入,其中每个样本不被表示为固定长度的类数组对象,并为每个样本生成一个类数组对象的特征(因此对于一组样本而言,是一个二维类数组对象)。换句话说,它(有损地)将非矩形数据表示映射到矩形数据。

特征提取器必须至少实现

元估计器#
元估计器#
元估计器#
元估计器#

一种将另一个估计器作为参数的估计器。例如包括pipeline.Pipelinemodel_selection.GridSearchCVfeature_selection.SelectFromModelensemble.BaggingClassifier

在元估计器的fit方法中,任何包含的估计器都应该在拟合之前进行克隆(尽管FIXME:Pipeline和FeatureUnion目前没有这样做)。一个例外是,估计器可以明确地说明它接受预先拟合的估计器(例如,在feature_selection.SelectFromModel中使用prefit=True)。已知的一个问题是,如果克隆元估计器,则预先拟合的估计器将丢失其模型。即使所有包含的估计器都是预先拟合的,元估计器也应该在预测之前调用fit

在元估计器的主要行为(例如predicttransform实现)是提供的基础估计器(或多个基础估计器)的预测/转换方法的函数的情况下,元估计器至少应提供基础估计器提供的标准方法。在元估计器被拟合之前,可能无法确定底层估计器提供了哪些方法(另请参见鸭子类型),为此utils.metaestimators.available_if可能会有所帮助。它还应提供(或修改)基础估计器提供的估计器标签classes_属性。

元估计器应注意在将数据传递给底层估计器之前尽可能少地验证数据。这节省了计算时间,并且例如,可能允许底层估计器轻松处理非矩形数据。

异常值检测器#
异常值检测器#

一种无监督的二元预测器,它模拟核心样本和异常样本之间的区别。

异常值检测器必须实现

归纳异常值检测器还可以实现decision_function以给出标准化的内点分数,其中异常值的得分低于0。score_samples可以为每个样本提供非标准化分数。

预测器#
预测器#

支持predict和/或fit_predict估计器。这包括分类器回归器异常值检测器聚类器

在统计学中,“预测器”指的是特征

回归器#
回归器#

一个监督的(或半监督的预测器,具有连续的输出值。

回归器继承自base.RegressorMixin,它可以正确设置其估计器标签

可以使用is_regressor区分回归器和其他估计器。

回归器必须实现

变换器#
变换器#

支持transform和/或fit_transform的估计器。纯转导变换器,例如manifold.TSNE,可能没有实现transform

向量化器#
向量化器#

参见特征提取器

还有一些与小型估计器族相关的API,例如

交叉验证分割器#
CV 分割器#
交叉验证生成器#

一组非估计器类,用于通过提供splitget_n_splits方法将数据集分割成一系列训练和测试部分(参见交叉验证:评估估计器性能)。请注意,与估计器不同,这些没有fit方法,也不提供set_paramsget_params。参数验证可以在__init__中执行。

交叉验证估计器#

一种具有内置交叉验证功能的估计器,可以自动选择最佳超参数(参见用户指南)。一些交叉验证估计器的例子包括ElasticNetCVLogisticRegressionCV。交叉验证估计器命名为EstimatorCV,大致等效于GridSearchCV(Estimator(), ...)。与使用规范的估计器类和网格搜索相比,使用交叉验证估计器的优势在于它们可以利用预热启动,在交叉验证过程的先前步骤中重用预先计算的结果。这通常会导致速度提升。RidgeCV类是一个例外,它可以执行高效的留一法 (LOO) 交叉验证。默认情况下,除了使用 LOO-CV 的RidgeCV之外,所有这些估计器都将在找到最佳超参数组合后,重新拟合到完整的训练数据集上。

评分器#

一个非估计器可调用对象,它在给定的测试数据上评估估计器,并返回一个数字。与评估指标不同,返回的数字越大,分数越好。参见评分参数:定义模型评估规则

更多示例

元数据路由#

使用者#

一个使用元数据的对象。此对象通常是一个估计器、一个评分器或一个CV 分割器。使用元数据意味着在计算中使用它,例如使用样本权重来计算某种类型的分数。成为使用者并不意味着该对象总是接收某种元数据,而是意味着如果提供元数据,它可以使用它。

元数据#

与给定的Xy数据相关的,但不是数据直接组成部分的数据,例如样本权重分组,并传递给不同的对象和方法,例如评分器CV 分割器

路由器#

一个将元数据路由到使用者的对象。此对象通常是一个元估计器,例如PipelineGridSearchCV。一些路由器也可以是使用者。例如,当元估计器使用给定的分组时,它也会将其传递给一些子对象,例如CV 分割器

更多信息,请参见元数据路由用户指南

目标类型#

二元#

一个由两类组成的分类问题。二元目标可以像多类问题一样表示,但只有两个标签。二元决策函数表示为一个一维数组。

从语义上讲,一类通常被认为是“正类”。除非另有说明(例如,在评估指标中使用pos_label),否则我们将数值上或词典上较大的类标签视为正类:[0, 1] 的标签中,1 是正类;[1, 2] 的标签中,2 是正类;['no', 'yes'] 的标签中,'yes' 是正类;['no', 'YES'] 的标签中,'no' 是正类。这会影响决策函数的输出,例如。

请注意,从多类y或连续y中采样的数据集可能看起来是二元的。

type_of_target 将对二元输入返回 'binary',或类似的仅包含单个类的数组。

连续#

一个回归问题,其中每个样本的目标都是一个有限的浮点数,表示为一个一维浮点数数组(有时是整数)。

type_of_target 将对连续输入返回 'continuous',但如果数据全是整数,则将其识别为 'multiclass'。

连续多输出#
连续多输出#
多输出连续#
多输出连续型#

一种回归问题,其中每个样本的目标包含n_outputs输出,每个输出都是一个有限的浮点数,对于特定数据集中的固定整数n_outputs > 1

连续型多输出目标表示为多个连续型目标,水平堆叠成形状为(n_samples, n_outputs)的数组。

type_of_target 将为连续型多输出输入返回 ‘continuous-multioutput’ ,但如果数据全是整数,则将其识别为 ‘multiclass-multioutput’。

多类别#
多类别#

包含两个以上类别的一种分类问题。多类别目标可以表示为一维字符串或整数数组。整数的二维列向量(即多输出中的单个输出)也被接受。

我们不正式支持其他可排序、可散列的对象作为类别标签,即使估计器在给定此类类型的分类目标时可能恰好有效。

对于半监督分类,未标记样本在y中应具有特殊标签 -1。

在 scikit-learn 中,所有支持二元分类的估计器也支持多类别分类,默认情况下使用一对多策略。

preprocessing.LabelEncoder 有助于将多类别目标规范化为整数。

type_of_target 将为多类别输入返回 ‘multiclass’。用户可能还想将 ‘binary’ 输入与 ‘multiclass’ 同样处理。

多类别多输出#
多类别多输出#
多输出多类别#
多输出多类别#

一种分类问题,其中每个样本的目标包含n_outputs输出,每个输出都是一个类别标签,对于特定数据集中的固定整数n_outputs > 1。每个输出都有一组固定的可用类别,并且每个样本都用每个输出的类别进行标记。输出可以是二元或多类别的,并且当所有输出都是二元时,目标是多标签

多类别多输出目标表示为多个多类别目标,水平堆叠成形状为(n_samples, n_outputs)的数组。

XXX:为简便起见,我们可能并不总是支持多类别多输出的字符串类别标签,应使用整数类别标签。

multioutput 提供了使用多个单输出估计器来估计多输出问题的估计器。这可能无法完全解释不同输出之间的依赖关系,而本机处理多输出情况的方法(例如决策树、最近邻、神经网络)可能做得更好。

type_of_target 将为多类别多输出输入返回 ‘multiclass-multioutput’。

多标签#
多标签#

每个输出都是二元多类别多输出目标。这可以表示为一个二维(密集)整数数组或稀疏矩阵,使得每一列都是一个单独的二元目标,其中正标签用 1 表示,负标签通常用 -1 或 0 表示。在支持密集多标签目标的任何地方都不支持稀疏多标签目标。

从语义上讲,多标签目标可以被认为是每个样本的一组标签。preprocessing.MultiLabelBinarizer虽然在内部未使用,但它作为一个实用程序来将集合列表表示转换为二维数组或稀疏矩阵。使用preprocessing.LabelBinarizer对多类别目标进行独热编码会将其转换为多标签问题。

type_of_target 将为多标签输入返回 ‘multilabel-indicator’,无论是稀疏的还是密集的。

多输出#
多输出#

每个样本具有多个分类/回归标签的目标。参见多类别多输出连续型多输出。我们目前不支持混合分类和回归目标的建模。

方法#

decision_function#

在拟合的分类器异常值检测器中,预测每个样本相对于每个类别的“软”分数,而不是predict产生的“硬”类别预测。其输入通常只是一些观察到的数据,X

如果估计器尚未拟合,则调用此方法应引发exceptions.NotFittedError

输出约定

二元分类

一维数组,其中严格大于零的值表示正类(即classes_中的最后一个类)。

多类别分类

一个二维数组,其中行方向上的最大值索引即为预测的类别。列的顺序根据classes_排列。

多标签分类

Scikit-learn 对多标签决策函数的表示方式并不一致。它可能有两种表示方式:

  • 长度为n_labels的二维数组列表,每个数组的形状为:(n_samples, 2),类似于多类别多输出。

  • 形状为(n_samples, n_labels)的单个二维数组,数组中的每一“列”对应于单个二元分类决策。这与多类别分类格式相同,但语义不同:与二元情况一样,它应该通过以 0 为阈值进行解释。

多输出分类

对应于每个多类别决策函数的二维数组列表。

异常值检测

一维数组,其中大于等于零的值表示内点。

fit#

每个估计器都提供fit方法。它通常采用一些样本X,如果模型是有监督的,则采用目标y,以及其他样本属性,例如sample_weight。它应该:

  • 清除估计器上存储的任何先前属性,除非使用warm_start

  • 验证和解释任何参数,如果无效,理想情况下应引发错误;

  • 验证输入数据;

  • 根据估计的参数和提供的数据估计并存储模型属性;以及

  • 返回现在已拟合的估计器,以方便方法链式调用。

目标类型描述了y可能的格式。

fit_predict#

尤其用于无监督半监督估计器,它拟合模型并返回训练数据的预测结果(类似于predict)。在聚类器中,这些预测结果也存储在labels_属性中,.fit_predict(X)的输出通常等效于.fit(X).predict(X)fit_predict的参数与fit的参数相同。

fit_transform#

转换器上的方法,它拟合估计器并返回转换后的训练数据。它采用与fit相同的参数,其输出应与调用.fit(X, ...).transform(X)的形状相同。尽管如此,在极少数情况下,.fit_transform(X, ...).fit(X, ...).transform(X)不会返回相同的值,其中需要对训练数据进行不同的处理(例如,在堆叠集成中进行模型混合;此类情况应有明确的文档说明)。半监督转换器也可能提供fit_transform,但不提供transform

实现fit_transform的一个原因是,分别执行fittransform的效率不如一起执行。 base.TransformerMixin 提供了一个默认实现,在fit_transform是专用还是非专用的转换器中提供一致的接口。

归纳学习中——目标是学习一个可以应用于新数据的通用模型——用户应该注意不要在进一步建模之前将fit_transform应用于整个数据集(即训练数据和测试数据),因为这会导致数据泄漏

get_feature_names_out#

主要用于特征提取器,但也用于其他转换器,为估计器的transform方法输出中的每一列提供字符串名称。它输出一个字符串数组,并可能接受一个类似数组的字符串作为输入,对应于从中可以生成输出列名称的输入列的名称。如果未传入input_features,则将使用feature_names_in_属性。如果未定义feature_names_in_属性,则输入名称命名为[x0, x1, ..., x(n_features_in_ - 1)]

get_n_splits#

交叉验证拆分器(而非估计器)上,返回在给定相同参数的情况下,迭代split返回值时将获得的元素数量。它接受与split相同的参数。

get_params#

获取所有可以使用set_params设置的参数及其值。当参数deep设置为False时,可以使用它仅返回那些不包含__的参数,即不通过包含的估计器间接获得的参数。

大多数估计器采用base.BaseEstimator中的定义,该定义仅采用为__init__定义的参数。pipeline.Pipeline等重新实现了get_params,以声明其steps参数中命名的估计器本身就是参数。

partial_fit#

方便以在线方式拟合估计器。与fit不同,重复调用partial_fit不会清除模型,而是使用提供的数据更新模型。提供给partial_fit的数据部分可以称为小批量。每个小批量必须具有始终如一的形状等。在迭代估计器中,partial_fit通常只执行一次迭代。

partial_fit也可用于核心外学习,尽管通常仅限于可以在线执行学习的情况,即模型在每次partial_fit之后都可用,并且不需要单独的处理来完成模型。cluster.Birch引入了这样的约定:调用partial_fit(X)将产生一个未完成的模型,但可以通过调用partial_fit()(即不传递更多的小批量)来完成模型。

通常,不应在调用partial_fit之间修改估计器参数,尽管partial_fit也应该验证它们以及新的数据小批量。相反,warm_start用于使用相同的数据但不同的参数重复拟合相同的估计器。

fit一样,partial_fit应该返回估计器对象。

要清除模型,应该构造一个新的估计器,例如使用base.clone

注意:在fit之后使用partial_fit会导致未定义的行为。

predict#

为每个样本进行预测,通常只将X作为输入(但参见下面的回归器输出约定)。在分类器回归器中,此预测与拟合中使用的目标空间相同(例如,如果拟合中的y由这些字符串组成,则为{‘red’, ‘amber’, ‘green’}之一)。尽管如此,即使传递给fity是列表或其他类似数组,predict的输出也应始终为数组或稀疏矩阵。在聚类器异常值检测器中,预测是一个整数。

如果估计器尚未拟合,则调用此方法应引发exceptions.NotFittedError

输出约定

分类器

形状为(n_samples,) (n_samples, n_outputs)的数组。多标签数据可以表示为稀疏矩阵(如果在拟合中使用了稀疏矩阵)。每个元素都应该是分类器的classes_属性中的一个值。

聚类器

形状为(n_samples,)的数组,其中每个值从0到n_clusters - 1(如果对应的样本被聚类),如果样本未被聚类,则为-1,如cluster.dbscan

异常值检测器

形状为(n_samples,)的数组,其中每个值为-1表示异常值,1表示非异常值。

回归器

形状为(n_samples,)的数值数组,通常为float64。一些回归器在其predict方法中具有额外的选项,允许它们返回相对于预测值的标准差(return_std=True)或协方差(return_cov=True)。在这种情况下,返回值是一个数组元组,对应于(预测均值、标准差、协方差),按要求。

predict_log_proba#

predict_proba输出的自然对数,用于提高数值稳定性。

predict_proba#

分类器聚类器中的一种方法,可以返回每个类/聚类的概率估计值。它的输入通常只是一些观察到的数据X

如果估计器尚未拟合,则调用此方法应引发exceptions.NotFittedError

输出约定与决策函数的输出约定类似,但在二元分类情况下有所不同,其中为每个类别输出一列(而decision_function输出的是一个一维数组)。对于二元和多元预测,每一行的和应该为1。

与其他方法类似,只有当估计器能够进行概率预测时(参见鸭子类型),predict_proba才应该存在。这意味着方法的存在可能取决于估计器的参数(例如,在linear_model.SGDClassifier中)或训练数据(例如,在model_selection.GridSearchCV中),并且可能只在拟合后出现。

score#

估计器上的一种方法,通常是预测器,它评估其在给定数据集上的预测结果,并返回单个数值分数。较大的返回值表示更好的预测;默认情况下,分类器使用准确率,回归器使用R^2。

如果估计器尚未拟合,则调用此方法应引发exceptions.NotFittedError

一些估计器实现了一个自定义的、特定于估计器的评分函数,通常是模型下数据的似然性。

score_samples#

返回每个给定样本分数的方法。“分数”的确切定义因类而异。在密度估计的情况下,它可以是数据上的对数密度模型,在异常值检测的情况下,它可以是数据异常值因子的相反数。

如果估计器尚未拟合,则调用此方法应引发exceptions.NotFittedError

set_params#

在任何估计器中都可用,接受与get_params中的键对应的关键字参数。每个参数都被提供一个新的值来赋值,这样在set_params之后调用get_params将反映更改的参数base.BaseEstimator中的实现处理嵌套参数,否则将参数设置为估计器上的属性。该方法在pipeline.Pipeline和相关的估计器中被重写。

split#

CV 分割器(不是估计器)上,此方法接受参数(Xygroups),其中所有参数都可能是可选的,并返回(train_idx, test_idx)对的迭代器。{train,test}_idx 中的每一个都是一个一维整数数组,其值为从 0 到X.shape[0] - 1,长度任意,这样在某个train_idx及其对应的test_idx中不会出现相同的值。

transform#

变换器中,将输入(通常只有X)变换到某个变换空间(通常表示为Xt)。输出是一个长度为n_samples的数组或稀疏矩阵,列数在拟合后固定。

如果估计器尚未拟合,则调用此方法应引发exceptions.NotFittedError

参数#

这些常见的参数名称,特别是在估计器构建中使用(参见概念参数),有时也作为函数或非估计器构造器的参数出现。

class_weight#

用于指定在拟合分类器时作为目标类别的函数的样本权重。在也支持并给出sample_weight的情况下,它将乘以class_weight的贡献。类似地,当在多输出(包括多标签)任务中使用class_weight时,权重将跨输出(即y的列)相乘。

默认情况下,所有样本的权重相等,这样类别实际上按其在训练数据中的流行程度加权。这可以通过class_weight={label1: 1, label2: 1, ...}为所有类别标签显式实现。

更一般地,class_weight被指定为一个字典,它将类别标签映射到权重({class_label: weight}),这样命名类别的每个样本都将获得该权重。

可以使用class_weight='balanced' 为所有类别赋予相同的权重,方法是为每个样本赋予一个与其类别在训练数据中出现频率成反比的权重:n_samples / (n_classes * np.bincount(y))。类权重的使用方法取决于算法:对于线性模型(例如线性SVM或逻辑回归),类权重将通过样本类权重加权每个样本的损失来改变损失函数。对于基于树的算法,类权重将用于重新加权分裂标准。注意,这种重新平衡不会考虑每个类别中样本的权重。

对于多输出分类,使用字典列表来指定每个输出的权重。例如,对于四类多标签分类,权重应为[{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}],而不是[{1:1}, {2:5}, {3:1}, {4:1}]

class_weight 参数使用 utils.class_weight.compute_class_weight 进行验证和解释。

cv#

确定交叉验证分割策略,如基于交叉验证的例程中所用。 cv 也存在于诸如 multioutput.ClassifierChaincalibration.CalibratedClassifierCV 等估计器中,这些估计器使用一个估计器的预测作为另一个估计器的训练数据,以避免过度拟合训练监督。

cv 的可能输入通常是

  • 一个整数,指定 K 折交叉验证中的折叠数。如果估计器是分类器(由 base.is_classifier 确定),并且 目标 可以表示二元或多类(但不是多输出)分类问题(由 utils.multiclass.type_of_target 确定),则 K 折将对类别进行分层。

  • 一个 交叉验证分割器 实例。有关 Scikit-learn 中可用的分割器,请参阅 用户指南

  • 一个产生训练/测试分割的迭代器。

除了一些例外情况(尤其是在根本不使用交叉验证是一种选择的情况下),默认值为 5 折。

cv 值使用 model_selection.check_cv 进行验证和解释。

kernel#

指定核方法算法要使用的核函数。例如,估计器 svm.SVCgaussian_process.GaussianProcessClassifier 都有一个 kernel 参数,该参数接受要使用的核的名称(作为字符串)或用于计算核矩阵的可调用核函数。有关更多参考,请参阅 核逼近高斯过程 用户指南。

max_iter#

对于涉及迭代优化的估计器,这决定了在 拟合 中要执行的最大迭代次数。如果在未收敛的情况下运行了 max_iter 次迭代,则应引发 exceptions.ConvergenceWarning。请注意,“一次迭代”的解释在不同的估计器之间是不一致的:有些(但并非所有)估计器将其解释为一个时期(即对数据中每个样本的一次遍历)。

待办事项:也许我们应该对 ConvergenceWarning 和 max_iter 之间的关系进行一些通用的测试。

memory#

一些估计器利用 joblib.Memory 在拟合过程中存储部分解决方案。因此,当再次调用 fit 时,这些部分解决方案已被记忆并可以重复使用。

可以将 memory 参数指定为带目录路径的字符串,或者可以使用 joblib.Memory 实例(或具有类似接口的对象,即 cache 方法)。

使用utils.validation.check_memorymemory值进行验证和解释。

metric#

作为参数,这是确定两个数据点之间距离的方案。参见metrics.pairwise_distances。实际上,对于某些算法,可以使用不正确的距离度量(例如余弦距离,它不满足三角不等式)。

XXX:层次聚类使用affinity表示此含义。

我们也使用metric来指代评估指标,但避免将其用作参数名。

n_components#

转换器应将输入转换成的特征数量。对于仿射投影的特殊情况,请参见components_

n_iter_no_change#

在停止迭代过程之前等待没有改进的迭代次数。这也被称为patience参数。它通常与提前停止一起使用,以避免过早停止。

n_jobs#

此参数用于指定应为使用joblib并行化的例程使用多少个并发进程或线程。

n_jobs是一个整数,指定并发运行的工作程序的最大数量。如果指定为1,则根本不使用joblib并行化,这对于调试很有用。如果设置为-1,则使用所有CPU。对于低于-1的n_jobs,将使用(n_cpus + 1 + n_jobs)个CPU。例如,使用n_jobs=-2时,将使用除一个CPU之外的所有CPU。

n_jobs默认为None,这意味着未设置;除非当前的joblib.Parallel后台上下文另有指定,否则它通常会被解释为n_jobs=1

请注意,即使n_jobs=1,在某些配置下也可能会使用低级并行化(通过Numpy和OpenMP)。

有关joblib及其与scikit-learn交互的更多详细信息,请参阅我们的并行化说明

pos_label#

在二元分类问题中,正标签必须使用其进行编码,其中不假设正类。此值通常需要计算不对称评估指标,例如精确度和召回率。

random_state#

只要随机化是Scikit-learn算法的一部分,就可以提供random_state参数来控制使用的随机数生成器。请注意,random_state的存在并不意味着总是使用随机化,因为它可能取决于另一个参数(例如shuffle)的设置。

传递的值将影响函数返回的结果的可重复性(拟合分割或任何其他函数,例如k_means)。random_state的值可以是

None(默认值)

使用来自numpy.random的全局随机状态实例。多次调用该函数将重用相同的实例,并将产生不同的结果。

整数

使用由给定整数播种的新随机数生成器。使用整数将在不同的调用中产生相同的结果。但是,可能值得检查您的结果在许多不同的不同随机种子中是否稳定。常用的整数随机种子是0和42。整数数值必须在[0, 2**32 - 1]范围内。

numpy.random.RandomState实例

使用提供的随机状态,只影响该相同随机状态实例的其他用户。多次调用该函数将重用相同的实例,并将产生不同的结果。

内部使用utils.check_random_state来验证输入random_state并返回RandomState实例。

有关如何控制scikit-learn对象的随机性和避免常见陷阱的更多详细信息,您可以参考控制随机性

scoring#

指定要最大化的评分函数(通常通过交叉验证),或在某些情况下,要报告的多个评分函数。评分函数可以是metrics.get_scorer接受的字符串或可调用评分器,不要与评估指标混淆,因为后者具有更多样的API。scoring也可以设置为None,在这种情况下,将使用估计器的评分方法。请参阅用户指南中的scoring参数:定义模型评估规则

当可以评估多个指标时,scoring 可以作为唯一字符串列表、键为名称且值为可调用对象的字典或返回字典的可调用对象给出。请注意,这并*不*指定要最大化的评分函数,另一个参数,例如 refit,可以用于此目的。

scoring 参数使用 metrics.check_scoring 进行验证和解释。

verbose#

目前 Scikit-learn 的日志记录处理并不十分一致,但当它作为选项提供时,通常可以使用 verbose 参数来选择不进行日志记录(设置为 False)。任何 True 值都应启用一些日志记录,但对于完整的详细程度,可能需要更大的整数(例如,大于 10)。详细日志通常打印到标准输出。估计器在默认 verbose 设置下不应在标准输出上产生任何输出。

warm_start#

当对同一数据集重复拟合估计器,但针对多个参数值(例如,如在 网格搜索 中那样找到最大化性能的值)时,可以重用从先前参数值学习到的模型的某些方面,从而节省时间。当 warm_start 为 True 时,现有的 已拟合 模型 属性 用于在随后调用 fit 时初始化新模型。

请注意,这只适用于某些模型和某些参数,甚至某些参数值的顺序。通常,warm_start 与控制估计器迭代次数的参数之间存在相互作用。

对于从 ensemble 导入的估计器,warm_start 将与 n_estimatorsmax_iter 相互作用。对于这些模型,通过 len(estimators_)n_iter_ 报告的迭代次数对应于自模型初始化以来学习到的估计器/迭代的总数。因此,如果一个模型已经用 N 个估计器初始化,并且 fit 被调用,n_estimatorsmax_iter 设置为 M,则模型将训练 M - N 个新的估计器。

其他模型,通常使用基于梯度的求解器,具有不同的行为。它们都公开了一个 max_iter 参数。报告的 n_iter_ 对应于上次调用 fit 时完成的迭代次数,最多为 max_iter。因此,我们不考虑自初始化以来估计器的状态。

partial_fit 也保留了调用之间的模型,但有所不同:使用 warm_start,参数会发生变化,并且数据在对 fit 的调用中(或多或少)保持不变;使用 partial_fit,小批量数据会发生变化,而模型参数保持不变。

在某些情况下,您可能希望使用 warm_start 来拟合不同但密切相关的数据。例如,可以最初拟合到数据集的子集,然后在完整数据集上微调参数搜索。对于分类,warm_startfit 的一系列调用中的所有数据都必须包含来自每个类别的样本。

属性#

参见概念 属性

classes_#

分类器已知的类别标签列表,将每个标签映射到模型表示或输出中使用的数值索引。例如,predict_proba 的数组输出具有与 classes_ 对齐的列。对于 多输出 分类器,classes_ 应为列表列表,每个输出一个类别列表。对于每个输出,类别应排序(数值上,或字符串的字典序)。

classes_ 和到索引的映射通常由 preprocessing.LabelEncoder 管理。

components_#

形状为 (n_components, n_features) 的仿射变换矩阵,用于许多线性 变换器,其中 n_components 是输出特征的数量,n_features 是输入特征的数量。

另请参见 components_,这是线性预测器的类似属性。

coef_#

广义线性模型 预测器 的权重/系数矩阵,对于二元分类和单输出回归,形状为 (n_features,);对于多类分类,形状为 (n_classes, n_features);对于多输出回归,形状为 (n_targets, n_features)。请注意,这并不包括截距(或偏差)项,该项存储在 intercept_ 中。

如果可用,feature_importances_ 通常也不会提供,但可以计算为 coef_ 中每个特征项的范数。

另请参见 components_,这是线性变换器的类似属性。

embedding_#

流形学习 估计器中,训练数据的嵌入,形状为 (n_samples, n_components),与 fit_transform 的输出相同。另请参见 labels_

n_iter_#

拟合可能在收敛时停止的迭代估计器时实际执行的迭代次数。另请参见 max_iter

feature_importances_#

形状为 (n_features,) 的向量,在某些 预测器 中可用,用于提供模型预测中每个特征重要性的相对度量。

labels_#

聚类器 中,包含训练数据每个样本的聚类标签的向量,与 fit_predict 的输出相同。另请参见 embedding_

数据和样本属性#

参见概念 样本属性

groups#

用于交叉验证例程,以识别相关的样本。每个值都是一个标识符,这样,在支持的 CV 分割器 中,来自某些 groups 值的样本可能不会同时出现在训练集及其对应的测试集中。参见 分组数据的交叉验证迭代器

sample_weight#

每个样本的相对权重。直观地说,如果所有权重都是整数,则加权模型或分数应该等效于当重复样本权重中指定的次数时计算出的模型或分数。权重可以指定为浮点数,因此样本权重通常等效于一个常数正比例因子。

待修正 这种解释在实践中是否总是如此?我们没有通用的测试。

一些估计器,例如决策树,支持负权重。待修正:此功能或其缺失可能未在许多估计器中进行测试或记录。

当模型的其他参数考虑某个区域中的样本数量时,情况并非完全如此,例如 cluster.DBSCAN 中的 min_samples。在这种情况下,样本计数变为其权重之和。

在分类中,样本权重也可以使用 class_weight 估计器 参数 指定为类的函数。

X#

表示在训练和预测时观察到的数据,用作学习中的自变量。使用大写字母表示法表示它通常是一个矩阵(参见 矩形)。当为矩阵时,每个样本可以用 特征 向量或与每个训练样本的 预计算 (不)相似性向量表示。X 也可能不是矩阵,可能需要 特征提取器成对度量 在学习模型之前将其转换为矩阵。

Xt#

“转换后的 X”的简写。

y#
Y#

表示在训练时可能被观察到的作为学习中因变量的数据,但在预测时不可用,通常是预测的目标。该符号可以大写表示它是一个矩阵,例如表示多输出目标;但通常我们使用y,有时即使假设多个输出也是如此。