通用术语表和API元素¶
该通用术语表尽可能准确地呈现在Scikit-learn及其API中使用的默认和隐式约定,同时为Scikit-learn用户和贡献者提供参考。该术语表旨在描述概念、详细说明与此概念相对应的API、或提供链接至文档的其他相关部分。通过链接到《API参考和用户指南》中的术语表条目,我们可以最大程度地减少表达中冗余和不一致。
我们从列出通用概念(以及那些不能被用于Scikit-learn环境之外的概念)开始,不过在下面我们还列出了更具体的相关术语表,他们分别是:类API和估算器类型,目标类型,方法,参数,属性,数据和样本属性。
通用概念
(译者注:原文中的通用概念使用alphabet字母表方式排序,因此译者在翻译时保留原顺序及部分英文注释,以供参考)
1d
1d array
一维数组。一个使用.shape命令后返回的长度为1的NumPy数组。一个向量。
2d 2d array
二维数组。一个使用.shape命令后返回的长度为2的NumPy数组。通常代表一个矩阵。
应用程式界面 API/Application Programming Interface
既指在Scikit-learn中用以实现的估计器的特定接口,又指本术语表中所述、且在《贡献者文档》(contributor document)中描述的各种估计器类型之间的通用约定。
在《API参考》中,我们详细记录了构成Scikit-learn的公共API的特定接口。但是,如果访问某个接口所需的所有标识符都不以符号_(单下划线)开头,那么我们就不会正式将该接口视为公共API。我们通常会尝试维护公共API中所有对象的向后兼容性。
相对的,我们不能确保私有API,包括函数、模块和以_(单下划线)开头的方法是稳定的。
类数组 array-like
类数组是用来输入Scikit-learn学习估计器和函数的最常见数据格式,它代表numpy.asarray会生成的任何类型对象。通常,numpy.asarray会生成具有适当数据类型(通常为数字)的适当结构(通常为1或2维)的数组。
类数组包括:
任意numpy数组
任意由数字组成的列表
由数字组成的列表组成的长度为k的列表,其中k是一个固定的长度
所有列均为数字的pandas.DataFrame结构
任意由数字组成的pandas.Seires结构
类数组不包括:
稀疏矩阵 任意迭代器 任意生成器
请注意,scikit-learn的估算器和函数(例如预测函数)的输出通常应为数组、稀疏矩阵或数组及稀疏矩阵组成的列表(比如说,在多输出的类tree.DecisionTreeClassifier中,接口predict_proba的输出结果就是一个数组的列表)。若一个估算器的预测接口predict()返回单独的列表或pandas.Series结构,则这个估算器是无效的。
属性 attribute/attributes
我们主要使用属性来说明拟合期间模型的信息是如何存储在估算器上的。我们规定,在过程fit或partial_fit中,估算器实例上存储的任何公共属性都必须以字母字符开头,且以单个下划线(_)结束。全部内容已经被记录在估算器的”属性”文档。存储在属性中的信息通常为:预测或转换所必须的统计或数字信息、转导输出结果例如labels_或embedding_、或诊断数据,例如feature_importances_。常用属性在下文中均有列出。
公共属性的名称可能与构造函数中参数的名称相同,并带有单个下划线_作为后缀。这些公共属性被用于存储用户输入数据的经过验证或估计的版本。例如,参数n_components被用于构造类decomposition.PCA,根据此参数,PCA与其他参数和数据一起估计出了属性n_components_。
更多被用于预测、转换等功能中的私有属性可以在拟合时同时被设定。这些属性都以一个下划线开头,scikit-learn官方并不能保证其对公众访问的稳定性。
估算器实例中那些不以下划线结尾的公共属性应该是同名的__init__参数中存储的下来的、未修改的值。由于存在这种等效关系,因此这些公共属性都记录在估算器的“参数”文档中。
向后兼容 backwards compatibility 我们通常会尝试在各个发行版之间保持向后兼容性(即,接口和行为可以扩展,但不能更改或删除),但这有一些例外:
仅针对公共API
通过专用标识符(以_开头的对象)访问的对象的行为可能在版本之间被任意更改。
与文件保持一致
通常,我们将假定用户(贡献者或使用者)遵守官方文件中声明的参数类型和范围。如果文档中要求提供列表,但用户给出了元组,我们不能保证版本之间的行为一致。
弃用(Deprecation)
当决定弃用scikit-learn中某些类的行为时,会存在一个弃用期,弃用期通常会覆盖两个版本。弃用期过后,类的行为可能会发生变化。弃用警告是通过Python的警告模块发布。
关键字实参(Keyword arguments)
有时我们可能会假设所有可选参数(除了X和y以及其他相似的方法)仅作为关键字实参传递,并且可能在位置上重新排序。
(译者注:实参是指实际传入函数或类的参数,输出函数或类后可以得出具体结果,与之对比的是在编写函数或类的时候设置的一系列参数名称,被称为形参。在编程世界中,实参的英文是arguments,形参的英文是parameters,在未说明的情况下,两者可混用且都指代形参parameters。)
错误修复和功能增强
错误修复和(较少见)增强功能可能会更改估算器的行为,包括对使用相同数据和random_state训练的估算器的预测。发生这种情况时,我们尝试在变更日志中清楚地注明。
序列化
在一个版本中序列化一个估算器后,我们无法保证这个估算器在反序列化过程中不被反序列化成后续版本中的等效模型(译者注:即无法保证序列化后的估算器在版本更新后一定能够被保留)。对于sklearn程序包中的估算器,若发现反序列化时版本不符的情况,我们会发出警告,即便反序列化后的模型可能没有被新版本中的等效模型替代。具体内容请参阅《安全性和可维护性限制》文档(Security & maintainability limitations)。
utils.estimator_checks.check_estimator
我们为估算器检查提供了有限的向后兼容性保证:我们可能会对使用此功能测试的估算器增加额外的要求,通常是在非正式假设但未正式测试的情况下。
尽管存在这份与用户之间的非正式合同,我们依然会按照许可证中的说明提供整个scikit-learn的软件服务。当发行版无意中引入了不向后兼容的更改时,我们把这些更改称为软件回归(software regressions)。
可调用的 callable
能够使用__call__方法的函数、类或对象;作为方法callable()的参数会使callable()返回true的任何对象。
分类特征 Categorical feature
分类特征或名义特征(又称为名义变量)是指在整个数据总体上具有有限的一组离散值的特征。这些通常表示为整数或字符串列。字符串通常被scikit-learn估算器拒绝,并且整数将被视为有序数值或计数值。为了与大多数估计器一起使用,分类变量应进行独热编码(one-hot)。值得注意的例外包括基于树的模型,例如随机森林和梯度增强模型,这些模型结合整数编码的分类变量后可以更好、更快地工作。 OrdinalEncoder可帮助将字符串值的分类特征编码为有序的整数,OneHotEncoder可用于对分类特征进行独热编码。另请参阅编码分类特征和分类编码包,以获取与编码分类特征相关的工具。
克隆 clone 克隆的 cloned
当需要复制一个估算器实例,以创造一个具有完全相同参数、但没有任何拟合属性的新估算器,使用工具克隆。
调用fit时,元估算器通常会在拟合克隆的实例之前先克隆包装的估算器实例。(出于历史遗留原因,Pipeline和FeatureUnion属于例外。)
普通测试 common tests
这指的是在Scikit-learn中几乎每个估计器类上都要运行的、以检查估算器是否符合基本的API约定的测试。它们可通过utils.estimator_checks.check_estimator外部使用,大多数实现在文件sklearn/utils/estimator_checks.py中。
注意:目前,常见测试机制的一些例外情况现在已硬编码到库中,但是我们希望通过使用语义估算器标签来标注这些估算器上的异常行为,以此代替硬编码。
弃用 Deprecation
我们使用弃用来慢慢违反我们的向后兼容性保证,通常是为了:
更改参数的默认值;或
删除参数,属性,方法,类等。
通常,当准备弃用的元素被使用的时候,我们会发出警告,尽管警告可能会被限制。例如,当某人设置了已弃用的参数时,我们会发出警告,但是当他们访问estimator实例上的参数属性时,可能不会发出警告。
具体请参阅《贡献者指南》(Contributors' Guide)。
维度 dimensionality
可用于表示特征的数量(即n_features)或二维特征矩阵中的列的数量。但是,尺寸也用于指代NumPy矩阵形状的长度,比如,将1d阵列与2d矩阵区分开。
文档说明 docstring
模块,类,函数等的嵌入式文档,通常以字符串的形式被写入对象定义的代码中,并出现在对象定义的开头,同时,这个文档可以通过对象的__doc__属性进行访问。
我们尝试遵守Python的PEP257约定(《如何规范书写文档说明》),同时也遵循NumpyDoc中的约定。
双下划线 double underscore 双下划线符号 double underscore notation
在为嵌套的估算器指定参数名称时,在某些情况下,双下划綫__可用于在部分内容中区分父估算器和子估算器。最常见的用途是通过带有set_params的元估算器设置参数,从而在参数搜索中指定搜索网格。更多可参见《参数》(Parameter)。双下划线也用在类pipeline.Pipeline.fit中,用于将样本属性传入管道中数个估算器的拟合方法(fit)中。
数据类型 dtype 数据类型 data type
NumPy数组始终假整个数组由相同数据类型构成,这个数据类型可在数组(或稀疏矩阵)的.dtype属性找到。我们通常假定scikit-learn数据的简单数据类型为:浮点数或整数。在编码或向量化之前,我们也支持以数组形式存在的对象或字符串数据类型。需要注意的是,我们的估算器不适用于结构数组(struct array)。
待办事项:提及效率和精度问题;投放政策。
鸭子类型 Duck typing
(译者注:鸭子类型是计算机编程中常用的概念。它有一个形象的解释:当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。当计算机需要确认某个变量的类型时,我们可以尝试调用这个变量的某些属性来帮助判断。例如,产出离散值的估算器是分类器,所以如果我们能够对某个变量调用离散的预测结果,则可以认为这个变量是分类器。Scikit-learn中大规模使用了鸭子类型,用以对输入和输出结果进行判断。)
我们尝试应用鸭子类型来帮助确定如何处理一些输入值(例如,检查给定的估算器是否为分类器)。也就是说,我们尽可能地避免使用isinstance来进行判断,而是依靠属性的存在或不存在来确定对象的行为。使用此方法时,则需要注意一些细微差别:
对于某些估算器,一些属性仅在拟合后才可以被调用。例如,我们无法先验确定在网格搜索中是否可使用predict_proba,因为在网格搜索流水线的最后一步中包括概率和非概率预测变量之间的交替。在下文中,我们仅在将clf拟合到某些数据后才能确定clf是否是概率性的:
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import SGDClassifier
clf = GridSearchCV(SGDClassifier(),
param_grid={'loss': ['log', 'hinge']})
这意味着我们只能在拟合后再检查鸭子类型的属性,并且必须小心地让元估算器仅根据拟合后基础估算器的状态来呈现属性。
通常,检查属性是否存在(使用函数hasattr)与获取属性(使用getattr或点表示法 dot notation)的计算成本是类似的。在某些情况下,获取属性的成本的确会非常昂贵(比如,对于feature_importances_的某些实现,这可能表明这是API设计上的缺陷)。因此,应避免在hasattr()后跟getattr()的代码,并首选try-except模块中的getattr功能。
为了确定估算器对某些功能的期望或支持的某些方面,我们使用估算器标签而不是鸭子类型。
提前停止 early stopping
这指的是在训练损失收敛之前停止迭代优化方法,以避免过度拟合。这通常是通过监视验证集上的概括分数(generalization score)来完成的。当提前停止选项可用时,可通过参数Early_stopping或设置正的n_iter_no_change参数来激活它。
估计实例 estimator instance
我们使用此术语区别估计器类与构造后的实例。例如,在下面的示例中,cls是一个估计器类,而est1和est2是实例:
cls = RandomForestClassifier
est1 = cls()
est2 = RandomForestClassifier()
示例 examples
我们尝试提供API中大多数函数和类的基本用法示例:
作为文档测试中所需的文档说明(即在sklearn/库代码本身内)。
作为示例库中的示例,这些示例库是通过examples/目录中的脚本绘制的(使用狮身人面像画廊sphinx-gallery),举例说明了估算器/函数的关键功能或参数。这里的内容都可以从《用户指南》中被引用出来。
有时将示例用于用户指南(从doc /构建)中、以及估算器的技术说明旁边
评估指标 evaluation metric/evaluation metrics
评估指标可以衡量模型的表现有多好,即衡量模型的效果。我们可能专门使用此术语来指代评估指标中的各类功能(不考虑metrics.pairwise),这与API中使用的score方法及交叉验证中使用的评分方法都不相同。具体请参阅《指标和评分:量化预测的质量》(Metrics and scoring: quantifying the quality of predictions)。
我们通常向这些函数中输入基本事实和预测结果。基本事实即真实标签,或在没有基本事实/真实标签的情况下进行聚类评估所需要的原始数据。而预测结果包括预测接口predict的输出值(y_pred)、预测概率接口predict_proba的输出值(y_proba)、和任意评分函数(包括decision_function)的输出(y_score)。如果分数越高表示模型越好,这些函数通常以_score结尾;如果分数越小表示模型越好,函数通常以_loss来表示。评估接口的多样性激发了评分API的诞生。
请注意,某些估算器可以计算未包含在模型评估指标中、且特定被一些估算器使用的衡量指标,尤其是模型的似然性(likelihoods)。
估算器标签 estimator tags
估算器标签是一个建议的特征(例如#8022,详见github页面 https://github.com/scikit-learn/scikit-learn/pull/8022),这个特征通过一组语义标签来描述估算器的功能。这将使基于估计器检查的某些运行时行为成为可能。同时,这个特征也允许在不进行其他普通测试的情况下,对每个估算器的适当不变性(appropriate invariances)进行单独测试。
当前,估算器标签的某些值是通过鸭子类型(例如predict_proba)以及估算器对象上的一些特殊属性来确定的:
_estimator_type
这个字符串类型属性将估算器标识为分类器,回归器等。它由诸如base.ClassifierMixin之类的混合(mixins)进行设置,但需要明确地被应用到某个元估算器上。通常,我们通过诸如base.is_classifier之类的帮助程序来检查这个属性的值。
_pairwise
此布尔值属性指的是,在fit或相似方法中输入的数据(X)是否由样本的成对度量而不是每个样本的特征表示组成。当估算器中存在某个评估指标、或亲缘性(affinity)、或核参数(kernel parameter)的值为“预计算”时,该布尔值属性通常为Ture。该布尔值属性存在的主要目的是,当我们从元估算器提取计划用于成对估算器的数据子样本时,需要在两个轴上对数据进行索引,而其他数据仅仅需要第一轴上进行索引。
有关更多详细信息,请参见《估算器标签》(Estimator Tags)。
特征 feature/features 特征向量 feature vector
概括地说,就数学意义上而言,特征是将采样对象映射到数值或分类数量的函数。 “特征”通常也用于指代这些数值或数量本身的值,即表示代表样本一个向量所对应的某个元素的值。在数据矩阵中,特征也表示为列:每列表示将一个特征函数应用于一组样本的结果。
在其他地方,特征也被称为属性,预测变量,回归变量或自变量。
在scikit-learn中,几乎所有估算器都假定特征是以数字形式表示的、是有限的且没有缺失值的,即使数据在语义上具有不同的域和分布(例如分类,有序,计数值,实值,区间)也是如此。更多详细内容,请参见《分类特征和缺失值》(categorical feature and missing values)。
属性n_features指的是数据集中的特征数量。
拟合 fitting
在估算器上调用fit(或fit_transform,fit_predict等功能)的动作。
拟合完毕 fitted
拟合后的估算器的状态。
没有约定俗成的流程来检查一个估算器是否已经被拟合完毕了。但是,没有拟合的估算器:
当调用预测方法(如预测predict,转换transform等功能)时,会引发exception.NotFittedError错误(sciki-learn内部使用utils.validation.check_is_fitted来表示此错误。)
不应具有任何以字母字符开头和以下划线结尾的属性。(请注意,属性的描述符可能仍存在于类中,但调用hasattr方法应该返回False)
函数 function
我们为许多算法提供了临时函数接口,为估算器类提供了更加一致的接口。
特别的,Scikit-learn可以提供一个函数接口,该函数接口可以使模型适合某些数据并返回学习的模型参数,如linear_model.enet_path所示。对于转导模型,函数接口还将返回嵌入标签或簇标签,如manifold.spectral_embedding或cluster.dbscan中的接口。许多预处理转换器还提供类似于调用fit_transform的功能接口,如preprocessing.maxabs_scale。使用这些与fit_transform等效的功能时,用户应注意避免数据泄漏。
对于何时提供或不提供估计器的功能形式,我们没有严格的政策,但是维护者应考虑与现有接口的一致性,以及提供功能是否会导致用户误解使用scikit-learn时的最佳实践方式(如关于数据泄漏等)。
画廊 Gallery
参见示例(examples)。
超参数 hyperparameter/hyper-parameter
参见参数(parameter)。
输入 Impute/Imputation
大多数机器学习算法都要求其输入的数据不能存在缺失值,并且当有缺失值存在时,这些机器学习类将无法工作。尝试填充(或估算)缺失值的算法称为输入算法(imputation algorithms)。
可索引的 Indexable
一个类数组对象、稀疏矩阵、pandas DataFrame或序列(通常是列表)都是可索引的对象。
归纳 Induction/Inductive
归纳机器学习(与转导机器学习相反)建立一系列可以被应用于新实例的数据模型。在Scikit-learn中的大多数估算器都是归纳式的,他们都有预测predict和/或变换transform的方法。
joblib
一个在Scikit-learn中使用的Python库(https://joblib.readthedocs.io),这个库有助于简单的并行运算和处理缓存。Joblib旨在有效地使用numpy数组,例如通过使用内存映射。有关更多信息,请参见并行(Parallelism)。
标签指标矩阵 label indicator matrix 多标签指标矩阵 multilabel indicator matrix/matrices
用于表示多标签数据的格式,其中2d数组或稀疏矩阵的每一行对应一个样本,每一列对应一个标签类别,对于任意样本,若属于该标签类别则该列下的值为1,否则为0。
泄漏 leakage 数据泄漏 data leakage
数据泄露是交叉验证中存在的一个问题。模型的泛化能力可能被高估,因为测试数据的知识会无意中被包含在训练模型所用的数据中,所以模型会提前得知一部分测试集的真相。例如,当将转换器应用到整个数据集而不是交叉验证拆分中的每个训练部分时,就会存在数据泄露的风险。
我们旨在提供使用户免于数据泄漏的接口(例如管道和model_selection)。
内存映射 MemMapping/memory map/memory mapping
内存映射是一种内存效率策略,这种策略将数据保留在磁盘上,而不是将其复制到计算机的主内存中。通过numpy.memmap,我们可以为可读、可写入或既可读又可写入的数组创建内存映射。当使用joblib并行化Scikit-learn中的操作时,它可能会自动对大型数组进行内存映射,以减少多处理中的内存复制开销。
缺失值 Missing values
大多数Scikit-learn估算器都无法在数据存在缺失值的情况下使用。当这些估算器可以对存在缺失值的数据使用时(例如在impute.SimpleImputer中的众多类),NaN是浮点数组中缺失值的首选表示形式。如果数组具有整数类型,缺失值就不能表示为NaN。因此,当可以在整数空间中进行插补或学习时,我们支持指定一个具体的missing_values值作为缺失值的表示。缺少标签的数据(Unlabelled data)是标签或目标中存在缺少值的特殊情况。
n_features
特征的数量。
n_outputs
在本次建模中,输出的数量。
n_samples
样本量。
n_targets
n_outputs的同义词。
叙述性文档 narrative docs/narrative documentation
用户指南的别名,例如编写在doc/modules/目录下的文档。与通过文档说明(docstrings)提供的API参考不同,用户指南旨在:
以专题为单位、或以使用指南为引导,打包由Scikit-learn提供的工具
通过比较的方式,促进人们在某种特定情况下选择使用某种特定的工具
对工具提供直观的、技术性的描述
提供或链接到使用工具关键功能的示例
np
在导入NumPy时约定速成的NumPy包的简写。导入代码如下:
import numpy as np
流式学习 Online Learning
(译者注:这里的在线学习是一种模型训练方法,与之对应的是offline learning。Online Learning强调训练过程是实时的、流式的,常被用于梯度下降中作用于最优化问题。其含义与日常用语中的在线学习存在较大差异,故没有使用“在线学习”的译名,而翻译为流式学习。实际在学术圈与技术圈中,并没有对该概念形成统一的中文译名。)
在对一批数据进行预测后,通过接收这里数据的真实标签来迭代更新模型的学习方法。本质上,该模型每训练一批数据,就可以被用于预测。更多内容参见partial_fit。
核外 out-of-core
一种不把所有数据一次性存储在主存储器中中的效率策略,通常是通过对数据进行分批学习来实现的。更多内容参见partial_fit。
输出 outputs
每个样本所对应标签下输出的单个标量或类别变量。例如,在多标签分类中,每个可能的标签都对应一个二分类输出(即1或0)。输出也被称为响应,任务或目标。更多内容,请参见多标签多输出(multiclass multioutput)和连续多输出(continuous multioutput)。
对 pair
一个长度为二的元组。
参数 parameter/parameters/param/params
我们主要使用参数来表示那些可以在构造估算器时指定的各个方面的值。例如,max_depth和random_state是类RandomForestClassifier的参数。对任意估算器,构造估算器时的参数都被无删改地储存在估算器实例的属性(attributes)中,并通常以字母字符开头,以字母或数字字符结尾。估算器的文档说明中描述了每个估算器构造函数时所需的参数。
我们不使用统计学意义上的“参数”概念。在统计学中,参数是定义某个具体模型的一系列值,并且可以根据数据将参数估算出来。在机器学习里,我们所谓的参数可能是统计学家所谓的模型超参数:并非从数据中学习获得,而是自行配置模型结构的各个方面的值。不过,我们也使用参数这个术语来指代一些不影响学习模型的建模操作,例如用于控制并行性的n_jobs。
在讨论元估算器的参数时,我们可能会将被元估计器包裹(wrapped)在内的估计器的参数都考虑在内。通常,我们使用双下划线(__)来表示这些嵌套参数,并得以区分作为参数的估算器(estimator-as-parameter)本身与它的参数。来看以下代码:
clf = BaggingClassifier(
base_estimator = DecisionTreeClassifier(max_depth = 3))
在这段代码中,clf具有值为3的深参数base_estimator__max_depth,这个参数可通过clf.base_estimator.max_depth或者clf.get_params()['base_estimator__max_depth']进行访问。
我们可以使用一个估算器示例的get_params方法从这个估算器中检索出参数列表以及这些参数当前对应的值。
在构筑估算器后,拟合估算器之前,可以使用set_params修改参数。为此,在构造估算器或设置每个参数时,通常不对参数进行验证或更改。参数验证将在调用fit,开始拟合的时候进行。
常用参数可见连接:https://scikit-learn.org/stable/glossary.html#glossary-parameters
成对度量 pairwise metric/pairwise metrics
从广义上讲,成对度量定义了一个函数,该函数被用于测量两个样本(通常表示为两个特征向量)之间的相似性或不相似性。我们特别通过metrics.pairwise_distances提供了实现距离度量标准的功能(尽管其中包括一些不太规范的度量标准,例如余弦距离),并在metrics.pairwise_kernels中提供了内核函数(一个受限的、用来衡量相似性的类)。这些可以计算对称的成对距离矩阵,因此可以饱和地存储数据。
更多细节,另请参见《预计算和度量》(precomputed and metric)。
请注意,对于大多数距离度量,我们依赖于scipy.spatial.distance库来实现,但可能会在我们的代码为了效率而重新实现一些功能。在最近邻(neighbors module)模块中,我们还复制了一些度量实现用于与有效的二叉树搜索数据结构集成。
pd
在导入Pandas时约定速成的Pandas包的简写。导入代码如下:
import pandas as pd
预计算 precomputed
当算法依赖于成对度量标准(pairwise metrics),并且能够只基于成对度量标准进行计算时,我们通常允许用户指定所提供的数据X所在的数据空间,通常用户可指定X已经在成对(而非相似性)的空间中,而不是在特征空间中。也就是说,当数据被用于拟合时,它是一个正方形的、对称的矩阵,且其中的每个向量表示与每个样本之间的相似或比相似性。当数据被用于预测predict或转化transform的方法时,每一行对应一个测试样本,每一列对应一个训练样本。
通常,我们将评估指标,亲缘性或核参数设置为字符串“precomputed”来明确使用预计算的数据X。在这种情况下,估算器应将自己标记为_pairwise。
矩形 rectangular
对于任意矩阵,若它在一个轴上具有样本,在在第二个轴上具有固定的、有限的特征,则这个矩阵可以被称为矩形。
该术语不包括具有非矢量结构的样本,例如文本,任意大小的图像,任意长度的时间序列,一组矢量等。矢量化的目的是产生这些非结构化数据的矩形形式。
(译者注:矩形只能是二维的,二维也是scikit-learn中的算法类可接受的数据集的最高维度)
样本 sample/samples
我们通常将此术语用作名词来表示单个特征向量。在别的地方,样本也被称为实例、数据点或观测值。n_samples表示数据集中的样本数,即数据数组X中的行数。
样本属性 sample property/sample properties
样本属性与样本的性质有关的数据,常常表示为长度为n_samples的一个数组。当样本属性传递给估算器的各类方法或类似函数时,这些数据与特征(X)和目标(y)并排显示,但与特征(X)和目标(y)的性质不同。最突出的例子是sample_weight(译者注:代表了每个样本所占权重的参数)。更多内容请参考《数据和样本属性》(Data and sample properties)。
从版本0.19开始,尽管我们经常使用fit_params参数,但我们还没有一致的方法来处理元估算器中的样本属性及其路由。
scikit-learn贡献者社区 scikit-learn-contrib
一个发布Scikit-learn兼容库的场所,该库得到了核心开发人员和contrib社区的广泛授权,但未由核心开发人员团队维护。更多详情参见https://scikit-learn-contrib.github.io
scikit-learn增强建议 scikit-learn enhancement proposals/SLEP/SLEPS
对API原则的更改以及对其依赖项或受支持版本的更改都是通过SLEP进行的,并且任何更改都需要遵循Scikit-learn治理和决策文档中概述的决策过程。对于所有投票行为,提案必须已经公开并在投票之前进行了充分讨论。这样的提议必须是一个综合性文件,并以“ Scikit-Learn增强提议”(SLEP)的形式呈现,而不是就一个问题进行长时间的讨论。任意增强提议必须遵循SLEP模板,并作为增强建议发起文件进行提交。
半监督学习 semi-supervised/semi-supervised learning/semisupervised
当仅有部分样本的预期预测值(如标签或基本事实)可以被作为训练数据进行拟合时,我们称这样的学习为半监督学习。我们通常将标签-1应用于半监督分类中的未标记样品。
稀疏矩阵 sparse matrix 稀疏图 sparse graph
系数矩阵是二维数值数据的一种表现形式,它由几乎所有元素均为零的密集numpy数组组成,因此其内存存储效率更高。我们使用scipy.sparse框架,该框架提供了几种基础的稀疏数据表示形式或格式。对于某些特定任务,某些格式要比其他格式更有效,并且当特定格式提供特殊好处时,我们尝试在Scikit-learn参数描述中记录这一事实。
一些稀疏矩阵格式(特别是CSR,CSC,COO和LIL)区分隐式零和显式零。显式零存储在数据结构中(即它们以数据数组的方式消耗内存),而隐式零则对应到显式存储中未定义的每个元素。
Scikit-learn中使用了两种稀疏矩阵的语义:
矩阵语义 matrix semantics
稀疏矩阵被解释为一个包含隐式和显式零的数组,其中隐式和显式零又被解释(interpreted)为数字0。这是最常用的解释,例如当稀疏矩阵用于特征矩阵或多标签指示符矩阵时。
图语义 graph semantics
与scipy.sparse.csgraph一样,显式零被解释为数字0,但是隐式零表示被掩盖或不存在的值,例如图形的两个顶点之间不存在边,其中显式值指示边的权重。这种解释常备用来表示表示聚类中的连接性、表示最近邻域(例如neighbors.kneighbors_graph),以及表示仅需要每个点附近的距离的预计算距离。
当使用稀疏矩阵时,我们假设总是有充分的理由支持我们这么做(即,如果我们没有一个充分的理由,我们就不使用稀疏矩阵)。我们并且避免编写让用户提供的稀疏矩阵的代码,而不是尽可能保持数据稀疏性、或在不能使用稀疏矩阵的时候报错(比如,在估算器不支持/不支持稀疏矩阵的时候报错)。
有监督学习 Supervised
使用每个样本对应的预期预测值(如标签或基本事实)作为训练数据中的y进行拟合,这种方式被称为有监督学习。这是在估算器中的分类器或回归器中采用的方法。
目标 targets
监督(和半监督)学习中的因变量,作为y传递给估算器的拟合方法。也称为因变量,结果变量,响应变量,基本事实或标签。 Scikit-learn适用于最小结构的目标:有限集中的一个类别,一个有限的实数值,多个类别或多个数字。具体请参阅《目标类型》(Target Types)。
转导 transduction/transudative
转导机器学习(与归纳机器学习相反)是一种对特定数据集进行建模、但不将该模型应用于模型未曾见过的数据(即,新实例)的学习方法。典型的例子包括:manager.TSNE,cluster.AgglomerativeClustering和neighbors.LocalOutlierFactor。
未标记的数据 unlabelled/unlabelled data
拟合时基本事实未知(标签未知)的样本,即是说,样本对应的目标中缺少值。另请参见半监督学习和无监督学习。
无监督学习 Unsupervised/unsupervised learning
全部部分样本的预期预测值(如标签或基本事实)都无法获得、且无法被作为训练数据进行拟合时,我们称这样的学习为无监督学习。典型的例子是在聚类算法、离群值检测等。无监督学习的估算器会忽略任何传递给拟合方法fit的y值。
类API和估算器类型
分类器 Classifier/Classifiers
输出一组有限的离散值的监督(或半监督)预测器。
分类器支持对二分类,多分类,多标签或多分类多标签问题进行建模。在scikit-learn中,所有分类器都支持多分类,默认情况下,对二分类问题使用“一对多”策略(one-vs-rest)。
分类器必须在拟合后存储classes_属性,并且通常继承自base.ClassifierMixin库,这个库也设置分类器的_estimator_type属性。
使用is_classifier功能可以将分类器与其他估算器类型区分开。
分类器必须实现:
拟合 fit 预测 predict 打分 score
对一些分类器而言,实现decision_function,predict_proba和predict_log_proba功能也是需要的。
聚类器 clusterer/clusterers
输出一组有限的离散值的无监督预测器。
聚类器通常在拟合后储存属性labels_,如果这个聚类器是转导型则必须进行储存。
聚类器必须实现:
拟合 fit
拟合预测 fit_predict,如果聚类器是转导型
预测 predict,如果聚类器是归纳型
密度估计器 density estimator
即将去做。
估算器 estimator/estimators
管理模型的估计和解码的对象,这里的模型被估计为以下元素的一个确定性函数:
在构建估算器类对象时提供的、或使用set_params提供的参数;
估算器的random_state参数被设置为None时的全局随机状态,该随机状态由numpy.random处理;以及,
最近一次调用fit,fit_transform或fit_predict时传入的任何数据或样本属性,或类似地在对partial_fit的调用序列中传递的数据。
估算出的模型被存储在估算器实例的公共和私有属性中,从而有助于通过预测和变换方法进行解码。
任何估算器都必须提供一个fit方法,并应提供set_params和get_params,尽管这些参数通常是从base.BaseEstimator的继承中提供的。
一些估算器的核心功能也可以作为单独的函数使用。
特征提取器 feature extractor/feature extractors
当一个转换器接受样本没有被呈现为固定长度的类数组对象作为输入,并为每个样本生成类数组样的特征矩阵(因此,对一组样本,会生成二维数组),我们则称它为特征提取器。特征提取器(有损)地将非矩阵数据表示映射成矩阵数据。
特征提取器必须至少实现:
拟合 fit
转化 transform
获得新生成的特征的名字 get_feature_names
元估算器 meta-estimator/meta-estimators/metaestimator/metaestimators
一个可以将另一个估算器作为参数的预测器。典型的例子包括pipeline.Pipeline,model_selection.GridSearchCV,feature_selection.SelectFromModel和ensemble.BaggingClassifier。(译者注:在包含关系中,包含多个估算器的估算器是元估算器,被包含的估算器被称为基估算器,base estimators)
在元估算器的拟合方法(fit)中,所有被包含的估算器都应在拟合之前被克隆(尽管FIXME: Pipeline和FeatureUnion当前并不这样做)。对此有一个例外,那就是估算器本身已经明确说明:自己接受预先拟合好估算器(例如,在feature_selection.SelectFromModel中令参数prefit = True)。一个已知的问题是,如果克隆了元估算器,则预拟合的估算器将丢失其模型。即使所有被包含的估算器都已预先拟合,元估算器也应在预测之前先进行拟合。
如果元估算器的主要行为(例如,预测predict或转换transform放入实现)是所包含的基估算器(或多个基估算器)的预测/转换方法,则元估算器应至少提供被包含的基估算器本来就提供的一系列方法。在使用meta-estimator拟合之前,可能无法确定基估算器都提供了哪些方法(另请参阅鸭子类型),utils.metaestimators.if_delegate_has_method模块可能对此有所帮助。这个模块还应提供(或修改)基估算器提供的估算器标签(estimator tags)和classes_属性。
元估计器在将数据传递给基估算器之前,应尽量谨慎、尽可能少地对数据进行验证。这节省了计算时间,并且可以,比如说,允许基估计器轻松处理非矩形数据。
离群值检测器/异常值检测器 outlier detector/outlier detectors
一种无监督的二分类预测器,可对核心样本与外围样本之间的区别进行建模。
离群检测器必须实现:
拟合fit
拟合预测 fit_predict,如果检测器是是转导型
预测 predict,如果检测器是归纳型
归纳离群值检测器还可以实现Decision_function以给出归一化的离群值,其中离群值的得分低于0。score_samples可以为每个样本提供非归一化的得分。
预测器 predictor/predictors
支持预测predict和/或fit_predict方法的估算器。这包括分类器,回归器,离群值检测器和聚类器。
在统计数据中,单词“predictors”是指特征。
回归器 regressor
具有连续输出值的监督(或半监督)预测器。
回归器通常继承自类base.RegressorMixin,在这个类中设置了_estimator_type属性。
我们可以使用is_regressor工具将回归器与其他估算器区别开来。
回归器必须实现:
拟合 fit
预测 predict
打分 score
转换器 transformer/transformers
支持转换功能transform和/或预测转换功能fit_transform的估算器。纯粹的转导型转换器,例如类manifold.TSNE,可能不需要实现转换功能transform,也依然是转换器。
矢量化器/向量化器 vectorizer/vectorizers
请参阅特征提取器。
以上是典型的类API与估算器类型,除此之外还有一些与一小磊估算器特别相关的API,比如:
交叉验证分割器 cross-validation splitter/ CV splitter
交叉验证生成器 cross-validation generator
交叉验证生成器是一族非估算器的类。我们向这些类提供split和get_n_splits方法,这些类将数据集分为一系列训练数据和测试数据(更多请参阅《交叉验证:评估估计器性能》)。轻注意,交叉验证生成器与估算器们不同,这些类中没有fit方法,并且不提供set_params或get_params方法。参数验证可以在__init__中执行。
交叉验证估算器 cross-validation estimator
具有内置的交叉验证功能的估算器,可以帮助我们自动选择最佳的超参数(关于超参数,请参阅《用户指南》)。交叉验证估算器的一些典型示例是ElasticNetCV和LogisticRegressionCV。交叉验证估算器被称为EstimatorCV,通常近似等于GridSearchCV(Estimator(),...)。使用交叉验证估算器而不是规范的估算器类+网格搜索的优势在于,它们可以可以使用之前的交叉验证步骤中预先计算的结果进行“暖启动”,这通常可以提高速度。RidgeCV类是一个例外,它可以执行高效的留一式交叉验证。
评分器 scorer
一个非估算器类的可调用对象,它根据给定的测试数据评估一个估算器(的某项能力),并返回一个数字。与评估指标不同,在评分器中只能够使用积极指标,即返回的数字越大,模型得分越高的指标。更多请参阅评分参数:定义模型评估规则(The scoring parameter: defining model evaluations rules)。
更多评分器:
gaussian_process.kernels.Kernel
tree.Criterion
目标/标签类型
二元/二分类 binary
标签中含有两个类别的分类问题。二分类的目标/标签页可以表示多分类问题,但只能有两个标签类别。一个二分类问题的决策函数会被表示为一维数组。
从语义上讲,一个类别通常被认为是“正”类别。除非另有说明(例如,在评估指标中使用pos_label),否则我们将具有较大值(按数字或词典顺序)的类别标签视正类别:标签[0,1]中的1是正类别; [1,2]中的2是正类别;在['no','yes']中,“yes”是正的;在['no','YES']中,'no'是正的类别(译者注:大小写会影响标签类别的积极性,需要注意)。类别的积极性会产生各种影响,比如,影响Decision_function的输出。
请注意,从多分类的y或连续型y采样的数据集可能看起来也是二分类的。
对于二分类问题的输入,type_of_target将返回“binary”,或者返回仅存在单个类的类似数组。
连续型 continuous
指代回归问题,其中每个样本的目标都是一个有限的浮点数,整个目标被表示为一个一维的浮点数(有时是整数)的数组。
对于连续输入,type_of_target将返回“continuous”,但是如果数据都是整数,则将其标识为“multiclass”(多分类)。
连续型多输出 continuous multioutput/multioutput continuous
指代回归问题,其中每个样本的目标均由n_outputs个输出组成,其中每个输出都是一个有限的浮点数,与特定数据集中的固定的、整数型的、大于1的n_outputs相对应。
连续多输出目标被表示为多个连续型的目标,它们可以被水平堆叠成(n_samples,n_outputs)形状的数组。
对于连续型多输出的输入,type_of_target将返回“continuous-multioutput”,但是如果数据都是整数,则将其识别为“multiclass-multioutput”(多分类多输出)。
多分类 multiclass
标签中包含两个以上的类的分类问题。多分类的目标可以表示为一个由字符串或整数组成的一维数组。整数型的二维列向量也是可以被接受的(即多输出项中的单个输出)。
我们不正式支持将其他可排序的、可哈希对象用作类的标签,即使在给定此类分类目标时估算器可能会起作用。
对于半监督分类,未标记的样本在y中应具有特殊标记-1。
在sckit-learn中,所有支持二分类的估算器也支持多分类,默认情况下使用One-vs-Rest模式。
类preprocessing.LabelEncoder有助于将多类目标规范化为整数。
type_of_target将为多分类的输入返回“multiclass”。用户可能还希望处理与“多分类”相同的“二分类”输入。
多分类多输出 multiclass multioutput/multioutput multiclass
一个分类问题,其中每个样本的标签都由n_outputs个输出组成,每个输出是一个标签类别,与特定数据集中的固定的、整数型的、大于1的n_outputs相对应。每个输出都有一组固定的可用类,每个样本在每个输出下都标记有一个类。输出可以是二分类或多分类的,并且在所有输出都是二分类的情况下,目标是多标签的。
多分类多输出的标签被表示为多个分类型目标,它们可以被水平堆叠成(n_samples,n_outputs)形状的数组。
为简单起见,我们在多分类多输出问题中可能并不总是支持字符串类标签,应该使用整数类标签。
multioutput提供了使用多个单输出估算器来估计多输出问题的估算器。这可能无法完全说明不同输出之间的依赖关系,那些本来就能够处理多输出情况的算法(例如决策树,最近邻算法,神经网络等)可能会做得更好。
对于多分类多输出的输入,type_of_target将返回“multiclass-multioutput”。
多标签 multilabel
一个多分类多输出的标签,其中每个输出都是二分类。这可以被表示为二维密集数组或整数组成的稀疏矩阵,以便每一列都是单独的二分类标签,其中正类别用1表示,负类别通常用-1或0表示。注意,支持密集数组的地方不一定支持系数矩阵表示的多类标签。
从语义上讲,可以将多标签目标视为每个样品的一组标签。虽然未在内部使用,但preprocessing.MultiLabelBinarizer是作为实用程序提供的,用于将以集合表示形式的列表转换为二维数组或稀疏矩阵。对多分类(multiclass)目标使用独热编码,进行preprocessing..LabelBinarizer的转换,会将其变成多标签问题(multilabel)。
对于稀疏或密集的多标签输入,type_of_target将返回“ multilabel-indicator”。
多输出 multioutput/multi-output
每个样本具有多个分类/回归标签的目标。请参见词条多分类多输出和连续型多输出。我们目前不支持对混合分类和回归目标进行建模。
方法
(译者注:该章对算法类所使用的不同方法进行说明,尤其是对不同目标下的方法格式及方法所产生的结果进行说明。其中方法的表示方式为:方法名称 方法译名
)
decision_function 决策函数
在拟合后的分类器或离群值检测器中,对每个样本预测出与每个类别相关的一个“软”评分,而不是预测所产生的“硬”分类预测。它的输入通常只是一些观察到的数据X。
如果估算器尚未拟合,则调用此方法会引发错误exceptions.NotFittedError。
关于输出值的一些行业惯例:
二分类 binary classification
一维数组,其中严格大于零的值表示正类别(即,classes_中的最后一个类别)。
多分类 multiclass classification
二维数组,其中逐行的最大化变量(arg-maximum)指向预测出的类别。列根据classes_中说明的顺序排序。
(译者注:arg-maximum被译为最大化变量,它指代令函数最大化的变量的值,与函数的最大值本身存在根本区别。多分类算法在decision_function方法中的输出往往是(n_samples,n_labels)结构,每行包含该样本在所有标签下的对应值,这些值的性质与概率相似。这里的最大化变量指的是,所有这些值中让评估指标函数/决策函数最大化的值。如果这些值是各标签下的概率(predict_proba),则每行中最高的概率对应的类别就是该样本的预测类别。若这些值是距离(decision_function),则每行中最短的距离对应的类别就是该样本的预测类别。)
多标签分类 multilabel classification
Scikit-learn在多标签决策函数(decision_function)的表示上存在不一致。一些估算器将其表示为多分类多输出,比如说,一个二维数组的列表,每个数组都有两列。其他估算器用单个二维数组表示它,其列对应于各个二分类决策结果。后一种表示形式与多分类格式隐约相同,尽管其语义不同:应像在二分类情况下那样,将阈值设为0来解释它。
待办事项:在这里重点说明了多标签使用不同格式的情况。
多输出分类 multioutput classification
二维数组的列表,对应于每个多分类的决策函数。
离群值检测 outlier detection
一维数组,其中大于或等于零的值表示一个整数。
fit 拟合
每个估算器都提供拟合方法fit。通常拟合时会需要一些样本X,目标y(如果模型是有监督的),并潜在地需要其他样本属性,例如sample_weight。拟合时应该:
清除拟合前存储在估算器上所有的属性,除非使用warm_start;
验证并解释任何参数,理想情况下,如果输入的参数不合规,会引发错误;
验证输入数据;
根据估计的参数和提供的数据估计并存储模型属性;和
返回现在拟合完毕的估算器以方便方法链入
上一章目标类型(Target Types)描述了y的可能的格式。
fit_predict 拟合预测
尤其适用于无监督的转导估算器,它拟合模型并返回训练数据上的预测(类似于预测方法predict)。在聚类器中,这些预测结果被存储在属性labels_中,并且.fit_predict(X)的输出通常等效于.fit(X).predict(X)。fit_predict的参数与fit的参数相同。
fit_transform 拟合转化
一种适用于转换器的方法,它实现数据拟合后返回转换后的训练数据。它采用与方法发it一致的参数,并且其输出应具有与调用.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 获取特征名称
主要用于特征提取器,但也用于其他转换器,为估算器的transform方法的输出中的每一列提供字符串名称。它输出字符串列表,并且可以将字符串列表作为输入,对应于可以从中生成输出列名称的输入列的名称。默认情况下,输入要素的名称为x0,x1...。
get_n_splits 获取n次分割
在交叉验证分割器(注意不是交叉验证估算器)上,返回在给定相同参数的情况下迭代split的返回值时将获得的元素数。采用与split相同的参数。
get_params 获取参数
获取可以使用set_params设置的所有参数及其值。当设置为False时,可以使用参数deep来仅返回不包含双下划线__的那些参数,即不归因于通过包含的估计器的间接调用。
大多数估算器采用base.BaseEstimator中的定义,该定义仅采用为__init__定义的参数。pipeline.Pipeline等重新实现get_params,以将在其steps参数中命名的估计量声明为参数本身。
partial_fit 局部拟合
(译者注:与流式学习 online learning有关,并非与在线学习有关。)
便于以流式方式拟合估算器。与fit不同,重复调用partial_fit不会清除模型,但会使用提供的数据对其进行更新。提供给partial_fit的数据部分可以称为小批处理(mini-batch)。每个小批处理必须具有一致的形状等属性。在迭代估算器中,partial_fit通常仅执行一次迭代。
partial_fit也可以被用于核外学习(out of core learning,相关内容参见词条核外),不过通常只有当学习可以是流式的时候才能够使用,比如说,在每次partial_fit之后都可以使用该模型,并且不需要单独的处理来最终确定模型。 cluster.Birch引入了业界约定,即调用partial_fit(X)会生成未定型的模型,但是可以通过调用partial_fit()来定型该模型,即无需传递进一步的小批处理训练。
通常,不应该在估算器的调用、使用partial_fit的过程中修改参数,尽管partial_fit应该在每次接触一批新的小批数据时就重新验证参数。相反,warm_start用于将相同的估算器与相同的数据重复拟合,但参数会变化。
像fit一样,partial_fit应该返回估算器对象。
要清除模型,应构造一个新的估算器,例如使用base.clone。
注意:拟合后使用partial_fit会导致未定义的行为。
predict 预测
对每个样本进行预测,通常仅将X作为输入(但请参见下文中的 关于回归输出的业界约定)。在分类器或回归器中,预测结果和拟合中使用数据是在同一目标空间中(比如说,拟合的时候标签是{”红色“,”琥珀色“,”绿色“},则预测出的y也必然是这三个词之一的字符串)。尽管如此,即使传递给fit的y是列表或其他类似数组的元素,predict的输出也应始终是数组或稀疏矩阵。在聚类器或离群值检测器中,预测值是整数。
如果估算器尚未拟合,则调用此方法会引发错误exceptions.NotFittedError。
关于输出值的一些行业惯例:
分类器 classifier
形状为(n_samples, )或(n_samples, n_outputs)的数组。如果在拟合中使用稀疏矩阵,则多标签数据可以表示为稀疏矩阵。每个元素应为分类器的classes_属性中的值之一。
聚类器 clusterer
形状为(n_samples, )的数组,其中每个值都从0到 n_clusters-1 如果相应的样本已经聚类;如果样本尚未聚类,则为-1,如cluster.dbscan中描述的一样。
离群值检测器 outlier detector
形状为(n_samples, )的数组,其中离群值对应-1,非离群值对应1。
回归器 regressor
一个形状为(n_samples, )的数字数组,通常为六十四位浮点数(float64)。一些回归器在其预测方法中具有其他选项,允许它们返回相对于预测值的标准差(return_std = True)或协方差(return_cov = True)。在这种情况下,返回值是一个数组的元组,对应于所需的(预测平均值,std,cov)。
predict_log_proba 预测概率的对数
为促进数值稳定性而提供的方法,用以输出predict_proba中输出值的自然对数。
predict_proba 预测概率
分类器和聚类器中的一种方法,可以返回每个类/聚类的概率估计。它的输入通常只是一些观察到的数据X。
如果估算器尚未拟合,则调用此方法会引发错误exceptions.NotFittedError。
其输出的行业约定类似于方法Decision_function的约定,但在二分类的情况下,每一类别输出一列(而Decision_function输出一个一维数组)。对于二分类和多分类预测,每行的所有值加起来应该等于1。
像其他方法一样,只有在估算器可以进行概率预测时(请参阅鸭子类型 duck typing),才能提供predict_proba接口。这意味着该方法的存在可能取决于估算器的参数(例如在linear_model.SGDClassifier中)或训练数据(例如在model_selection.GridSearchCV中),并且可能仅在拟合之后出现。
score 得分
估计器(通常是预测器)上的一种方法,用于对给定数据集评估其预测结果,并返回单个数值。在评分器中只能够使用积极指标,即返回的数字越大,模型得分越高的指标。默认情况下,准确率(accuracy)用于分类器,用于回归器。
如果估算器尚未拟合,则调用此方法会引发错误exceptions.NotFittedError。
一些估算器可以实现定制的、特定于估算器的得分函数,通常是模型下数据的似然性。
score_samples 得分样本
尚未开发,待做事项。
如果估算器尚未拟合,则调用此方法会引发错误exceptions.NotFittedError。
set_params 设置参数
在任何估计器中都可用,采用与get_params中的键相对应的关键字参数。每个参数都提供一个新值以进行分配,以便在set_params之后调用get_params,后者可反映更改后的参数。大多数估算器使用base.BaseEstimator来实现该功能,该实现处理嵌套参数,并将这些参数设置为估算器上的属性。该方法在pipeline.Pipeline和相关估计量中被覆盖。
split 分裂
在交叉验证分割器(注意不是估计器)上,此方法接受形状为(X, y, 组)的参数组合,其中所有参数都是可选的,并返回一个针对(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,这些权重与sample_weight中指定的权重相乘。同样,在多输出(包括多标签)任务中使用class_weight的情况下,权重将在输出(即y的列)之间相乘。
默认情况下,所有样本的权重均等,因此可以通过其在训练数据中的普遍性来有效地对类别进行加权。对于所有类标签,可以使用class_weight={label1: 1, label2: 1, ...}来明确指定每个类别的权重。
更一般地,class_weight被指定为将标签类别映射到权重的字典({class_label:weight}),这样每个有名称的类的每个样本都会被赋予该权重。
使用"balanced"模式,将会使用y的值自动调整与输入数据中的类频率成反比的权重,比如 n_samples/(n_classes∗np.bincount(y) )。根据算法的不同,类别权重的使用也会有所不同:对于线性模型(例如线性支持向量机或逻辑回归),类别权重将通过使用样本权重对每个样本的损失进行加权来更改损失函数。对于基于树的算法,将使用类别权重对分割标准进行重新加权。但是请注意,这种重新平衡并未考虑每个类别中样本的权重。
对于多输出问题(包括多标签问题),一个字典的列表被用于定义每个输出的权重。(译者注:定义的权重必须具体到每个标签下的每个类,其中类是字典键值对中的键,权重是键值对中的值。)比如说,对于有四个标签,且每个标签是二分类(0和1)的分类问题而言,权重应该被表示为: [{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.compute_class_weight进行验证和解释。
cv 交叉验证
确定在基于交叉验证流程中使用的交叉验证拆分策略。在诸如multioutput.ClassifierChain或calibration.CalibratedClassifierCV之类的估算器中也可以使用cv,它使用一个估算器的预测作为另一估算器的训练数据,而不会使训练监督过拟合。
cv的可能输入通常是:
一个整数,指定K折交叉验证中的折数。如果估计量是分类器(由base.is_classifier确定),并且目标可能表示二分类或多类(但不是多输出)的分类问题(由utils.multiclass.type_of_target确定),则K-fold将按类进行分层。
交叉验证分割器的实例。有关Scikit-learn中可用的分离器的信息,请参阅《用户指南》。
可迭代的、已按数量分好的训练集/测试集拆分列表。
除某些例外情况(特别是完全不使用交叉验证的情况),cv参数的默认值为5折。
cv值通过utils.check_cv进行验证和解释。
kernel 核
研发中,尚未完成。
max_iter 最大迭代次数
对于涉及迭代优化的估算器,这个参数确定了要执行的最大迭代次数。如果max_iter迭代在没有收敛的情况下运行,则将引发异常.ConvergenceWarning。请注意,各个估算器对“单次迭代”的解释是不一致的:一些(但不是全部)用它来表示单个时期(epoch,即,对数据中的每个样本进行传递)。
待修正:也许我们应该对ConvergenceWarning和max_iter之间的关系进行一些常规测试。
memory 记忆
一些估算器利用joblib.Memory在拟合期间存储部分解决方案。因此,当再次调用fit时,这些局部解决方案已被记忆并可以重复使用。
memory参数可以将内存参数指定为具有目录路径的字符串,也可以使用内存实例joblib.Memory(或具有类似接口的对象,即缓存方法)。
参数memory的值通过utils.validation.check_memory进行验证和解释。
metric 距离衡量
作为参数,这是用于确定两个数据点之间距离的机制。请参阅metrics.pairwise_distances。在实践中,对于某些算法,可以使用不正确的距离度量(不遵循三角不等式的度量,例如余弦距离)。
注意:层次聚类使用具有此含义的相似性。
我们还使用metric来指代评估指标,但避免将此意义用作参数名称。
n_components 组件数量
变换器应将输入转换成的特征数量。有关仿射投影的特殊情况,请参见components_。
n_iter_no_change 无提升的迭代数量
停止迭代过程之前(损失函数或衡量指标的值)没有任何改进或提升的迭代次数(译者注:此处的提升并非指代数字变大,而是指向整个模型效果变好的方向改进)。这个参数也被称为为耐心参数。它通常与参数提前停止(early stopping)一起使用,以避免太早停止迭代。
n_jobs 并发线程数
此参数用于指定与joblib并行化的例程应使用多少个并发进程或线程。
n_jobs是整数,指定同时运行的工作程序的最大数量。如果给定1,则完全不使用joblib并行性,这对于调试很有用。如果设置为-1,则将使用所有CPU。对于小于-1的n_job,将使用(n_cpus +1 + n_jobs)。例如,在n_jobs = -2的情况下,将使用除一个以外的所有CPU。
n_jobs默认情况下为“无”,表示未设置;除非当前joblib.Parallel后端上下文另行指定,否则通常将其解释为n_jobs = 1。
有关Joblib的使用及其与scikit-learn交互的更多详细信息,请参阅我们的并行性说明。
pos_label 正样本标签
在不假设正类别的二分类问题中,必须对正类标记进行编码的值。通常需要此值来计算非对称评估指标,例如精确度(precision)和召回率。
random_state 随机数种子
每当随机化是Scikit-learn算法的一部分时,就可以提供random_state参数来控制所使用的随机数生成器。请注意,存在random_state并不意味着总是使用随机化,因为它可能取决于另一个参数,例如shuffle,当该参数存在时,只有被设置为True才会存在随机性问题。
对该参数传递的值将影响算法函数(拟合,分割或任何其他函数,例如k_means)返回的结果的可重复性。random_state的值可能是:
None 无(默认) 使用numpy.random中的全局随机状态实例。多次调用该函数将重用同一实例,并产生不同的结果。 一个整数 使用以给定整数作为种子的新随机数生成器。使用int将在不同的调用中产生相同的结果。但是,值得检查一下您在多个不同的随机种子中的结果是否稳定。流行的整数随机种子为0和42。 一个numpy.random.RandomState实例 使用提供的随机状态,仅影响相同随机状态实例的其他使用者。多次调用该函数将重用同一实例,并产生不同的结果。
utils.check_random_state在内部用于验证输入的random_state并返回RandomState实例。
scoring 评分函数
指定训练模型时要最大化的得分函数(通常在交叉验证中表现),或者在某些情况下指定要报告的多个得分函数。评分函数可以是metrics.get_scorer或可调用接受的字符串,请勿与评估指标混淆,因为后者具有更多样化的API。评分函数也可以设置为“None”(无),在这种情况下,将使用估算器自身的评分函数。请参阅《用户指南》中的评分参数:定义模型评估规则。
在可以评估多个指标的情况下,可以通过唯一字符串列表或以名称为键、可调用项为值的字典的形式给出评分。注意,这没有指定要最大化哪个得分函数,并且为此目的可以使用另一个参数,例如refit。
评分参数使用metrics.check_scoring进行验证和解释。
verbose 日志信息
目前,在Scikit-learn中记录日志的方式不是很一致,但是当作为选项提供时,通常可以使用verbose参数选择不记录日志(设置为False)。任何True值都应启用一些记录功能,但可能需要较大的整数(例如大于10)才能完整显示。详细日志通常打印到“标准输出”。估计器不应使用默认的详细设置在“标准输出”上产生任何输出。
warm_start 热启动
当将估算器重复拟合到同一数据集、但使用多组不同的参数数值(如在网格搜索中找到使性能最大化的值),可以重用从先前参数值中学到的模型内容,从而节省时间。当warm_start为true时,现有的拟合模型属性被用于在随后的拟合调用中初始化新模型。
请注意,这仅适用于某些模型和某些参数,甚至参数值的一些顺序。例如,在构建随机森林时可以使用warm_start将更多的树添加到森林中(增加n_estimators),但不减少其数量。
partial_fit也会在两次调用之间保留模型,但是与热启动有所不同:使用warm_start可以更改参数,并且两次调用之间的数据(或多或少)是一致的,以进行拟合;使用partial_fit,数据会按小批量方式进行更改,但模型参数是保持固定的。
在某些情况下,您想使用warm_start来适应不同但密切相关的数据。例如,最初可能适合数据的一个子集,然后对整个数据集上的参数搜索进行微调。对分类算法而言,所有在warm_start被调用时用以训练的数据必须包括全部分类下的样本。
属性
请参阅概念"属性"。
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_。
数据和样本属性
请参阅概念"样本属性"。
group 组
用于交叉验证过程中以识别相关样本。每个值都是一个标识符,这些标识符确保在支持的交叉验证分割器中,来自某些组值的样本不会同时出现在训练集及其相应的测试集中。请参阅《交叉验证迭代器以获取分组数据》。
sample_weight 样本权重
每个样品的相对权重。直观地说,如果所有权重都是整数,则加权模型或分数应等于按样本权重中指定的次数重复样本时计算得出的模型。权重可以指定为浮点数,这样,样本权重通常等于一个恒定的正比例因子。
待修正:这种解释在实践中是否总是这样?我们没有执行普遍性测试。
一些估算器(例如决策树)支持负权重。待修正:许多估算器可能未测试或未记录此功能。
在模型的其他参数考虑区域中的样本数量时,情况并非完全由sample_weight参数掌握,就像cluster.DBSCAN中的min_samples一样。在这种情况下,样本的数量等于它们的权重之和。
在分类中,还可以使用class_weight estimator参数将样本权重指定为类别的函数。
X 特征矩阵
表示在训练和预测时观察到的数据,用作学习中的自变量。该符号为大写,表示它通常是矩阵(请参见矩形)。当是矩阵时,每个样本都可以由特征向量或与每个训练样本预先计算(不相似)的向量表示。 X也可能不是矩阵,并且可能需要特征提取器或成对度量标准才能在学习模型之前将其转换为一个矩阵。
Xt 转换的特征矩阵
“已转换的X”的简写。
Y/y 标签
表示在训练时可以观察到的客观数据,作为学习中的因变量,但在预测时不可用,通常是预测的目标。该符号可以是大写,以表示它是一个矩阵,例如代表多输出目标。但是通常我们使用y,即使假设有多个输出,有时也使用y。