常见术语和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
其他数组 API 输入,但请参阅 数组 API 支持(实验性) 以了解使用这些输入的首选方法
它排除
一个 稀疏矩阵
一个稀疏数组
一个迭代器
一个生成器
请注意,scikit-learn估计器和函数的 输出 (例如预测)通常应为数组或稀疏矩阵,或其列表(如多输出
tree.DecisionTreeClassifier的predict_proba)。predict()返回列表或pandas.Series的估计器无效。- 属性#
- 属性#
我们主要使用属性来指在拟合过程中模型信息如何存储在估计器上。任何存储在估计器实例上的公共属性必须以字母字符开头,并且如果在 fit 或 partial_fit 中设置,则以单个下划线结尾。这些是估计器 Attributes 文档中记录的内容。存储在属性中的信息通常是:用于预测或转换的足够统计量;转导 输出,如 labels_ 或 embedding_;或诊断数据,如 feature_importances_。常见属性列在 下方。
公共属性可能与构造函数 参数 具有相同的名称,并附加一个
_。这用于存储用户输入的验证或估计版本。例如,decomposition.PCA使用n_components参数构造。由此,以及其他参数和数据,PCA 估计属性n_components_。在拟合时,还可以设置用于预测/转换/等 的其他私有属性。这些属性以单个下划线开头,不保证对公共访问稳定。
估计器实例上不以下划线结尾的公共属性应该是
__init__参数 的存储的、未修改的值,该参数具有相同的名称。由于这种等效性,这些属性记录在估计器的 Parameters 文档中。- 向后兼容性#
我们通常会尝试在发布之间维护向后兼容性(即接口和行为可以扩展但不能更改或删除),但这有一些例外
- 仅公共API
通过私有标识符(以
_开头的标识符)访问的对象的行为可能会在版本之间任意更改。- 如文档所述
我们通常会假定用户遵守了文档中参数的类型和范围。如果文档要求列表而用户提供了元组,我们不保证版本之间行为一致。
- 弃用
- 关键字参数
我们有时可能会假定所有可选参数(除了 fit 和类似方法的 X 和 y)仅作为关键字参数传递,并且可能会重新排序。
- 错误修复和增强
错误修复以及——较少见——增强可能会改变估计器的行为,包括在相同数据和 random_state 上训练的估计器的预测。发生这种情况时,我们会尝试在更新日志中明确注明。
- 序列化
我们不保证在一个版本中对估计器进行pickle操作,可以在后续版本中将其unpickle为等效模型。(对于sklearn包中的估计器,当尝试进行unpickle操作时,即使它可能碰巧成功,我们也会发出警告。)请参阅 安全与可维护性限制。
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方法。- dtype#
- 数据类型#
NumPy 数组假定数据类型在整个数组中是同质的,可在数组(或稀疏矩阵)的
.dtype属性中获取。我们通常假定 scikit-learn 数据采用简单的数据类型:浮点数或整数。我们可能在编码或向量化之前支持对象或字符串数据类型。例如,我们的估计器不适用于结构化数组。我们的文档有时会提供关于dtype精度的信息,例如
np.int32、np.int64等。当提供精度时,它指的是NumPy dtype。如果使用任意精度,文档将引用dtypeinteger或floating。请注意,在这种情况下,精度可能取决于平台。numericdtype指的是接受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/库代码本身中)。作为从
examples/目录中的脚本渲染(使用 sphinx-gallery)的 示例画廊 中的示例,展示估计器/函数的关键特征或参数。这些也应该从用户指南中引用。有时在 用户指南 (从
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#
一个Python库(https://joblib.readthedocs.io),在Scikit-learn中用于促进简单的并行化和缓存。Joblib旨在高效地处理numpy数组,例如通过使用 内存映射。有关更多信息,请参阅 并行性。
- 标签指示矩阵#
- 多标签指示矩阵#
- 多标签指示矩阵#
用于表示多标签数据的格式,其中二维数组或稀疏矩阵的每一行对应一个样本,每一列对应一个类别,如果样本被标记为该类别,则每个元素为1,否则为0。
- 泄露#
- 数据泄露#
交叉验证中的一个问题,其中泛化性能可能被高估,因为测试数据的知识无意中包含在模型训练中。例如,当将 转换器 应用于整个数据集而不是交叉验证拆分中的每个训练部分时,就会存在这种风险。
我们旨在提供接口(例如
pipeline和model_selection),以保护用户免受数据泄露。- 内存映射#
- 内存映射#
- 内存映射#
一种内存效率策略,将数据保留在磁盘上,而不是将其复制到主内存中。可以使用
numpy.memmap为可读、可写或两者兼有的数组创建内存映射。当在 Scikit-learn 中使用 joblib 并行化操作时,它可能会自动内存映射大型数组以减少多处理中的内存复制开销。- 缺失值#
大多数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#
- SLEPs#
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),以及用于仅需要每个点邻域中距离的预计算距离表示。
在使用稀疏矩阵时,我们假设它是稀疏的,并且避免编写致密化用户提供的稀疏矩阵的代码,而是保持稀疏性,或者在不可能的情况下引发错误(即,如果估计器不支持/不能支持稀疏矩阵)。
- 无状态#
如果估计器不存储在 fit 期间获得的任何信息,则它是无状态的。此信息可以是 fit 期间学习的参数,也可以是从训练数据计算的统计数据。如果估计器除了在
__init__中设置的属性之外没有其他 属性,则它是无状态的。对这些估计器调用 fit 只会验证在__init__中传递的公共 属性。- 监督式#
- 监督学习#
在 拟合 模型时,每个样本都提供了预期预测(标签或真实值)的学习,作为 y。这是 分类器 或 回归器 等估计器所采用的方法。
- 目标#
- 目标#
监督式(和 半监督式)学习中的 因变量,作为 y 传递给估计器的 fit 方法。也称为 因变量、结果变量、响应变量、真实值 或 标签。Scikit-learn 处理具有最小结构的目标:来自有限集合的类别、有限实数值、多个类别或多个数字。请参阅 目标类型。
- 转导#
- 转导式#
转导式(与 归纳式 相对)机器学习方法旨在为特定数据集建模,但不会将该模型应用于未见过的数据。示例包括
manifold.TSNE、cluster.AgglomerativeClustering和neighbors.LocalOutlierFactor。- 未标记的#
- 未标记数据#
- 无监督#
- 无监督学习#
在拟合模型时,每个样本的预期预测(标签或地面实况)都不可用的学习,如在聚类器和异常值检测器中。无监督估计器会忽略传递给fit的任何y。
类API和估计器类型#
- 分类器#
- 分类器#
-
分类器支持对二元、多类、多标签或多类多输出目标中的某些进行建模。在scikit-learn中,所有分类器都支持多类分类,默认情况下使用一对多策略处理二元分类问题。
分类器在拟合后必须存储classes_属性,并继承自
base.ClassifierMixin,这会正确设置其相应的估计器标签。分类器可以通过
is_classifier与其他估计器区分开来。分类器必须实现
实现decision_function、predict_proba和predict_log_proba也可能是合适的。
- 聚类器#
- 聚类器#
-
聚类器通常在拟合后存储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方法中,任何包含的估计器在拟合之前都应该被克隆。
一个例外是,估计器可能明确声明它接受预拟合的估计器(例如,在
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)CV。默认情况下,除了使用LOO-CV的RidgeCV之外,所有这些估计器在找到最佳超参数组合后都将在整个训练数据集上重新拟合。- 评分器#
一个非估计器可调用对象,它在给定的测试数据上评估一个估计器,并返回一个数字。与评估指标不同,返回的数字越大,表示分数*越好*。请参阅评分参数:定义模型评估规则。
更多示例
tree.Criterion
元数据路由#
- 消费者#
一个消费元数据的对象。此对象通常是估计器、评分器或交叉验证分割器。消费元数据意味着在计算中使用它,例如使用sample_weight来计算某种类型的分数。作为消费者并不意味着对象总是接收到某个元数据,而是意味着如果提供了元数据,它可以使用它。
- 元数据#
与给定X和y数据相关,但不直接是数据一部分的数据,例如sample_weight或groups,并传递给不同的对象和方法,例如传递给评分器或交叉验证分割器。
- 路由器#
一个将元数据路由到消费者的对象。此对象通常是元估计器,例如
Pipeline或GridSearchCV。一些路由器也可以是消费者。例如,当元估计器使用给定的groups,并且也将其传递给其某些子对象(例如CV分割器)时,就会发生这种情况。
有关更多信息,请参阅元数据路由用户指南。
目标类型#
- 二元#
一个由两个类别组成的分类问题。二元目标可以表示为多类问题,但只有两个标签。二元决策函数表示为一维数组。
语义上,一个类别通常被认为是“正”类别。除非另有说明(例如在评估指标中使用pos_label),否则我们将值较大(数字上或字典顺序上)的类别标签视为正类别:在标签[0, 1]中,1是正类别;在[1, 2]中,2是正类别;在['no', 'yes']中,'yes'是正类别;在['no', 'YES']中,'no'是正类别。这会影响decision_function的输出,例如。
请注意,从多类
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)的数组。注意:为简单起见,我们可能不总是支持多类多输出的字符串类别标签,应使用整数类别标签。
multioutput提供了使用多个单输出估计器来估计多输出问题的估计器。这可能无法完全考虑不同输出之间的依赖关系,而原生处理多输出情况的方法(例如决策树、最近邻、神经网络)可能做得更好。type_of_target对于多类多输出输入将返回“multiclass-multioutput”。- 多标签#
- 多标签#
一种多类多输出目标,其中每个输出都是二元的。这可以表示为整数的二维(密集)数组或稀疏矩阵,其中每列是一个单独的二元目标,正标签用1表示,负标签通常用-1或0表示。稀疏多标签目标并非在所有支持密集多标签目标的地方都受支持。
从语义上讲,多标签目标可以看作是每个样本的一组标签。尽管不内部使用,但
preprocessing.MultiLabelBinarizer提供了一个实用工具,用于将列表集表示转换为二维数组或稀疏矩阵。使用preprocessing.LabelBinarizer对多类目标进行独热编码会将其转换为多标签问题。type_of_target对于多标签输入(无论是稀疏的还是密集的)都将返回“multilabel-indicator”。- 多输出#
- 多输出#
方法#
decision_function#在已拟合的分类器或异常值检测器中,预测每个样本相对于每个类别的“软”分数,而不是由predict产生的“硬” categorical 预测。其输入通常仅为某些观测数据X。
如果估计器尚未拟合,调用此方法应引发
exceptions.NotFittedError。输出约定
- 二元分类
一个一维数组,其中严格大于零的值表示正类(即classes_中的最后一个类)。
- 多类分类
一个二维数组,其中按行取最大值是预测的类别。列按classes_的顺序排列。
- 多标签分类
Scikit-learn在多标签决策函数的表示上不一致。它可以表示为以下两种方式之一
2D数组列表,每个数组的形状为:(
n_samples, 2),类似于多类多输出。列表长度为n_labels。单个形状为 (
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的约定类似,但在二元分类情况下除外,其中为每个类别输出一列(而
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#在交叉验证分割器(非估计器)上,此方法接受参数(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。
参数#
这些常见的参数名称,特别是用于估计器构造(参见概念parameter),有时也作为函数或非估计器构造函数的参数出现。
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#确定交叉验证分割策略,如基于交叉验证的例程中使用。在
multioutput.ClassifierChain或calibration.CalibratedClassifierCV等估计器中也可用cv,这些估计器使用一个估计器的预测作为另一个估计器的训练数据,以避免训练监督过拟合。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#对于涉及迭代优化的估计器,这决定了在fit中执行的最大迭代次数。如果在未收敛的情况下运行了
max_iter次迭代,则应引发exceptions.ConvergenceWarning。请注意,“单次迭代”的解释在估计器之间是不一致的:有些(但不是所有)将其理解为单个epoch(即对数据中的每个样本进行一次遍历)。memory#一些估计器使用
joblib.Memory在拟合期间存储部分解决方案。因此,当再次调用fit时,这些部分解决方案已被记忆化并可以重用。memory参数可以指定为带有目录路径的字符串,或者可以使用joblib.Memory实例(或具有类似接口的对象,即cache方法)。memory值通过utils.validation.check_memory进行验证和解释。metric#作为参数,这是确定两个数据点之间距离的方案。参见
metrics.pairwise_distances。实际上,对于某些算法,可能会使用不正确的距离度量(不遵守三角不等式的度量,例如余弦距离)。注意:层次聚类使用具有此含义的
affinity。我们还使用*度量*来指代评估指标,但避免将此含义用作参数名称。
n_components#转换器应将输入转换成的特征数量。对于仿射投影的特殊情况,请参见components_。
n_iter_no_change#在停止迭代过程之前,没有改进的迭代次数。这也被称为*耐心*参数。它通常与提前停止一起使用,以避免过早停止。
n_jobs#此参数用于指定对于使用joblib并行化的例程应使用多少并发进程或线程。
n_jobs是一个整数,指定并发运行的最大工作程序数。如果给定1,则完全不使用joblib并行化,这对于调试很有用。如果设置为-1,则使用所有CPU。对于小于-1的n_jobs,则使用(n_cpus + 1 + n_jobs)个。例如,当n_jobs=-2时,除一个CPU之外的所有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接受的字符串,也可以是可调用的评分器,不要与评估指标混淆,因为后者具有更多样化的 API。scoring也可以设置为 None,在这种情况下,将使用估计器的score 方法。请参阅用户指南中的评分参数:定义模型评估规则。当可以评估多个指标时,
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 是输入特征的数量。另请参阅 coef_,它是线性预测器的类似属性。
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#每个数据点的权重。直观地说,如果所有权重都是整数,那么在估计器或评分器中使用它们,就像将每个数据点复制与权重值相同的次数一样。权重也可以指定为浮点数,并且可以产生与上述相同的效果,因为许多估计器和评分器是尺度不变的。例如,权重
[1, 2, 3]将等同于权重[0.1, 0.2, 0.3],因为它们相差一个常数因子 10。但请注意,有些估计器对权重的尺度并不不变。sample_weight既可以是估计器 fit 方法的参数,用于模型训练,也可以是评分器的参数,用于模型评估。这些可调用对象被称为“消耗”样本权重,而 scikit-learn 的其他组件可以将权重“路由”到底层的估计器或评分器(参见 元数据路由)。加权样本在多种情况下都很有用。例如,如果训练数据不是从目标群体中均匀抽样的,可以通过根据数据点被选择用于训练的逆概率对训练数据点进行加权来校正(例如,逆倾向加权)。
一些模型超参数用特征空间区域中离散数据点的数量表示。当使用样本权重进行拟合时,数据点的计数通常会自动转换为其权重的总和,但并非总是如此。请参阅模型文档字符串以获取详细信息。
在分类中,还可以使用class_weight估计器参数为属于给定目标类的所有样本指定权重。如果同时提供了
sample_weight和class_weight,则分配给样本的最终权重是两者的乘积。在撰写本文时(版本 1.8),并非所有 scikit-learn 估计器都正确实现了权重重复等效属性。#16298 meta issue 跟踪正在进行的检测和修复剩余差异的工作。
此外,一些估计器具有随机拟合方法。例如,
cluster.KMeans依赖于随机初始化,bagging 模型从训练数据中随机重采样,等等。在这种情况下,上面描述的样本权重重复等效属性不完全成立。然而,它应该至少在拟合过程的随机性期望下成立。X#表示在训练和预测时观察到的数据,在学习中用作自变量。符号大写表示它通常是一个矩阵(参见矩形)。当它是一个矩阵时,每个样本可以用一个特征向量表示,或者一个与每个训练样本的预计算(不)相似性向量表示。
X也可以不是矩阵,可能需要一个特征提取器或一个成对度量将其转换为矩阵,然后才能学习模型。Xt#“转换后的 X”的简写。
y#Y#表示在训练时可能作为学习中的因变量观察到,但在预测时不可用,通常是预测的目标的数据。符号可能大写以表示它是一个矩阵,例如表示多输出目标;但通常我们使用
y,有时即使假设有多个输出也这样做。