常见术语和API元素词汇表#
本词汇表旨在明确定义Scikit-learn及其API中应用的隐式和显式约定,同时为用户和贡献者提供参考。它旨在描述概念,并详细说明其相应的API或链接到文档中执行此操作的其他相关部分。通过将API参考和用户指南链接到词汇表条目,我们可以最大程度地减少冗余和不一致性。
我们首先列出一般概念(以及任何不适合其他地方的概念),但更具体的术语集列在下面: 类API和估计器类型、目标类型、方法、参数、属性、数据和样本属性。
一般概念#
- 1维#
- 1维数组#
一维数组。一个NumPy数组,其
.shape
长度为1。一个向量。- 2维#
- 2维数组#
二维数组。一个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训练的估计器的预测。发生这种情况时,我们会在更新日志中明确注明。
- 序列化
我们不保证在一个版本中序列化(pickling)的估计器能够在后续版本中反序列化(unpickled)为等效模型。(对于sklearn包中的估计器,即使反序列化可能成功,我们也会在尝试时发出警告。)请参阅安全性和可维护性限制。
utils.estimator_checks.check_estimator
我们对估计器检查提供有限的向后兼容性保证:我们可能会对使用此函数测试的估计器添加额外要求,通常是在这些要求被非正式假定但未正式测试的情况下。
尽管与用户有此非正式约定,但软件按许可证规定原样提供。当发布版本无意中引入了不向后兼容的更改时,这些更改被称为软件回归。
- 可调用对象#
一个函数、类或实现了
__call__
方法的对象;任何当callable()的参数时返回True的对象。- 类别特征#
类别或名义特征是指在数据总体中具有有限离散值集的特征。这些通常表示为整数或字符串列。大多数scikit-learn估计器会拒绝字符串,而整数将被视为有序或计数型。对于大多数估计器,类别变量应该进行one-hot编码。值得注意的是,基于树的模型(如随机森林和梯度提升模型)通常使用整数编码的类别变量效果更好、速度更快。
OrdinalEncoder
有助于将字符串值的类别特征编码为有序整数,而OneHotEncoder
可用于对类别特征进行one-hot编码。另请参阅编码类别特征以及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),或2D特征矩阵中的列数。然而,维度也用于指代NumPy数组形状的长度,以区分1D数组和2D矩阵。
- 文档字符串#
模块、类、函数等的嵌入式文档,通常在代码中作为对象定义开头的字符串,并可通过对象的
__doc__
属性访问。我们尝试遵循PEP257,并遵循NumpyDoc约定。
- 双下划线#
- 双下划线表示法#
在为嵌套估计器指定参数名称时,在某些情况下可以使用
__
来分隔父级和子级。最常见的用法是通过元估计器使用set_params设置参数,从而在参数搜索中指定搜索网格。请参阅parameter。它也用于pipeline.Pipeline.fit
中,用于将样本属性传递给管道中估计器的fit
方法。- 数据类型#
- 数据类型#
NumPy数组假设数据类型始终是同质的,可在数组(或稀疏矩阵)的
.dtype
属性中获取。我们通常假设scikit-learn数据使用简单数据类型:浮点或整数。在编码或向量化之前,我们可能会支持数组的对象或字符串数据类型。例如,我们的估计器不适用于结构化数组。我们的文档有时会提供有关dtype精度的信息,例如
np.int32
、np.int64
等。当提供精度时,它指的是NumPy dtype。如果使用任意精度,文档将引用dtypeinteger
或floating
。请注意,在这种情况下,精度可能依赖于平台。numeric
dtype表示接受integer
和floating
两种类型。在选择64位数据类型(即
np.float64
和np.int64
)和32位数据类型(即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
中未包含的且特定于估计器的指标,特别是模型似然度。估计器标签描述了估计器的某些能力。这使得可以基于估计器检查启用一些运行时行为,同时还允许每个估计器在豁免于其他通用测试的同时,对其适当的不变性进行测试。
估计器标签的某些方面目前通过鸭子类型的
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
的函数时,应注意避免数据泄露。我们没有关于何时提供或不提供估计器函数形式的严格策略,但维护者应考虑与现有接口的一致性,以及提供函数是否会引导用户偏离最佳实践(例如数据泄露等)。
- 画廊#
请参阅示例。
- 超参数#
- 超参数#
请参阅parameter。
- 填充#
- 填充#
大多数机器学习算法要求其输入没有缺失值,如果违反此要求将无法工作。尝试填充(或估算)缺失值的算法被称为估算算法。
- 可索引#
- 归纳#
- 归纳的#
归纳式(与转导式相对)机器学习建立了一个数据模型,然后可以将其应用于新实例。Scikit-learn中的大多数估计器都是归纳式的,具有predict和/或transform方法。
- joblib#
一个Python库(https://joblib.readthedocs.io),在Scikit-learn中用于促进简单的并行处理和缓存。Joblib旨在高效地处理numpy数组,例如通过使用内存映射。有关更多信息,请参阅并行性。
- 标签指示矩阵#
- 多标签指示矩阵#
- 多标签指示矩阵#
用于表示多标签数据的格式,其中2D数组或稀疏矩阵的每一行对应一个样本,每一列对应一个类别,每个元素为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兼容库的平台,这些库得到核心开发者和贡献者社区的广泛授权,但不由核心开发团队维护。请参阅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__
中传入的公共属性。- 监督#
- 监督学习#
- 目标#
- 目标#
监督学习(supervised)和半监督学习(semisupervised)中的因变量,作为 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方法中,任何包含的估计器在拟合之前都应该被克隆(尽管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分割器。消费元数据意味着在计算中使用它,例如使用sample_weight来计算某种类型的分数。作为消费者并不意味着该对象总是接收到某个元数据,而是指如果提供了元数据,它就可以使用它。
- 元数据#
与给定X和y数据相关,但并非数据直接组成部分的数据,例如样本权重或分组,并传递给不同的对象和方法,例如传递给评分器或CV分割器。
- 路由者#
将元数据路由到消费者的对象。该对象通常是一个元估计器,例如
Pipeline
或GridSearchCV
。一些路由者也可以是消费者。例如,当元估计器使用给定的分组,并且它也将其传递给其某些子对象(例如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)
的数组。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_中的最后一个类)。
- 多类分类
一个二维数组,其中按行计算的arg-maximum是预测的类。列按classes_排序。
- 多标签分类
Scikit-learn在多标签决策函数的表示上不一致。它可以采用以下两种方式之一:
2D数组列表,每个数组的形状为:(
n_samples
, 2),类似于多类多输出。列表的长度为n_labels
。形状为(
n_samples
,n_labels
)的单个二维数组,其中数组中的每个“列”对应于单独的二元分类决策。这与多类分类格式相同,但其语义不同:应像在二元情况下一样,通过在0处进行阈值处理来解释。
- 多输出分类
一个2D数组列表,对应于每个多类决策函数。
- 异常检测
一个一维数组,其中大于或等于零的值表示正常点。
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
#在CV分割器(非估计器)上,返回在给定相同参数的情况下,迭代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
#在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
。
参数#
这些常见参数名称,专门用于估计器构造(参见概念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
#确定交叉验证分割策略,用于基于交叉验证的例程。
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
#对于涉及迭代优化的估计器,此参数决定了在fit中要执行的最大迭代次数。如果运行
max_iter
次迭代仍未收敛,则应引发exceptions.ConvergenceWarning
。请注意,“单次迭代”的解释在不同估计器之间不一致:有些(但不是所有)将其解释为单个epoch(即对数据中每个样本进行一次遍历)。FIXME 也许我们应该有一些关于ConvergenceWarning和max_iter之间关系的通用测试。
memory
#某些估计器利用
joblib.Memory
在拟合(fitting)过程中存储部分解决方案。因此,当再次调用fit
时,这些部分解决方案已被缓存(memoized)并可复用。可以指定
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
是一个整数,指定并发运行工作器的最大数量。如果给定 1,则完全不使用 joblib 并行化,这对于调试很有用。如果设置为 -1,则使用所有 CPU。对于小于 -1 的n_jobs
,将使用 (n_cpus + 1 + n_jobs) 个 CPU。例如,当n_jobs=-2
时,使用除一个以外的所有 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
)的设置。传入的值将影响函数(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
中,所有数据必须包含来自每个类别的样本。
属性#
参见概念 attribute。
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
#每个样本的相对权重。直观地讲,如果所有权重都是整数,则加权模型或得分应等同于根据权重中指定的次数重复样本时计算的结果。权重可以指定为浮点数,因此样本权重通常在常数正比例因子下是等效的。
FIXME:这种解释在实践中总是如此吗?我们没有通用测试。
某些估计器,例如决策树,支持负权重。FIXME:此功能或其缺失可能未在许多估计器中进行测试或文档化。
当模型的其他参数考虑区域中的样本数量时,例如
cluster.DBSCAN
中的min_samples
,情况并非完全如此。在这种情况下,样本计数变为其权重的总和。在分类中,样本权重也可以通过估计器 参数 class_weight 指定为类别的函数。
X
#表示在训练和预测时观察到的数据,在学习中用作自变量。该符号为大写,表示它通常是一个矩阵(参见 rectangular)。当为矩阵时,每个样本可以由一个 特征 向量表示,或与每个训练样本的 预计算 (不)相似性向量表示。
X
也可能不是矩阵,并且在学习模型之前可能需要一个 特征提取器 或 成对度量 来将其转换为矩阵。Xt
#“转换后的 X”的缩写。
y
#Y
#表示在训练时可能观察到的、在学习中作为因变量的数据,但在预测时不可用,并且通常是预测的 目标。该符号可能是大写,表示它是一个矩阵,例如代表 多输出 目标;但通常我们使用
y
,有时即使假定存在多个输出也这样做。