常用术语和 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
它不包括
稀疏数组
迭代器
生成器
请注意,来自 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训练的估计器的预测。发生这种情况时,我们会尝试在变更日志中清楚地注明。
- 序列化
我们不保证在一个版本中对估计器进行pickle操作能够使其在后续版本中被解pickle为等效模型。(对于sklearn包中的估计器,即使它可能有效,我们也会在尝试此解pickle操作时发出警告。)参见安全与可维护性限制。
utils.estimator_checks.check_estimator
我们对估计器检查提供的向后兼容性保证有限:我们可能会对使用此函数测试的估计器添加额外的要求,通常是在非正式假设但未正式测试的情况下。
尽管我们与用户之间存在这种非正式约定,但软件按原样提供,如许可证中所述。当发行版无意中引入与向后不兼容的更改时,这些更改被称为软件回归。
- 可调用对象#
实现
__call__
方法的函数、类或对象;当callable()的参数返回True时,任何对象。- 类别特征#
类别或名义特征是指在数据总体中具有有限的离散值集的特征。这些通常表示为整数或字符串列。大多数scikit-learn估计器将拒绝字符串,并将整数视为序数或计数值。对于大多数估计器的使用,类别变量应进行独热编码。值得注意的例外包括基于树的模型,例如随机森林和梯度提升模型,这些模型通常在使用整数编码的类别变量时效果更好且速度更快。
OrdinalEncoder
有助于将字符串值类别特征编码为序数整数,而OneHotEncoder
可用于对类别特征进行独热编码。另见编码类别特征和categorical-encoding包,了解与编码类别特征相关的工具。- 克隆#
- 克隆的#
使用
clone
复制估计器实例并创建一个具有相同参数的新实例,但不包含任何已拟合的属性。调用
fit
时,元估计器通常会在拟合克隆实例之前克隆包装的估计器实例。(出于遗留原因,例外情况包括Pipeline
和FeatureUnion
。)如果估计器的
random_state
参数是整数(或者估计器没有random_state
参数),则返回一个精确克隆:克隆和原始估计器将给出完全相同的结果。否则,返回统计克隆:克隆可能会产生与原始估计器不同的结果。更多详细信息可在控制随机性中找到。- 通用测试#
这指的是在 Scikit-learn 中几乎每个估计器类上运行的测试,以检查它们是否符合基本的 API 约定。可以通过
utils.estimator_checks.check_estimator
或utils.estimator_checks.parametrize_with_checks
进行外部使用,大部分实现位于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 中的大多数函数和类提供基本用法的示例。
作为其文档字符串中的 doctest(即在
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
中未包含的指标,这些指标是特定于估计器的,特别是模型似然。估计器标签描述了估计器的某些功能。这将根据估计器检查启用某些运行时行为,但它也允许对每个估计器进行适当不变性的测试,同时将其排除在其他通用测试之外。
估计器标签的某些方面目前是通过
predict_proba
等方法的鸭子类型以及估计器对象上的一些特殊属性来确定的。有关更详细的信息,请参见估计器标签。
- 特征#
- 特征#
- 特征向量#
抽象地说,特征是一个函数(在数学意义上),它将采样对象映射到数值或类别量。“特征”也常用于指代这些量,它们是表示样本的向量的单个元素。在数据矩阵中,特征表示为列:每一列都包含将特征函数应用于一组样本的结果。
在其他地方,特征被称为属性、预测变量、回归变量或自变量。
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
等效函数时发生数据泄漏。我们没有关于何时提供或不提供估计器的函数形式的严格策略,但维护者应考虑与现有接口的一致性,以及提供函数是否会误导用户偏离最佳实践(关于数据泄漏等)。
- 图库#
见示例。
- 超参数#
- 超参数#
见参数。
- 插补#
- 插补#
大多数机器学习算法要求其输入没有缺失值,如果违反此要求,则无法工作。尝试填充(或插补)缺失值的算法被称为插补算法。
- 可索引的#
- 归纳#
- 归纳的#
归纳式(与转导式相对)机器学习构建某些数据的模型,然后可以将其应用于新实例。Scikit-learn 中的大多数估计器都是归纳式的,具有predict和/或transform方法。
- Joblib#
Scikit-learn 中用于促进简单并行处理和缓存的 Python 库(https://joblib.readthedocs.io)。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
- 在线学习#
模型通过在对相应的数据批次进行预测后不久接收每一批真实目标值 来迭代更新。从本质上讲,模型必须在每个批次之后都可用于预测。参见 partial_fit。
- 核心外#
一种效率策略,其中并非所有数据都同时存储在主内存中,通常通过对数据批次执行学习来实现。参见 partial_fit。
- 输出#
目标变量中每个样本的单个标量/分类变量。例如,在多标签分类中,每个可能的标签对应于一个二元输出。也称为 *响应*、*任务* 或 *目标*。参见 多类别多输出 和 连续多输出。
- 对#
长度为二的元组。
- 参数#
- 参数#
- 参数#
- 参数#
我们主要使用 *参数* 来指代可以在估计器构建中指定的估计器的各个方面。例如,
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#
- 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 传递给估计器的 fit 方法的因变量。也称为因变量、结果变量、响应变量、真实值或标签。Scikit-learn 使用结构最少的目标:来自有限集的类、有限实数值、多个类或多个数字。请参见 目标类型。
- 转导#
- 转导的#
转导(与 归纳 相反)机器学习方法旨在对特定数据集进行建模,但不将该模型应用于未见数据。示例包括
manifold.TSNE
、cluster.AgglomerativeClustering
和neighbors.LocalOutlierFactor
。- 未标记#
- 未标记数据#
- 无监督#
- 无监督学习#
在拟合模型时,学习每个样本的预期预测(标签或真实值)不可用的情况,就像在聚类器和异常值检测器中一样。无监督估计器会忽略传递给fit的任何y。
类 API 和估计器类型#
- 分类器#
- 分类器#
-
分类器支持对一些二元、多类、多标签或多类多输出目标进行建模。在 scikit-learn 中,所有分类器都支持多类分类,默认情况下使用针对二元分类问题的“一对多”策略。
分类器必须在拟合后存储classes_属性,并继承自
base.ClassifierMixin
,这将正确设置其相应的估计器标签。可以使用
is_classifier
将分类器与其他估计器区分开来。分类器必须实现
- 聚类器#
- 聚类器#
-
聚类器通常在拟合后存储labels_,如果它是直推式的,则必须这样做。
聚类器必须实现
如果直推式,则实现fit_predict
- 密度估计器#
输入概率密度函数的无监督估计。常用技术包括
- 估计器#
- 估计器#
管理模型的估计和解码的对象。模型被估计为以下内容的确定性函数:
在对象构造中或使用set_params提供的参数;
如果估计器的random_state参数设置为 None,则为全局
numpy.random
随机状态;以及传递给最近一次调用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_属性。元估计器应注意在将数据传递给底层估计器之前尽可能少地验证数据。这节省了计算时间,并且例如,可能允许底层估计器轻松处理非矩形数据。
- 异常值检测器#
- 异常值检测器#
一种无监督的二元预测器,它模拟核心样本和异常样本之间的区别。
异常值检测器必须实现
如果直推式,则实现fit_predict
归纳异常值检测器还可以实现decision_function以给出标准化的内点分数,其中异常值的得分低于0。score_samples可以为每个样本提供非标准化分数。
- 预测器#
- 预测器#
支持predict和/或fit_predict的估计器。这包括分类器、回归器、异常值检测器和聚类器。
在统计学中,“预测器”指的是特征。
- 回归器#
- 回归器#
-
回归器继承自
base.RegressorMixin
,它可以正确设置其估计器标签。可以使用
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) 交叉验证。默认情况下,除了使用 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 中,所有支持二元分类的估计器也支持多类别分类,默认情况下使用一对多策略。
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
的一个原因是,分别执行fit
和transform
的效率不如一起执行。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’}之一)。尽管如此,即使传递给fit的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
输出的是一个一维数组)。对于二元和多元预测,每一行的和应该为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 中的每一个都是一个一维整数数组,其值为从 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.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
。请注意,“一次迭代”的解释在不同的估计器之间是不一致的:有些(但并非所有)估计器将其解释为一个时期(即对数据中每个样本的一次遍历)。待办事项:也许我们应该对 ConvergenceWarning 和 max_iter 之间的关系进行一些通用的测试。
memory
#一些估计器利用
joblib.Memory
在拟合过程中存储部分解决方案。因此,当再次调用fit
时,这些部分解决方案已被记忆并可以重复使用。可以将
memory
参数指定为带目录路径的字符串,或者可以使用joblib.Memory
实例(或具有类似接口的对象,即cache
方法)。使用
utils.validation.check_memory
对memory
值进行验证和解释。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_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
的一系列调用中的所有数据都必须包含来自每个类别的样本。
属性#
参见概念 属性。
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
,有时即使假设多个输出也是如此。