常见术语和 API 元素词汇表#
本词汇表旨在明确地代表 Scikit-learn 及其 API 中应用的隐性和显性约定,同时为用户和贡献者提供参考。它旨在描述概念,并详细说明其相应的 API 或链接到文档中其他相关的部分。通过从 API 参考和用户指南链接到词汇表条目,我们可以最大限度地减少冗余和不一致。
我们首先列出一般概念(以及任何不适合其他地方的概念),但更具体的相关术语集列在下面:类 API 和估计器类型,目标类型,方法,参数,属性,数据和样本属性。
一般概念#
- 1d#
- 1d 数组#
一维数组。一个 NumPy 数组,其
.shape
长度为 1。一个向量。- 2d#
- 2d 数组#
二维数组。一个 NumPy 数组,其
.shape
长度为 2。通常表示矩阵。- API#
既指 Scikit-learn 中实现的估计器的特定接口,也指本词汇表和贡献者文档中概述的各种估计器类型中的通用约定。
构成 Scikit-learn 公共 API 的特定接口在很大程度上记录在API 参考中。但是,我们不太正式地将任何内容视为公共 API,如果访问它所需的任何标识符都不以
_
开头。我们通常尝试为公共 API 中的所有对象维护向后兼容性。私有 API,包括以
_
开头的函数、模块和方法,不保证在不同版本之间保持稳定。- 类数组#
Scikit-learn 估计器和函数的输入最常见的格式,类数组是任何类型对象,对于这些对象,
numpy.asarray
将生成具有适当形状(通常为 1 或 2 维)和适当 dtype(通常为数字)的数组。这包括
一个 NumPy 数组
一个数字列表
对于某个固定长度 k,一个长度为 k 的数字列表
一个
pandas.DataFrame
,其中所有列都是数字一个数字
pandas.Series
它不包括
一个稀疏矩阵
一个稀疏数组
一个迭代器
一个生成器
请注意,Scikit-learn 估计器和函数的输出(例如预测)通常应该是数组或稀疏矩阵,或者它们的列表(如多输出
tree.DecisionTreeClassifier
的predict_proba
)。一个predict()
返回列表或pandas.Series
的估计器是无效的。- 属性#
- 属性#
我们主要使用属性来指代在拟合过程中如何将模型信息存储在估计器上。存储在估计器实例上的任何公共属性都要求以字母字符开头,并在 fit 或 partial_fit 中设置时以单个下划线结尾。这些是在估计器的属性文档中记录的内容。存储在属性中的信息通常是:用于预测或转换的充分统计量;转导 输出,例如 labels_ 或 embedding_;或诊断数据,例如 feature_importances_。常见属性列在下面。
公共属性可能与构造函数参数具有相同的名称,并在后面附加一个
_
。这用于存储用户输入的已验证或估计版本。例如,decomposition.PCA
是使用n_components
参数构造的。从它,以及其他参数和数据,PCA 估计属性n_components_
。在拟合时,还可能设置用于预测/转换等的更多私有属性。这些以单个下划线开头,不保证在公共访问中保持稳定。
估计器实例上的公共属性,如果不在末尾加上下划线,则应该是相同名称的
__init__
参数 的存储的、未修改的值。由于这种等效性,这些在估计器的参数文档中记录。- 向后兼容性#
我们通常尝试在版本之间维护向后兼容性(即接口和行为可以扩展,但不能更改或删除),但这有一些例外
- 仅限公共 API
通过私有标识符(以
_
开头的标识符)访问的对象的行为可能会在不同版本之间任意更改。- 如文档所述
我们通常假设用户已遵守文档中规定的参数类型和范围。如果文档要求提供列表,而用户提供元组,我们不保证不同版本之间的一致行为。
- 弃用
- 关键字参数
我们有时可能会假设所有可选参数(除了fit和类似方法的 X 和 y 之外)都仅作为关键字参数传递,并且位置可能重新排序。
- 错误修复和增强
错误修复和(不太常见)增强可能会改变估计器的行为,包括在相同数据上训练的估计器的预测和random_state。发生这种情况时,我们会尝试在变更日志中清楚地记录它。
- 序列化
我们不保证在一个版本中对估计器进行腌制能够使其在后续版本中被解腌制为等效模型。(对于 sklearn 包中的估计器,即使解腌制可能有效,我们也会在尝试解腌制时发出警告。)请参阅安全性和可维护性限制。
utils.estimator_checks.check_estimator
我们为估计器检查提供有限的向后兼容性保证:我们可能会对使用此函数测试的估计器添加额外的要求,通常是在这些要求非正式地假设但未正式测试时。
尽管我们与用户之间存在这种非正式协议,但软件按原样提供,如许可证中所述。当版本意外引入不向后兼容的更改时,这些更改被称为软件回归。
- 可调用#
一个函数、类或实现
__call__
方法的对象;任何在callable()的参数为真时返回真的对象。- 分类特征#
分类或名义特征是指在数据总体中具有有限数量离散值的特征。这些通常表示为整数或字符串的列。大多数 scikit-learn 估计器将拒绝字符串,并将整数视为序数或计数值。为了与大多数估计器一起使用,分类变量应该进行独热编码。值得注意的例外包括基于树的模型,例如随机森林和梯度提升模型,这些模型通常在使用整数编码的分类变量时表现更好且更快。
OrdinalEncoder
有助于将字符串值分类特征编码为序数整数,而OneHotEncoder
可用于对分类特征进行独热编码。另请参阅编码分类特征和categorical-encoding包,以获取与编码分类特征相关的工具。- 克隆#
- 克隆的#
使用
clone
复制估计器实例并创建一个具有相同参数但没有任何拟合属性的新实例。当调用
fit
时,元估计器通常会在拟合克隆实例之前克隆包装的估计器实例。(由于遗留原因,例外情况包括Pipeline
和FeatureUnion
。)如果估计器的
random_state
参数是整数(或者如果估计器没有random_state
参数),则返回精确克隆:克隆和原始估计器将给出完全相同的结果。否则,将返回统计克隆:克隆可能与原始估计器产生不同的结果。更多详细信息可以在控制随机性中找到。- 通用测试#
这指的是在 Scikit-learn 中几乎每个估计器类上运行的测试,以检查它们是否符合基本的 API 约定。它们可以通过
utils.estimator_checks.check_estimator
供外部使用,大部分实现位于sklearn/utils/estimator_checks.py
中。注意:通用测试机制的一些例外目前在库中是硬编码的,但我们希望通过使用语义估计器标签在估计器上标记异常行为来替换它。
- 交叉拟合#
- 交叉拟合#
一种重采样方法,它迭代地将数据划分为相互排斥的子集以拟合两个阶段。在第一阶段,相互排斥的子集允许在训练期间未见的数据上计算预测或转换。然后,计算出的数据用于第二阶段。目标是避免第一阶段的任何过拟合引入第二阶段输入数据分布的偏差。有关其用法的示例,请参阅:
TargetEncoder
、StackingClassifier
、StackingRegressor
和CalibratedClassifierCV
。- 交叉验证#
- 交叉验证#
一种重采样方法,它迭代地将数据划分为相互排斥的“训练”和“测试”子集,以便可以在未见的数据上评估模型性能。这节省了数据,因为它避免了需要保留“验证”数据集,并且由于通常执行多轮交叉验证,因此考虑了可变性。有关更多详细信息,请参阅用户指南。
- 弃用#
我们使用弃用以缓慢地违反我们的向后兼容性保证,通常是为了
更改参数的默认值;或者
删除参数、属性、方法、类等。
我们通常会在使用已弃用元素时发出警告,但可能存在一些限制。例如,当有人设置已弃用的参数时,我们会发出警告,但当他们访问估计器实例上的该参数的属性时,可能不会发出警告。
参见 贡献者指南。
- 维度#
可用于指代 特征(即 n_features)的数量,或二维特征矩阵中的列数。但是,维度也用于指代 NumPy 数组形状的长度,区分一维数组和二维矩阵。
- 文档字符串#
模块、类、函数等的嵌入式文档,通常在代码中作为字符串出现在对象的定义开头,并可作为对象的
__doc__
属性访问。我们尝试遵守 PEP257,并遵循 NumpyDoc 约定。
- 双下划线#
- 双下划线表示法#
在为嵌套估计器指定参数名称时,
__
可用于在某些情况下分隔父级和子级。最常见的用法是在使用 set_params 通过元估计器设置参数时,因此在 参数搜索 中指定搜索网格时。参见 参数。它也用于pipeline.Pipeline.fit
中,用于将 样本属性 传递给管道中估计器的fit
方法。- 数据类型#
- 数据类型#
NumPy 数组假设整个数组(或稀疏矩阵)的
.dtype
属性中存在同质数据类型。我们通常假设 scikit-learn 数据的简单数据类型:浮点数或整数。我们可能在编码或向量化之前支持数组的对象或字符串数据类型。我们的估计器不适用于结构化数组,例如。我们的文档有时会提供有关 dtype 精度的信息,例如
np.int32
、np.int64
等。当提供精度时,它指的是 NumPy dtype。如果使用任意精度,则文档将引用 dtypeinteger
或floating
。请注意,在这种情况下,精度可能与平台相关。numeric
dtype 指的是接受integer
和floating
。在 64 位 dtype(即
np.float64
和np.int64
)和 32 位 dtype(即np.float32
和np.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
是一个估计器类,而est1
和est2
是实例。cls = RandomForestClassifier est1 = cls() est2 = RandomForestClassifier()
- 示例#
我们尝试为 API 中大多数函数和类提供基本用法的示例
作为它们文档字符串中的 doctests(即在
sklearn/
库代码本身中)。作为 示例库 中的示例(使用 sphinx-gallery)从
examples/
目录中的脚本渲染,举例说明估计器/函数的关键特性或参数。这些也应该从用户指南中引用。有时在 用户指南(从
doc/
构建)中与估计器的技术描述一起。
- 实验性#
实验性工具已经可以使用,但其公共 API(例如默认参数值或拟合属性)在未来版本中仍然可能发生更改,而不会出现通常的 弃用 警告策略。
- 评估指标#
- 评估指标#
评估指标衡量模型的性能。我们可能会专门使用此术语来指代
metrics
中的函数(不考虑pairwise
),与 score 方法和交叉验证中使用的 scoring API 不同。参见 指标和评分:量化预测的质量.这些函数通常接受一个基本事实(或评估没有基本事实的聚类的原始数据)和一个预测,无论是 predict (
y_pred
)、predict_proba (y_proba
) 还是任意评分函数(包括 decision_function (y_score
))的输出。如果更高的分数表示更好的模型,则函数通常命名为以_score
结尾;如果更低的分数表示更好的模型,则函数通常命名为以_loss
结尾。这种接口的多样性促使了评分 API 的出现。请注意,一些估计器可以计算
metrics
中未包含的指标,这些指标是特定于估计器的,尤其是模型似然。一项提议的功能(例如 #8022),通过一组语义标签来描述估计器的功能。这将根据估计器检查启用一些运行时行为,但它也允许对每个估计器进行适当不变性的测试,同时将其从其他 通用测试 中排除。
估计器标签的某些方面目前通过 鸭子类型(例如
predict_proba
等方法)以及估计器对象上的一些特殊属性来确定。_estimator_type
#此字符串值属性将估计器标识为分类器、回归器等。它由诸如
base.ClassifierMixin
之类的混合类设置,但需要在 元估计器 上更明确地采用。它的值通常应该通过诸如base.is_classifier
之类的帮助程序进行检查。
有关更详细的信息,请参见 估计器标签.
- 特征#
- 特征#
- 特征向量#
抽象地说,特征是一个函数(在数学意义上),将采样对象映射到数值或分类量。“特征”也常用于指代这些量,即表示样本的向量的各个元素。在数据矩阵中,特征表示为列:每列包含将特征函数应用于一组样本的结果。
在其他地方,特征被称为属性、预测器、回归器或自变量。
scikit-learn 中几乎所有估计器都假设特征是数值的、有限的且不缺失,即使它们在语义上具有不同的域和分布(分类、序数、计数值、实值、区间)。另请参见 分类特征 和 缺失值.
n_features
指示数据集中的特征数量。- 拟合#
在估计器上调用 fit(或 fit_transform、fit_predict 等)。
- 拟合#
估计器在 拟合 后的状态。
没有检查估计器是否已拟合的常规程序。但是,未拟合的估计器
在调用预测方法(predict、transform 等)时应引发
exceptions.NotFittedError
。(utils.validation.check_is_fitted
在内部用于此目的。)不应有任何以字母字符开头并以下划线结尾的 属性。(请注意,属性的描述符可能仍然存在于类上,但 hasattr 应该返回 False)
- 函数#
我们为许多算法提供了临时函数接口,而 估计器 类提供了更一致的接口。
特别是,Scikit-learn 可能提供一个函数接口,该接口将模型拟合到某些数据并返回学习到的模型参数,如
linear_model.enet_path
。对于转导模型,这也将返回嵌入或聚类标签,如manifold.spectral_embedding
或cluster.dbscan
。许多预处理转换器也提供函数接口,类似于调用 fit_transform,如preprocessing.maxabs_scale
。用户应注意避免在使用这些fit_transform
等效函数时出现 数据泄漏。我们没有关于何时提供或何时不提供估计器的函数形式的严格策略,但维护人员应考虑与现有接口的一致性,以及提供函数是否会导致用户偏离最佳实践(关于数据泄漏等)。
- gallery#
参见 示例。
- 超参数#
- 超参数#
参见 参数。
- 插补#
- 插补#
大多数机器学习算法要求其输入没有 缺失值,如果违反此要求,则无法正常工作。尝试填充(或插补)缺失值的算法称为插补算法。
- 可索引的#
- 归纳#
- 归纳的#
归纳(与 转导 相比)机器学习构建了某些数据的模型,然后可以将其应用于新实例。Scikit-learn 中的大多数估计器都是归纳的,具有 预测 和/或 转换 方法。
- joblib#
一个 Python 库(https://joblib.readthedocs.io)用于 Scikit-learn 中以促进简单的并行处理和缓存。Joblib 面向有效地处理 numpy 数组,例如通过使用 内存映射。有关更多信息,请参见 并行处理。
- 标签指示矩阵#
- 多标签指示矩阵#
- 多标签指示矩阵#
用于表示多标签数据的格式,其中二维数组或稀疏矩阵的每一行对应一个样本,每一列对应一个类别,每个元素如果样本被标记为该类别则为 1,否则为 0。
- 泄漏#
- 数据泄漏#
交叉验证中出现的一个问题,其中泛化性能可能被高估,因为测试数据的知识无意中包含在训练模型中。例如,当将 转换器 应用于整个数据集而不是交叉验证拆分中的每个训练部分时,这是一种风险。
我们的目标是提供接口(例如
pipeline
和model_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
- 在线学习#
模型通过在对相应的数据批次进行预测后不久接收每个批次的真实 目标 来迭代更新。本质上,模型必须在每个批次后可用于预测。参见 部分拟合。
- 离线#
一种效率策略,其中并非所有数据都一次存储在主内存中,通常通过对数据批次执行学习来实现。参见 部分拟合。
- 输出#
的 目标 中每个样本的单个标量/分类变量。例如,在多标签分类中,每个可能的标签对应于一个二进制输出。也称为响应、任务或目标。参见 多类多输出 和 连续多输出。
- 对#
长度为 2 的元组。
- 参数#
- 参数#
- 参数#
- 参数#
我们主要使用参数来指代可以在估计器构造中指定的估计器的方面。例如,
max_depth
和random_state
是RandomForestClassifier
的参数。估计器构造函数的参数将未修改地存储为估计器实例上的属性,并且通常以字母字符开头,以字母数字字符结尾。每个估计器的构造函数参数在估计器的文档字符串中都有描述。我们不使用统计意义上的参数,在统计意义上,参数是指定模型的值,可以从数据中估计。我们所说的参数可能是统计学家所说的模型的超参数:用于配置模型结构的方面,通常不是直接从数据中学习的。但是,我们的参数也用于规定不影响学习模型的建模操作,例如 n_jobs 用于控制并行性。
当谈论 元估计器 的参数时,我们也可能包括元估计器包装的估计器的参数。通常,这些嵌套参数使用 双下划线 (
__
) 来区分估计器作为参数及其参数。因此clf = BaggingClassifier(estimator=DecisionTreeClassifier(max_depth=3))
具有一个深度参数estimator__max_depth
,其值为3
,可以通过clf.estimator.max_depth
或clf.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 通常通过将
metric
、affinity
或kernel
参数设置为字符串“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#
- SLEPs#
对 API 原则的更改以及对依赖项或支持版本的更改通过 SLEP 进行,并遵循 Scikit-learn 治理和决策 中概述的决策过程。对于所有投票,提案必须在投票之前公开发布并讨论。此类提案必须是一份综合文件,以“Scikit-Learn 增强提案”(SLEP)的形式,而不是在问题上进行长时间的讨论。SLEP 必须作为拉取请求提交给 增强提案,使用 SLEP 模板。
- 半监督#
- 半监督学习#
- 半监督#
- 稀疏矩阵#
- 稀疏图#
二维数值数据的表示,与相应的密集 NumPy 数组相比,它更节省内存,其中几乎所有元素都为零。我们使用
scipy.sparse
框架,它提供了多种底层的稀疏数据表示,或称格式。某些格式比其他格式更适合特定任务,当特定格式提供特殊优势时,我们会尝试在 Scikit-learn 参数描述中记录这一事实。一些稀疏矩阵格式(特别是 CSR、CSC、COO 和 LIL)区分隐式零和显式零。显式零被存储(即它们在
data
数组中占用内存)在数据结构中,而隐式零对应于在显式存储中未定义的每个元素。Scikit-learn 中使用两种稀疏矩阵语义
- 矩阵语义
稀疏矩阵被解释为一个数组,其中隐式零和显式零被解释为数字 0。这是最常采用的解释,例如,当稀疏矩阵用于特征矩阵或多标签指示矩阵时。
- 图语义
与
scipy.sparse.csgraph
一样,显式零被解释为数字 0,但隐式零表示掩盖或缺失的值,例如图中两个顶点之间不存在边,而显式值表示边的权重。这种解释被用来表示聚类中的连接性,在最近邻表示中(例如neighbors.kneighbors_graph
),以及在仅需要每个点邻域中的距离的预计算距离表示中。
在处理稀疏矩阵时,我们假设它出于某种原因是稀疏的,并避免编写将用户提供的稀疏矩阵稠密化的代码,而是保持稀疏性,或者如果不可能(即如果估计器不支持/不能支持稀疏矩阵)则引发错误。
- 无状态#
如果估计器不存储在拟合期间获得的任何信息,则该估计器是无状态的。此信息可以是在拟合期间学习的参数或从训练数据中计算的统计信息。如果估计器没有属性,除了在
__init__
中设置的属性之外,则该估计器是无状态的。对这些估计器调用拟合只会验证在__init__
中传递的公共属性。- 监督#
- 监督学习#
- 目标#
- 目标#
在监督(和半监督)学习中的因变量,作为y传递给估计器的拟合方法。也称为因变量、结果变量、响应变量、真实值或标签。Scikit-learn 使用结构最少的目标:来自有限集的类、有限实数值、多个类或多个数字。参见目标类型。
- 转导#
- 转导式#
转导式(与归纳式对比)机器学习方法旨在对特定数据集进行建模,但不将该模型应用于未见过的數據。例如
manifold.TSNE
、cluster.AgglomerativeClustering
和neighbors.LocalOutlierFactor
。- 未标记#
- 未标记数据#
- 无监督#
- 无监督学习#
学习在拟合模型时,每个样本的预期预测(标签或真实值)都不可用,如在聚类器和异常值检测器中。无监督估计器会忽略传递给拟合的任何y。
类 API 和估计器类型#
- 分类器#
- 分类器#
-
分类器支持对二元、多类、多标签或多类多输出目标进行建模。在 scikit-learn 中,所有分类器都支持多类分类,默认情况下使用对二元分类问题的“一对多”策略。
分类器必须在拟合后存储classes_属性,通常继承自
base.ClassifierMixin
,它设置了它们的_estimator_type属性。可以使用
is_classifier
区分分类器和其他估计器。分类器必须实现
- 聚类器#
- 聚类器#
-
聚类器通常在拟合后存储labels_,如果它是转导式,则必须这样做。
聚类器必须实现
- 密度估计器#
输入概率密度函数的无监督估计。常用的技术是
- 估计器#
- 估计器#
一个管理模型估计和解码的对象。模型被估计为
参数的确定性函数,这些参数在对象构造或使用 set_params 提供;
全局
numpy.random
随机状态,如果估计器的 random_state 参数设置为 None;以及传递给最近一次调用 fit、fit_transform 或 fit_predict 的任何数据或 样本属性,或类似地传递给一系列调用 partial_fit 的数据。
估计的模型存储在估计器实例上的公共和私有 属性 中,便于通过预测和转换方法进行解码。
估计器必须提供 fit 方法,并且应该提供 set_params 和 get_params,尽管这些通常是通过继承自
base.BaseEstimator
提供的。一些估计器的核心功能也可以作为 函数 使用。
- 特征提取器#
- 特征提取器#
一个 转换器,它接收输入,其中每个样本不表示为固定长度的 类数组 对象,并为每个样本生成一个 类数组 对象的 特征(因此对于一组样本,它是一个二维类数组)。换句话说,它(有损地)将非矩形数据表示映射到 矩形 数据。
特征提取器必须至少实现
- 元估计器#
- 元估计器#
- 元估计器#
- 元估计器#
一个 估计器,它将另一个估计器作为参数。例如
pipeline.Pipeline
、model_selection.GridSearchCV
、feature_selection.SelectFromModel
和ensemble.BaggingClassifier
。在元估计器的 fit 方法中,任何包含的估计器都应该在拟合之前被 克隆(尽管 FIXME:Pipeline 和 FeatureUnion 目前没有这样做)。对此的一个例外是,估计器可以明确地记录它接受预拟合的估计器(例如,在
feature_selection.SelectFromModel
中使用prefit=True
)。已知的一个问题是,如果元估计器被克隆,预拟合的估计器将丢失其模型。元估计器应该在预测之前调用fit
,即使所有包含的估计器都是预拟合的。在元估计器的主要行为(例如 predict 或 transform 实现)是所提供的基础估计器(或多个基础估计器)的预测/转换方法的函数的情况下,元估计器应该至少提供基础估计器提供的标准方法。在元估计器被 拟合 之前,可能无法识别哪些方法是由底层估计器提供的(另见 鸭子类型),为此
utils.metaestimators.available_if
可能会有所帮助。它还应该提供(或修改)基础估计器提供的 估计器标签 和 classes_ 属性。元估计器应该注意在将数据传递给底层估计器之前尽可能少地验证数据。这节省了计算时间,并且可能例如允许底层估计器轻松处理非 矩形 的数据。
- 异常值检测器#
- 异常值检测器#
一个 无监督 二元 预测器,它对核心样本和异常样本之间的区别进行建模。
异常值检测器必须实现
归纳异常值检测器还可以实现 decision_function 以提供归一化的内点得分,其中异常值的得分低于 0。 score_samples 可以提供每个样本的非归一化得分。
- 预测器#
- 预测器#
一个支持 predict 和/或 fit_predict 的 估计器。这包括 分类器、回归器、异常值检测器 和 聚类器。
在统计学中,“预测器”指的是 特征。
- 回归器#
- 回归器#
-
回归器通常继承自
base.RegressorMixin
,它设置它们的 _estimator_type 属性。可以使用
is_regressor
区分回归器和其他估计器。回归器必须实现
- 转换器#
- 转换器#
一个支持 transform 和/或 fit_transform 的估计器。一个纯粹的 转导 转换器,例如
manifold.TSNE
,可能不实现transform
。- 向量化器#
- 向量化器#
参见 特征提取器。
还有更多专门针对一小部分估计器的 API,例如
- 交叉验证拆分器#
- CV 拆分器#
- 交叉验证生成器#
一个非估计器类家族,用于通过提供 split 和 get_n_splits 方法将数据集拆分为一系列训练和测试部分(参见 交叉验证:评估估计器性能)。请注意,与估计器不同,这些没有 fit 方法,也不提供 set_params 或 get_params。参数验证可以在
__init__
中执行。- 交叉验证估计器#
一种具有内置交叉验证功能的估计器,可以自动选择最佳超参数(参见 用户指南)。交叉验证估计器的一些示例包括
ElasticNetCV
和LogisticRegressionCV
。交叉验证估计器命名为EstimatorCV
,通常与GridSearchCV(Estimator(), ...)
相当。与使用标准的 估计器 类以及 网格搜索 相比,使用交叉验证估计器的优势在于它们可以利用热启动,在交叉验证过程的先前步骤中重用预先计算的结果。这通常会导致速度提高。一个例外是RidgeCV
类,它可以执行高效的留一法 (LOO) CV。默认情况下,除了使用 LOO-CV 的RidgeCV
之外,所有这些估计器都将在找到最佳超参数组合后,在完整的训练数据集上重新拟合。- 评分器#
一个非估计器可调用对象,它在给定的测试数据上评估估计器,并返回一个数字。与 评估指标 不同,返回的数字越大,表示分数越高。参见 评分参数:定义模型评估规则。
更多示例
tree.Criterion
元数据路由#
- 消费者#
一个消耗 元数据 的对象。此对象通常是 估计器、评分器 或 CV 拆分器。消耗元数据意味着在计算中使用它,例如使用 样本权重 来计算特定类型的分数。作为消费者并不意味着该对象总是接收特定元数据,而是意味着如果提供元数据,它可以使用它。
- 元数据#
与给定的 X 和 y 数据相关的,但不是数据本身的一部分的数据,例如 样本权重 或 分组,并传递给不同的对象和方法,例如传递给 评分器 或 CV 拆分器。
- 路由器#
一个将元数据路由到 消费者 的对象。此对象通常是 元估计器,例如
Pipeline
或GridSearchCV
。一些路由器也可以是消费者。例如,当元估计器使用给定的 分组 时,它也会将分组传递给其一些子对象,例如 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 中,所有支持二元分类的估计器也支持多类分类,默认情况下使用 One-vs-Rest。
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
#在已拟合的分类器或异常值检测器中,预测每个样本相对于每个类别的“软”分数,而不是由预测产生的“硬”分类预测。它的输入通常只是一些观察到的数据,X。
如果估计器尚未拟合,调用此方法应该会引发
exceptions.NotFittedError
。输出约定
- 二元分类
一维数组,其中严格大于零的值表示正类(即classes_中的最后一个类)。
- 多类分类
二维数组,其中按行取最大值的索引是预测的类别。列按classes_排序。
- 多标签分类
Scikit-learn 在其多标签决策函数的表示方面不一致。它可以用两种方式表示其一
二维数组列表,每个数组的形状为:(
n_samples
, 2),类似于多类多输出。列表的长度为n_labels
。形状为 (
n_samples
,n_labels
) 的单个二维数组,其中数组中的每个“列”对应于单个二元分类决策。这与多类分类格式相同,但语义不同:它应该像二元情况一样解释,通过在 0 处进行阈值处理。
- 多输出分类
二维数组列表,对应于每个多类决策函数。
- 异常值检测
一维数组,其中大于或等于零的值表示内点。
fit
#每个估计器都提供
fit
方法。它通常需要一些样本X
,目标y
(如果模型是监督的),以及其他样本属性,例如sample_weight。它应该清除存储在估计器上的任何先前属性,除非使用warm_start;
验证和解释任何参数,理想情况下在无效时引发错误;
验证输入数据;
从估计的参数和提供的數據中估计和存储模型属性;以及
返回现在已拟合的估计器,以方便方法链接。
目标类型描述了
y
的可能格式。fit_predict
#特别用于无监督、转导估计器,它拟合模型并返回训练数据的预测(类似于预测)。在聚类器中,这些预测也存储在labels_属性中,
.fit_predict(X)
的输出通常等效于.fit(X).predict(X)
。fit_predict
的参数与fit
的参数相同。fit_transform
#在 转换器 上的一种方法,它拟合估计器并返回转换后的训练数据。它接受与 拟合 中相同的参数,其输出应与调用
.fit(X, ...).transform(X)
的形状相同。尽管如此,在某些罕见情况下,.fit_transform(X, ...)
和.fit(X, ...).transform(X)
不会返回相同的值,在这种情况下,需要以不同的方式处理训练数据(例如,由于堆叠集成中的模型混合;此类情况应有明确的文档记录)。半监督 转换器也可以提供fit_transform
但不提供 转换。实现
fit_transform
的一个原因是,单独执行fit
和transform
比一起执行效率低。base.TransformerMixin
提供了一个默认实现,为转换器提供了一个一致的接口,其中fit_transform
是专门的或不是专门的。在 归纳 学习中 - 目标是学习一个可以应用于新数据的通用模型 - 用户应注意不要将
fit_transform
应用于整个数据集(即训练数据和测试数据一起)在进一步建模之前,因为这会导致 数据泄漏。get_feature_names_out
#主要用于 特征提取器,但也用于其他转换器,为估计器 转换 方法的输出中的每一列提供字符串名称。它输出一个字符串数组,并且可以接受一个字符串的数组作为输入,对应于可以从中生成输出列名的输入列的名称。如果未传入
input_features
,则将使用feature_names_in_
属性。如果未定义feature_names_in_
属性,则输入名称将命名为[x0, x1, ..., x(n_features_in_ - 1)]
。get_n_splits
#在 交叉验证拆分器(不是估计器)上,返回如果遍历 拆分 的返回值(给定相同的参数)将获得的元素数量。接受与拆分相同的参数。
get_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’} 之一)。尽管如此,即使传递给 拟合 的y
是列表或其他类似数组,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 相似,除了在 二元 分类情况下,每个类别输出一列(而
decision_function
输出一个 1d 数组)。对于二元和多元预测,每行应加起来为 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 分割器(不是估计器)上,此方法接受参数 (X,y,groups),其中所有参数都是可选的,并返回一个迭代器,迭代器遍历
(train_idx, test_idx)
对。每个 {train,test}_idx 都是一个 1d 整数数组,其值从 0 到X.shape[0] - 1
,任何长度,这样就不会有值同时出现在某个train_idx
和其对应的test_idx
中。transform
#在 转换器 中,将输入(通常只是 X)转换为某个转换空间(通常表示为 Xt)。输出是一个长度为 n_samples 的数组或稀疏矩阵,并且在 拟合 后列数固定。
如果估计器尚未拟合,调用此方法应该会引发
exceptions.NotFittedError
。
参数#
这些常见的参数名称,特别是在估计器构造中使用(参见概念 参数),有时也作为函数或非估计器构造函数的参数出现。
class_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.ClassifierChain
或calibration.CalibratedClassifierCV
等估计器中可用,这些估计器使用一个估计器的预测作为另一个估计器的训练数据,以避免过度拟合训练监督。用于
cv
的可能输入通常是一个整数,指定 K 折交叉验证中的折数。如果估计器是分类器(由
base.is_classifier
确定),并且 目标 可能代表二元或多元(但不是多输出)分类问题(由utils.multiclass.type_of_target
确定),则 K 折将对类别进行分层。一个生成训练/测试拆分的可迭代对象。
除了某些例外情况(尤其是在根本不使用交叉验证的情况下),默认值为 5 折。
cv
值将使用model_selection.check_cv
进行验证和解释。kernel
#指定内核方法算法要使用的内核函数。例如,估计器
svm.SVC
和gaussian_process.GaussianProcessClassifier
都具有一个kernel
参数,该参数接受要使用的内核的名称作为字符串或用于计算内核矩阵的可调用内核函数。有关更多参考,请参阅 内核近似 和 高斯过程 用户指南。max_iter
#对于涉及迭代优化的估计器,这将确定在 拟合 中执行的最大迭代次数。如果在收敛之前运行了
max_iter
次迭代,则应引发exceptions.ConvergenceWarning
。请注意,“一次迭代”的解释在估计器之间不一致:有些(但不是全部)使用它来表示一次时期(即对数据中每个样本的遍历)。FIXME 也许我们应该对 ConvergenceWarning 和 max_iter 之间的关系进行一些通用测试。
memory
#一些估计器使用
joblib.Memory
在拟合过程中存储部分解决方案。因此,当再次调用fit
时,这些部分解决方案已被记忆并可以重复使用。可以将
memory
参数指定为带有目录路径的字符串,或者可以使用joblib.Memory
实例(或具有类似接口的对象,即cache
方法)。memory
值将使用utils.validation.check_memory
进行验证和解释。metric
#作为参数,这是确定两个数据点之间距离的方案。见
metrics.pairwise_distances
。实际上,对于某些算法,可能会使用不合适的距离度量(不遵守三角不等式,例如余弦距离)。XXX:层次聚类使用
affinity
具有此含义。我们还使用 *metric* 来指代 评估指标,但避免将此意义用作参数名称。
n_components
#一个 转换器 应该将输入转换为的特征数量。有关仿射投影的特殊情况,请参阅 components_。
n_iter_no_change
#在停止迭代过程之前等待无改进的迭代次数。这也被称为 *patience* 参数。它通常与 提前停止 一起使用,以避免过早停止。
n_jobs
#此参数用于指定应使用多少个并发进程或线程来执行使用 joblib 并行化的例程。
n_jobs
是一个整数,指定并发运行的 worker 的最大数量。如果给出 1,则根本不使用 joblib 并行性,这对于调试很有用。如果设置为 -1,则使用所有 CPU。对于n_jobs
小于 -1,则使用 (n_cpus + 1 + n_jobs)。例如,使用n_jobs=-2
,将使用除一个之外的所有 CPU。n_jobs
默认情况下为None
,这意味着 *未设置*;它通常会被解释为n_jobs=1
,除非当前的joblib.Parallel
后端上下文另有说明。请注意,即使
n_jobs=1
,在某些配置中也可能会使用低级并行性(通过 Numpy 和 OpenMP)。有关
joblib
的使用及其与 scikit-learn 的交互的更多详细信息,请参阅我们的 并行性说明。pos_label
#在二元分类问题中,正类标签必须编码的值,其中不假设正类。此值通常需要计算非对称评估指标,例如精确率和召回率。
random_state
#只要随机化是 Scikit-learn 算法的一部分,就可以提供
random_state
参数来控制使用的随机数生成器。请注意,random_state
的存在并不意味着始终使用随机化,因为它可能取决于另一个参数(例如shuffle
)的设置。传递的值将影响函数返回结果的可重复性(fit、split 或任何其他类似于
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
接受的字符串,也可以是可调用的 scorer,不要与 评估指标 混淆,因为后者具有更多样化的 API。scoring
也可以设置为 None,在这种情况下,将使用估计器的 score 方法。请参阅用户指南中的 评分参数:定义模型评估规则。在可以评估多个指标的情况下,
scoring
可以作为唯一字符串列表、以名称为键和可调用对象为值的字典,或者返回字典的可调用对象给出。请注意,这 *不* 指定要最大化的评分函数,另一个参数(如refit
)可能用于此目的。使用
metrics.check_scoring
验证和解释scoring
参数。verbose
#目前,Scikit-learn 中的日志记录处理并不一致,但当它作为选项提供时,通常可以使用
verbose
参数来选择不进行日志记录(设置为 False)。任何 True 值都应启用一些日志记录,但可能需要更大的整数(例如,大于 10)才能实现完全详细程度。详细日志通常打印到标准输出。估计器在默认的verbose
设置下不应在标准输出上产生任何输出。warm_start
#在对同一数据集重复拟合估计器时,但对于多个参数值(例如,为了找到最大化性能的值,如 网格搜索),可能可以重复使用从先前参数值中学到的模型的某些方面,从而节省时间。当
warm_start
为真时,现有 拟合 模型 属性 用于在后续调用 fit 时初始化新模型。请注意,这仅适用于某些模型和某些参数,甚至某些参数值顺序。通常,
warm_start
与控制估计器迭代次数的参数之间存在交互作用。对于从
ensemble
导入的估计器,warm_start
将与n_estimators
或max_iter
交互。对于这些模型,通过len(estimators_)
或n_iter_
报告的迭代次数对应于自模型初始化以来学习的估计器/迭代的总数。因此,如果模型已经用N
个估计器初始化,并且fit
被调用,n_estimators
或max_iter
设置为M
,则模型将训练M - N
个新估计器。其他模型,通常使用基于梯度的求解器,具有不同的行为。它们都公开了一个
max_iter
参数。报告的n_iter_
对应于上次调用fit
时完成的迭代次数,最多为max_iter
。因此,我们不考虑自初始化以来估计器的状态。partial_fit 也保留了调用之间的模型,但有所不同:使用
warm_start
,参数会发生变化,并且数据在对fit
的调用中(或多或少)保持不变;使用partial_fit
,数据的小批量会发生变化,而模型参数保持固定。在某些情况下,您希望使用
warm_start
来拟合不同的但密切相关的数据。例如,可以先拟合数据子集,然后在完整数据集上微调参数搜索。对于分类,warm_start
对fit
的一系列调用中的所有数据都必须包含来自每个类的样本。
属性#
请参阅概念 attribute。
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
#每个样本的相对权重。直观地说,如果所有权重都是整数,则加权模型或分数应该等效于在重复样本指定权重次数时计算的模型或分数。权重可以指定为浮点数,因此样本权重通常等效于一个恒定的正缩放因子。
FIXME 在实践中,这种解释是否总是正确的?我们没有共同的测试。
一些估计器(如决策树)支持负权重。FIXME:此功能或其缺失可能未在许多估计器中进行测试或记录。
情况并非完全如此,因为模型的其他参数会考虑某个区域中的样本数量,例如
cluster.DBSCAN
中的min_samples
。在这种情况下,样本计数将变为其权重的总和。在分类中,样本权重也可以通过 class_weight 估计器 参数 指定为类的函数。
X
#表示在训练和预测时观察到的数据,用作学习中的自变量。符号为大写,表示它通常是一个矩阵(请参阅 矩形)。当为矩阵时,每个样本可以用 特征 向量或与每个训练样本的 预计算(不)相似性向量表示。
X
也可能不是矩阵,可能需要 特征提取器 或 成对度量 将其转换为矩阵,然后才能学习模型。Xt
#“转换后的 X”的简写。
y
#Y
#表示可能在训练时观察到的数据,作为学习中的因变量,但在预测时不可用,通常是预测的 目标。符号可能为大写,表示它是一个矩阵,表示 多输出 目标,例如;但通常我们使用
y
,即使在假设多个输出时也是如此。