scikit-learn 术语与规范
通用术语和API元素词汇表
本词汇表希望明确地代表Scikit-learn及其API中应用的默认和明确的约定,同时为用户和贡献者提供参考。它旨在描述概念,并详细说明其相应的API或链接到文档的其他相关部分。通过链接API参考和用户指南中的词汇表条目,我们可以最大限度地减少冗余和不一致。
我们首先列出一般概念(以及任何其他地方不适合的概念),但下面列出了更具体的相关术语集: 类API和估算器类型,目标类型, 方法,参数, 属性,数据和样本属性。
一般概念
1D
1d数组
一维数组。NumPy数组,其.shape长度为1.向量。
2D
2d数组
二维数组。NumPy数组,其.shape长度为2.通常表示矩阵。
API
指Scikit-learn中实现的估计器的特定接口和本术语表中描述的各种估计器的通用约定,并在贡献者文档中进行了概述。
构成Scikit-learn的公共API的特定接口主要在API Reference中记录。但是,如果没有访问它所需的标识符,我们就不会正式将任何内容视为公共API _。我们通常会尝试维护公共API中所有对象的向后兼容性。
私有API,包括开始的功能,模块和方法_ ,不能保证稳定。
数组
用于输入 Scikit-learn估计器和函数的最常见数据格式,类似于数组的任何类型对象, numpy.asarray它将生成适当形状(通常为1或2维)适当dtype(通常为数字)的数组。
这包括:
一个numpy数组
一个数字列表
一些固定长度为k的长度为k的列表
a pandas.DataFrame,所有列都是数字
一个数字 pandas.Series
它不包括:
一个稀疏矩阵
迭代器
发电机
需要注意的是输出从scikit学习估计和功能(例如预测)一般应阵列或稀疏矩阵,或它们的列表(如在多输出tree.DecisionTreeClassifier的 predict_proba)。predict()返回列表或pandas.Series的估算器无效。
属性
属性
我们主要使用属性来指代在拟合期间如何将模型信息存储在估计器中。存储在估算器实例上的任何公共属性都需要以字母字符开头,如果在fit或 partial_fit中设置,则以单个下划线结尾。这些是在估算器的 属性文档中记录的内容。存储在属性中的信息通常是:用于预测或转换的足够统计数据; 转换输出,如labels_或 embedding_ ; 或诊断数据,例如 feature_importances_。常见属性如下所示。
公共属性可以与构造函数参数具有相同的名称 ,并_附加。这用于存储用户输入的验证或估计版本。例如, decomposition.PCA用n_components 参数构造。由此,PCA与其他参数和数据一起估计属性n_components_。
预测/转换等中使用的其他私有属性。也可以在安装时设置。它们以单个下划线开头,并且不能保证对公共访问稳定。
估计器实例上的公共属性不以下划线结尾,应该是同名__init__ 参数的存储的未修改值。由于这种等价性,这些都记录在估算器的参数文档中。
向后兼容性
我们通常会尝试从发行版到发行版保持向后兼容性(即接口和行为可以扩展但不能更改或删除),但这有一些例外:
仅限公共API
通过私有标识符(那些开始_)访问的对象的行为可以在版本之间任意改变。
记录在案
我们通常会假设用户已遵守记录的参数类型和范围。如果文档要求列表并且用户给出了元组,我们不保证从版本到版本的一致行为。
弃用
行为可能会在弃用期后发生变化(通常为两个版本)。警告是使用Python的warnings模块发出的 。
关键字参数
我们有时可能会假设所有可选参数(X和y除了拟合和类似方法)仅作为关键字参数传递,并且可以在位置上重新排序。
错误修复和增强功能
错误修复和 - 通常 - 增强可能会改变估计器的行为,包括对在相同数据和random_state上训练的估计器的预测。发生这种情况时,我们会尝试在更改日志中清楚地注明。
序列化
我们不保证在一个版本中腌制估算器将允许在随后的版本中将其取消为等效模型。(对于sklearn软件包中的估算器,我们会在尝试进行此类拆除时发出警告,即使它可能正常工作。)请参阅安全性和可维护性限制。
utils.estimator_checks.check_estimator
我们为估算器检查提供有限的向后兼容性保证:我们可能会对使用此功能测试的估算器添加额外要求,通常是在非正式假设但未经过正式测试的情况下。
尽管与我们的用户签订了非正式合同,但软件按照许可证中的规定按原样提供。当版本无意中引入了不向后兼容的更改时,这些更改称为软件回归。
可调用的
实现该__call__ 方法的函数,类或对象; 在callable()的参数时返回True的任何内容。
分类特征
分类或名义特征是在整个数据群中具有有限的离散值集的特征。这些通常表示为整数或字符串列。字符串将被大多数scikit-learn估计器拒绝,整数将被视为序数或计数值。对于大多数估算器的使用,分类变量应该是单热编码的。值得注意的例外包括基于树的模型,如随机森林和梯度增强模型,这些模型通常使用整数编码的分类变量更好,更快。 OrdinalEncoder帮助将字符串值分类特征编码为序数整数, OneHotEncoder并可用于单热编码分类特征。另请参阅编码分类功能和 http://contrib.scikit-learn.org/categorical-encoding包,用于与分类功能编码相关的工具。
克隆
克隆
要复制估算器实例并创建一个具有相同参数但没有任何拟合 属性的新实例,请使用clone。
在fit调用时,元估计器通常在拟合克隆实例之前克隆包装的估计器实例。(例外,由于遗留原因,包括 Pipeline和 FeatureUnion。)
常见测试
这是指在Scikit中几乎每个估算器类上运行的测试 - 学习检查它们是否符合基本的API约定。它们可供外部使用 utils.estimator_checks.check_estimator,大部分实施都在sklearn/utils/estimator_checks.py。
注意:常见测试机制的一些例外目前已硬编码到库中,但我们希望通过使用语义估计器标记在估计器上标记异常行为来替换它。
弃用
我们使用弃用来慢慢违反我们的向后兼容性保证,通常是为了:
更改参数的默认值; 要么
删除参数,属性,方法,类等。
我们通常会在使用不推荐使用的元素时发出警告,尽管可能存在限制。例如,当有人设置已弃用的参数时,我们会发出警告,但是当他们访问估算器实例上的参数属性时,可能不会发出警告。
请参阅“ 贡献者指南”。
维度
可用于指代特征数(即 n_features)或二维特征矩阵中的列。但是,尺寸也用于表示NumPy阵列形状的长度,区分1d阵列和2d矩阵。
文档字符串
模块,类,函数等的嵌入式文档,通常在代码中作为对象定义开头的字符串,并可作为对象的__doc__属性访问。
我们尝试遵循PEP257,并遵循NumpyDoc约定。
双下划线
双下划线表示法
为嵌套估算器指定参数名称时,__可以在某些上下文中用于分隔父级和子级。最常见的用途是通过带有set_params的元估计器设置参数 ,从而在参数搜索中指定搜索网格 。参见参数。它还pipeline.Pipeline.fit用于将样本属性传递 给fit管道中的估计器方法。
D型
数据类型
NumPy数组始终采用同类数据类型,可在.dtype数组(或稀疏矩阵)的属性中使用。我们通常假设scikit-learn数据的简单数据类型:float或integer。在编码或向量化之前,我们可能支持数组的对象或字符串数据类型。例如,我们的估算器不适用于struct数组。
TODO:提到效率和精度问题; 施法政策。
鸭子打字
我们尝试应用duck类型来确定如何处理某些输入值(例如,检查给定的估计器是否是分类器)。也就是说,我们isinstance尽可能避免使用,并依赖属性的存在与否来确定对象的行为。遵循此方法需要一些细微差别:
对于某些估算器,只有在安装后才能使用属性 。例如,我们不能先验地确定 predict_proba是否在网格搜索中可用,其中网格包括在管道的最后步骤中在概率预测器和非概率预测器之间交替。在下文中,我们只能确定clf在将其拟合到某些数据后是否具有概率性:
从 sklearn.model_selection 进口 GridSearchCV
从sklearn.linear_model 进口SGDClassifier CLF = GridSearchCV (SGDClassifier (),param_grid = { '损失' :[ '登录' ,'铰链' ]})这意味着我们只能在拟合后检查鸭类属性,并且我们必须小心使元估计器 仅在拟合后根据基础估计器的状态呈现属性。
检查属性是否存在(使用hasattr)通常与获取属性(getattr或点表示法)一样昂贵。在某些情况下,获取属性可能确实很昂贵(例如,对于feature_importances_的某些实现 ,这可能表明这是API设计缺陷)。因此应该避免使用hasattr后面的代码getattr; getattr在try-except块中是首选。
为了确定估算器对某些功能的期望或支持的某些方面,我们使用估算器标签而不是鸭子类型。
提前停止
这包括在训练损失收敛之前停止迭代优化方法,以避免过度拟合。这通常通过监视验证集上的泛化分数来完成。可用时,通过参数early_stopping或设置正n_iter_no_change激活它 。
估算器实例
我们有时使用这个术语来区分估计 类和构造的实例。例如,在下文中, cls是估计器的类,而est1且est2是实例:cls = RandomForestClassifier
est1 = cls ()
est2 = RandomForestClassifier ()
例子
我们尝试给出API中大多数函数和类的基本用法示例:作为docstrings中的doctests(即在sklearn/库代码本身内)。
作为示例库中的示例 (使用sphinx-gallery)从examples/目录中的脚本中进行 示例,举例说明估算器/函数的关键功能或参数。这些也应该从用户指南中引用。
有时在用户指南(内置doc/)和估算器的技术说明中。
评价指标
评估指标
评估指标可以衡量模型的执行情况。我们可以特别使用这个术语来指代metrics (忽略metrics.pairwise)中的函数,这与交叉验证中使用的 得分方法和评分 API不同。参见模型评估:量化预测的质量。这些函数通常接受基础事实(或度量评估聚类而没有基本事实的原始数据)和预测,无论是predict(y_pred),predict_proba(y_proba)的输出,还是包括decision_function(y_score)的任意分数函数的输出。。_score如果较高的分数表示更好的模型,并且_loss较小的分数表示更好的模型,则通常将函数命名为结束。这种多样化的界面激发了评分API。
请注意,某些估算工具可以计算未包含在内的指标,metrics并且是特定于估算工具的指标,尤其是模型可能性。
估算器标签
提议的特征(例如#8022),通过该特征通过一组语义标签来描述估计器的能力。这将启用基于估计器检查的一些运行时行为,但它也允许每个估计器测试适当的不变性,同时从其他常见测试中排除。估计器标签的某些方面目前通过类似方法的鸭子类型predict_proba以及估算器对象上的一些特殊属性来确定:
_estimator_type
这个字符串值属性将估计器标识为分类器,回归器等。它由mixins设置,例如 base.ClassifierMixin,但需要在元估计器上更明确地采用。它的值通常应该通过帮助器来检查,例如base.is_classifier。
_pairwise
此布尔属性指示X传递给的data() fit和类似方法是否包含对样本的成对度量,而不是每个样本的特征表示。通常情况True下,估算器具有值为“预计算” 的metricor affinity或kernel参数。其主要目的是当元估计器 提取用于成对估计器的数据的子样本时,需要在两个轴上索引数据,而其他数据仅在第一轴上索引。
功能
功能
特征向量
在摘要中,特征是将采样对象映射到数字或分类数量的函数(在其数学意义上)。“特征”也常用于指代这些量,是表示样本的向量的各个元素。在数据矩阵中,要素表示为列:每列包含将要素函数应用于一组样本的结果。其他功能称为属性,预测变量,回归量或自变量。
几乎所有scikit-learn中的估计都假设特征是数字的,有限的而不是缺失的,即使它们具有语义上不同的域和分布(分类,序数,计数值,实值,间隔)。另请参见分类功能和 缺失值。
n_features 表示数据集中的要素数。
拟合
在估算器上调用fit(或fit_transform,fit_predict等)。
拟合
拟合后估算器的状态。没有传统的程序来检查是否安装了估算器。但是,一个不适合的估算器:
exceptions.NotFittedError当调用预测方法(预测,变换等)时应该提高。(utils.validation.check_is_fitted在内部用于此目的。)
不应该有任何以字母字符开头并以下划线结尾的属性。(注意,属性的描述符可能仍然存在于类中,但hasattr应该返回False)
功能
我们为许多算法提供ad hoc函数接口,而 估计器类提供更一致的接口。特别是,Scikit-learn可以提供一个函数接口,使模型适合某些数据并返回学习的模型参数,如 linear_model.enet_path。对于转换模型,这也返回嵌入或簇标签,如 manifold.spectral_embedding或cluster.dbscan。许多预处理变换器还提供了一个函数接口,类似于调用fit_transform,如 preprocessing.maxabs_scale。使用这些等效函数时, 用户应小心避免 数据泄漏fit_transform。
我们没有关于何时或何时不提供估计器的函数形式的严格策略,但维护者应该考虑与现有接口的一致性,以及提供函数是否会导致用户误入最佳实践(关于数据泄漏等)
画廊
见例子。
超参数
超参数
参见参数。
估算
估算
大多数机器学习算法要求其输入没有 缺失值,并且如果违反此要求将无法工作。试图填充(或估算)缺失值的算法称为插补算法。
可索引的
一个阵列状,稀疏矩阵,熊猫数据帧或序列(通常是列表)。
归纳
归纳
归纳(与转换对比)机器学习构建了一些数据模型,然后可以应用于新实例。Scikit-learn中的大多数估计都是归纳的,具有预测 和/或变换方法。
JOBLIB
Scikit中使用的Python库(http://joblib.readthedocs.io) - 学习简化并行和缓存。Joblib旨在有效地处理numpy数组,例如通过使用 内存映射。有关更多信息,请参阅并行和分布式计算
标签指示矩阵
多标签指标矩阵
多标记指标矩阵
用于表示多标记数据的格式,其中2d数组或稀疏矩阵的每一行对应于一个样本,每列对应一个类,如果样本用类标记,则每个元素为1,否则为0。
泄漏
数据泄漏
交叉验证中的问题,其中泛化性能可能被高估,因为测试数据的知识无意中包括在训练模型中。例如,当将变换器应用于整个数据集而不是交叉验证拆分中的每个训练部分时,这是一种风险。我们的目标是提供保护用户免受数据泄漏的接口(例如pipeline和 model_selection)。
memmapping
记忆图
内存映射
一种内存效率策略,可将数据保存在磁盘上,而不是将其复制到主内存中。可以使用可以读取,写入或两者的阵列创建存储器映射numpy.memmap。当使用joblib并行化Scikit-learn中的操作时,它可以自动memmap大型数组,以减少多处理中的内存重复开销。
缺失值
大多数Scikit-learn估算器不适用于缺失值。当它们(例如,在impute.SimpleImputer)时,NaN是浮点数组中缺失值的首选表示。如果数组具有整数dtype,则无法表示NaN。因此,我们支持在整数空间中执行插补或学习missing_values时指定另一个值。 未标记的数据 是目标中缺失值的特殊情况。
n_features
功能的数量。
n_outputs
的数量输出在目标。
n_samples
样本数量。
n_targets
n_outputs的同义词。
叙事文档
叙事文件
用户指南的别名,即写入的文档doc/modules/。与通过文档字符串提供的API参考不同,用户指南旨在:Scikit提供的小组工具 - 按主题或用法学习;
激励为什么有人会使用每种特定的工具,通常是通过比较;
提供工具的直观和技术描述;
提供或链接到使用工具的关键功能的示例。
NP
由于传统的进口声明,Numpy的简写:导入 numpy 为 np
在线学习
通过在对相应批次的数据进行预测之后立即接收每批地面实况目标来迭代更新模型。从本质上讲,该模型必须可用于每批后的预测。见partial_fit。
核心外的
一种效率策略,通常通过对批量数据进行学习,而不是所有数据一次存储在主存储器中。见 partial_fit。
输出
目标中每个样本的单个标量/分类变量 。例如,在多标签分类中,每个可能的标签对应于二进制输出。也称为响应, 任务或目标。请参阅多类多输出和连续多输出。
对
长度为2的元组。
参数
参数
参数
参数
我们主要使用参数来指代可以在其构造中指定的估计器的方面。例如,max_depth并且 random_state是参数RandomForestClassifier。估计器构造函数的参数未经修改地存储为估计器实例上的属性,并且通常以字母字符开头并以字母数字字符结尾。每个估算器的构造函数参数都在估算器的docstring中描述。我们不使用统计意义上的参数,其中参数是指定模型的值并且可以从数据估计。我们所谓的参数可能是统计学家将超参数称为模型的方面:配置模型结构的方面通常不是直接从数据中学习的。但是,我们的参数也用于规定不影响学习模型的建模操作,例如用于控制并行性的n_jobs。
在讨论元估计器的参数时,我们还可以包括由元估计器包装的估计器的参数。通常,这些嵌套参数通过使用双下划线(__)来表示,以在estimator-as-parameter和其参数之间进行分隔。因此 具有值的深度参数,可以使用或 访问。clf = BaggingClassifier(base_estimator=DecisionTreeClassifier(max_depth=3))base_estimator__max_depth3clf.base_estimator.max_depthclf.get_params()['base_estimator__max_depth']
可以使用其get_params方法从估计器实例中检索参数列表及其当前值。
在构造和拟合之间,可以使用set_params修改参数 。要启用此功能,在构造估算器或设置每个参数时,通常不会验证或更改参数。调用fit时执行参数验证。
常见参数如下所列。
成对度量
成对度量
从广义上讲,成对度量定义了用于测量两个样本之间的相似性或不相似性的函数(每个样本通常表示为特征向量)。我们特别提供了距离度量(以及不正确度量,如余弦距离)metrics.pairwise_distances以及内核函数(相似函数的约束类)的实现 metrics.pairwise_kernels。这些可以计算对称的成对距离矩阵,因此冗余地存储数据。另请参阅预先计算和指标。
请注意,对于大多数距离指标,我们依赖于实现 scipy.spatial.distance,但可能会重新实现我们上下文中的效率。该neighbors模块还复制了一些度量实现,以便与高效的二叉树搜索数据结构集成。
PD
由于传统的进口声明,熊猫的简写:将 pandas 导入为 pd
预先计算的
如果算法依赖于成对度量,并且可以仅从成对度量计算,我们通常允许用户指定所提供的X已经在成对(dis)相似性空间中,而不是在特征空间中。也就是说,当传递到 拟合时,它是方形的对称矩阵,每个向量指示(dis)与每个样本的相似性,并且当传递给预测/变换方法时,每行对应于测试样本并且每列对应于训练样品。预先计算的X的使用通常是通过设置一个指示metric, affinity或kernel参数为“预先计算”的字符串。如果是这种情况,估算人员应将自己标记为_pairwise。
矩形
可以表示为具有第一轴上的样本和第二轴上的固定的有限特征集的矩阵的数据被称为矩形。该术语排除具有非矢量结构的样本,例如文本,任意大小的图像,任意长度的时间序列,一组矢量等。矢量化器的目的是产生这种数据的矩形形式。
样品
样品
我们通常使用该术语作为名词来表示单个特征向量。在其他地方,样本称为实例,数据点或观察。 n_samples表示数据集中的样本数,即数据数组X中的行数。
样本属性
样本属性
样本属性是传递给估计器方法或类似函数的每个样本(例如,长度n_samples的数组)的数据,与特征(X)和 目标(y)不同但不同。最突出的例子是 sample_weight ; 在数据和样本属性中查看其他人。从版本0.19开始,虽然经常使用参数,但我们没有一致的方法来处理元估计器中的样本属性及其路由fit_params。
scikit学习-的contrib
发布Scikit-learn兼容库的场所,这些库由核心开发人员和贡献社区广泛授权,但不由核心开发人员团队维护。见http://scikit-learn-contrib.github.io。
半监督
半监督学习
半监督
了解预期预测(标签或地面实况)仅适用于在拟合模型时作为训练数据提供的某些样本 。我们通常将标签-1 应用于半监督分类中的未标记样本。
稀疏矩阵
二维数值数据的表示,其对应的密集numpy数组具有更高的内存效率,其中几乎所有元素都为零。我们使用scipy.sparse框架,它提供了几种基础稀疏数据表示或格式。对于特定任务,某些格式比其他格式更有效,并且当特定格式提供特殊益处时,我们尝试在Scikit-learn参数描述中记录此事实。一些稀疏矩阵格式(特别是CSR,CSC,COO和LIL)区分隐式和显式零。data在数据结构中存储显式零(即它们消耗数组中的存储器),而隐式零对应于未在显式存储中另外定义的每个元素。
在Scikit-learn中使用稀疏矩阵的两个语义:
矩阵语义
稀疏矩阵被解释为具有隐式和显式零的数组,其被解释为数字0.这是最常采用的解释,例如当稀疏矩阵用于特征矩阵或多标记指示符矩阵时。
图语义
与此同样scipy.sparse.csgraph,显式零被解释为数字0,但隐式零表示屏蔽或缺少值,例如图形的两个顶点之间没有边缘,其中显式值表示边缘的权重。采用该解释来表示聚类中的连通性,最近邻域的表示(例如neighbors.kneighbors_graph),以及预计算距离表示,其中仅需要每个点附近的距离。
在处理稀疏矩阵时,我们假设它是稀疏的,并且避免编写使用户提供的稀疏矩阵变得密集的代码,而是在不可能的情况下保持稀疏性或引发错误(即,如果估算器不支持/不支持稀疏矩阵)。监督
监督学习
在拟合模型时,学习每个样本的预期预测(标签或基础事实)的位置,以 y表示。这是在其他估算器中的分类器或 回归器中采用的方法。
目标
目标
所述因变量在监督(和 半监督)的学习,它被传递ÿ到一个估计的 拟合方法。也称为因变量,结果变量,响应变量,基础事实或标签。Scikit-learn适用于具有最小结构的目标:来自有限集的类,有限实值数,多个类或多个数。请参阅目标类型。
转导
转导
转换(与感应对比)机器学习方法被设计用于对特定数据集建模,但不将该模型应用于看不见的数据。实例包括manifold.TSNE, cluster.AgglomerativeClustering和 neighbors.LocalOutlierFactor。
未标记的
未标记的数据
装配时具有未知真实性的样品; 等效, 遗漏值的目标。另见 半监督和无监督学习。
无人监督
无监督学习
学习拟合模型时每个样本无法获得预期预测(标签或基础事实)的位置,如 聚类器和异常检测器。无监督的估计者忽略任何传递给适合的y。
类API和估算器类型
分类器
分类器
甲监督(或半监督)预测器 具有有限组离散可能输出值的。分类器支持对二进制, 多类,多标记或多类多输出目标进行建模。在scikit-learn中,所有分类器都支持多类分类,默认使用one-vs-rest策略而不是二元分类问题。
分类器必须在拟合后存储classes_属性,并且通常继承自base.ClassifierMixin设置其_estimator_type属性的类。
分类器可以与其他估计器区分开来 is_classifier。
分类器必须实现:
适合
预测
得分了
实现decision_function, predict_proba和predict_log_proba也可能是合适的。人聚类
聚类
甲无监督 预测器具有有限组离散的输出值的。群集器通常在拟合后存储标签_,如果它是转换的,则必须这样做。
群集必须实现:
适合
如果转换,fit_predict
预测是否归纳
密度估算器
去做
估算器
估算器
管理模型的估计和解码的对象。该模型被估计为确定性函数:在对象构造中或使用 set_params提供的 参数 ;
numpy.random如果估计器的random_state参数设置为None,则为全局随机状态 ; 和
传递给fit,fit_transform或fit_predict的最新调用的任何数据或样本属性,或者在对partial_fit的一系列调用中类似传递的数据 。
估计的模型存储在 估计器实例上的公共和私有属性中,便于通过预测和变换方法进行解码。估计器必须提供fit方法,并且应该提供 set_params和get_params,尽管这些通常是通过继承来提供的base.BaseEstimator。
某些估算器的核心功能也可作为 功能提供。
特征提取器
特征提取器
甲变压器这需要每个样品不表示为输入阵列状的固定长度的对象,并产生一个阵列状的物体的特征对每个样品(因此状阵列为一组样本2维)。换句话说,它(有损)将非矩形数据表示映射成 矩形数据。特征提取器必须至少实现:
适合
转变
get_feature_names
元估计
元估计
metaestimator
metaestimators
一种估计这需要另一种估计作为参数。实例包括pipeline.Pipeline, model_selection.GridSearchCV, feature_selection.SelectFromModel和 ensemble.BaggingClassifier。在元估计器的拟合方法中,任何包含的估计器都应该在它们拟合之前克隆(尽管FIXME:Pipeline和FeatureUnion目前不这样做)。一个例外是估计器可以明确地证明它接受预先安装的估计器(例如,使用prefit=Truein feature_selection.SelectFromModel)。对此的一个已知问题是,如果克隆了元估计器,则预先安装的估计器将丢失其模型。元fit预测器应该在预测之前调用,即使所有包含的估计器都是预先安装的。
在元估计器的主要行为(例如, 预测或变换实现)是所提供的基础估计器(或多个基础估计器)的预测/变换方法的函数的情况下,元估计器应该至少提供由基础提供的标准方法。估计。在元估计器已经拟合之前,可能无法确定底层估计器提供哪些方法(参见 鸭子打字),这 utils.metaestimators.if_delegate_has_method可能有所帮助。它还应提供(或修改)基本估计器提供的估计器标签和 classes_属性。
在将数据传递给基础估算器之前,元估计应该尽可能小地验证数据。这节省了计算时间,并且可以例如允许基础估计器容易地处理非矩形的数据。
离群检测器
离群检测器
一种无监督的二元预测器,用于模拟核心和外围样本之间的区别。异常检测器必须实现:
适合
如果转换,fit_predict
预测是否归纳
归纳异常值检测器还可以实现 decision_function以给出归一化的内部分数,其中异常值得分低于0. score_samples可以提供每个样本的非标准化分数。预测器
预测者
支持预测和/或 fit_predict的估算器。这包括分类器, 回归器,异常值检测器和聚类器。在统计中,“预测变量”指的是特征。
回归者
回归量
甲监督(或半监督)预测 与连续输出值。回归函数通常继承自base.RegressorMixin,设置_estimator_type属性。
可以将回归量与其他估计量区分开来 is_regressor。
回归量必须实现:
适合
预测
得分了
变压器
变形金刚
支持变换和/或fit_transform的估算器。纯转换变压器,例如 manifold.TSNE,可能无法实现transform。
矢量化器
矢量化器
请参阅功能提取器。
还有一些API专门与一小部分估算器相关,例如:交叉验证分离器
CV分离器
交叉验证生成器
用于将数据集拆分为一系列训练和测试部分的非估计器类系列(请参阅交叉验证:评估估计器性能),方法是提供split和get_n_splits方法。请注意,与估算器不同,它们没有拟合方法,也没有提供set_params或get_params。可以在中执行参数验证__init__。
得分手
非估计器可调用对象,用于评估给定测试数据的估计器,返回一个数字。与评估指标不同,返回的数字越大,分数越高。请参阅评分参数:定义模型评估规则。
更多例子:neighbors.DistanceMetric
gaussian_process.kernels.Kernel
tree.Criterion
目标类型
二进制
由两个类组成的分类问题。二进制目标可以表示为多类问题,但只有两个标签。二元决策函数表示为1d数组。在语义上,一个类通常被认为是“积极的”类。除非另有说明(例如在 评估指标中使用pos_label),我们认为类标签具有更大的值(数字或词典)作为正类:标签[0,1],1是正类; [1,2],2是正类; ['不','是'],'是'是正面的; ['不','是'],'不'是正面的。例如,这会影响decision_function的输出 。
请注意,从多类y或连续 采样的数据集y可能看起来是二进制的。
type_of_target 将为二进制输入返回'binary',或者仅存在一个类的类似数组。
连续
回归问题,其中每个样本的目标是有限浮点数,表示为浮点数(或有时是整数)的一维数组。type_of_target 对于连续输入,将返回“连续”,但如果数据全部为整数,则将其标识为“多类”。
连续多输出
多输出连续
一个回归问题,其中每个样本的目标由n_outputs 输出组成,每个输出都是一个有限的浮点数,用于特定数据集中的固定int 。n_outputs > 1连续多输出目标表示为多个 连续目标,水平堆叠成一个形状阵列。(n_samples, n_outputs)
type_of_target 将为连续多输出输入返回“连续多输出”,但如果数据全部为整数,则将其标识为“多类多输出”。
多类
由两个以上类组成的分类问题。多类目标可以表示为字符串或整数的1维数组。整数的2D列向量(即,在一个单一的输出多输出方面)也是可以接受的。我们没有正式支持其他可订购的,可清洗的对象作为类标签,即使估计器在给定此类类型的分类目标时可能会发生工作。
对于半监督分类,未标记的样本应具有特殊标签-1 in y。
在sckit-learn中,支持二进制分类的所有估计器也支持多类分类,默认情况下使用One-vs-Rest。
A preprocessing.LabelEncoder有助于将多类目标规范化为整数。
type_of_target将为多类输入返回'multiclass'。用户可能还希望将“二进制”输入与“多类”相同地处理。
多类多输出
多输出多类
一个分类问题,其中每个样本的目标由n_outputs 输出组成 ,每个输出都是一个类标签,用于特定数据集中的固定int 。每个输出都有一组固定的可用类,每个样本都标有每个输出的类。输出可以是二进制或多类,并且在所有输出都是二进制的情况下,目标是 多标记。n_outputs > 1多类多输出目标表示为多个 多类目标,水平堆叠成一个形状数组。(n_samples, n_outputs)
XXX:为简单起见,我们可能并不总是支持多类多输出的字符串类标签,应该使用整数类标签。
multioutput提供使用多个单输出估计器估计多输出问题的估计器。这可能无法完全解释不同输出之间的依赖关系,本地处理多输出情况的方法(例如决策树,最近邻居,神经网络)可能做得更好。
type_of_target 将为多类多输出输入返回'multiclass-multioutput'。
多标签
阿多类多输出目标,其中每个输出是 二进制。这可以表示为2d(密集)阵列或整数的稀疏矩阵,使得每列是单独的二进制目标,其中正标签用1表示,负标签通常是-1或0.不支持稀疏多标记目标到处都支持密集的多标记目标。在语义上,多标记目标可以被认为是每个样本的一组标签。虽然不在内部使用, preprocessing.MultiLabelBinarizer但作为实用程序提供,以从集合表示的列表转换为2d数组或稀疏矩阵。对多类目标进行单热编码 preprocessing.LabelBinarizer会将其转化为多标记问题。
type_of_target 将为多标签输入返回'multilabel-indicator',无论是稀疏还是密集。
多输出
多输出
每个样本具有多个分类/回归标签的目标。请参阅多类多输出和连续多输出。我们目前不支持对混合分类和回归目标进行建模。
方法
decision_function
在装配分类或异常值检测器,预测用于相对于各样品每个类,而不是由制造的“硬”分类预测的“软”的分数预测。它的输入通常只是一些观察到的数据,X。如果估算器尚未安装,则调用此方法应该提高a exceptions.NotFittedError。
输出惯例:
二元分类
一维数组,其中严格大于零的值表示正类(即classes_中的最后一个类 )。
多类分类
一个二维数组,其中行方式arg-maximum是预测类。列按照 classes_排序。
多标签分类
Scikit-learn在多标签决策函数的表示方面不一致。一些估计器将其表示为多类多输出,即2d阵列的列表,每个阵列具有两列。其他人用单个2d数组表示它,其列对应于各个二进制分类决策。后一种表示与多类分类格式模糊地相同,尽管它的语义不同:它应该像二进制情况一样通过阈值处理来解释。TODO:这个要点 强调了使用不同格式的多标签。
多输出分类
2d数组的列表,对应于每个多类决策函数。
异常值检测
一维数组,其中大于或等于零的值表示内部。
fit
fit在每个估计器上提供该方法。它通常需要一些样本 X,如果模型受到监督则需要 目标 y,以及潜在的其他样本属性,例如 sample_weight。这应该:清除估算器上存储的任何先前属性,除非使用 warm_start ;
验证和解释任何参数,理想情况下如果无效则引发错误;
验证输入数据;
根据估计的参数和提供的数据估计和存储模型属性; 和
返回现在拟合的估计器以方便方法链接。
目标类型描述了可能的格式y。fit_predict
尤其用于无监督,直推式 估计,这符合模型和返回预测(类似于 预测训练数据)。在clusterer中,这些预测也存储在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实施的一个原因fit_transform是执行fit 和transform单独执行效率低于一起。 base.TransformerMixin提供默认实现,在变换器之间提供一致的接口,其中 fit_transform是或不是专用的。
在归纳学习中 - 目标是学习可应用于新数据的通用模型 - 用户fit_transform在进一步建模之前应注意不要应用于整个数据集(即一起训练和测试数据),因为这导致数据泄漏。
get_feature_names
主要用于特征提取器,但也用于其他变换器,为估算器变换方法的输出中的每列提供字符串名称。它输出一个字符串列表,并可以将一个字符串列表作为输入,对应于可以从中生成输出列名称的输入列的名称。默认情况下,输入要素名为x0,x1,....
get_n_splits
在CV拆分器(不是估计器)上,返回在给定相同参数的情况下迭代split的返回值时将获得的元素 数。采用与拆分相同的参数。
get_params
获取可以使用set_params设置的所有参数及其值 。当设置为False时,可以使用参数仅返回那些不包括的参数,即不是由于通过包含的估计器的间接引起的。deep__大多数估算器都采用了定义base.BaseEstimator,它简单地采用了定义的参数__init__。 pipeline.Pipeline其中包括重新实现,get_params 以声明在其steps参数中命名的估算器本身是参数。
partial_fit
便于以在线方式拟合估算器。不同的是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。
predict
对每个样本进行预测,通常只将X作为输入(但请参见下面的回归量输出约定)。在 分类器或回归量中,该预测与拟合中使用的目标空间相同(例如,如果y拟合由这些字符串组成,则为''red','amber','green'} 之一。尽管如此,即使y传递给fit是一个列表或其他类似的数组,输出predict应始终是一个数组或稀疏矩阵。在 聚类器或异常值检测器中,预测是整数。如果估算器尚未安装,则调用此方法应该提高a exceptions.NotFittedError。
输出惯例:
分类
一排形状。 如果在拟合中使用稀疏矩阵,则多标记数据可以表示为稀疏矩阵。每个元素应该是分类器的classes_属性中的一个值。(n_samples,) (n_samples, n_outputs)
人聚类
一个形状数组,(n_samples,)其中每个值从0到 相应的样本被聚类,如果样本没有聚类,则为-1,如 。n_clusters - 1cluster.dbscan
离群检测器
一个形状数组,(n_samples,)其中每个值对于异常值为-1,否则为1。
回归
形状的数字数组(n_samples,),通常为float64。一些回归量在他们的predict方法中有额外的选项,允许他们返回相对于预测值的标准偏差(return_std=True)或协方差(return_cov=True)。在这种情况下,返回值是根据需要对应于(预测mean,std,cov)的数组的元组。
predict_log_proba
提供predict_proba输出的自然对数,以促进数值稳定性。
predict_proba
分类器和聚类器中的一种方法,能够返回每个类/集群的概率估计。它的输入通常只是一些观察到的数据,X。如果估算器尚未安装,则调用此方法应该提高a exceptions.NotFittedError。
输出约定与decision_function的约定类似,除了二进制分类情况,其中为每个类输出一列(同时decision_function输出1d数组)。对于二进制和多类预测,每行应添加到1。
与其他方法一样,predict_proba只有在估算器可以进行概率预测时才会出现(参见鸭子打字)。这意味着该方法的存在可以取决于估计器参数(例如in linear_model.SGDClassifier)或训练数据(例如in model_selection.GridSearchCV)并且可以仅在拟合之后出现。
score
估算器上的一种方法,通常是预测器,用于评估其对给定数据集的预测,并返回单个数字分数。更高的回报值应表明更好的预测; 精度用于分类器,默认情况下用于回归量的R ^ 2。如果估算器尚未安装,则调用此方法应该提高a exceptions.NotFittedError。
一些估算器实现了自定义的估计器特定的分数函数,通常是模型下数据的可能性。
score_samples
去做如果估算器尚未安装,则调用此方法应该提高a exceptions.NotFittedError。
set_params
可在任何估算器中使用,获取与get_params中的键对应的关键字参数。每个都提供了一个新的值来分配,以便调用get_paramsafter set_params将反映更改的参数。大多数估计器使用实现 base.BaseEstimator,它处理嵌套参数,否则将参数设置为估计器上的属性。该方法被覆盖在pipeline.Pipeline相关的估计器中。
split
在CV拆分器(不是估算器)上,此方法接受参数(X,y,groups),其中all可以是可选的,并返回迭代器 对。{train,test} _idx中的每一个都是1d整数数组,其值为任意长度的0 ,因此在某些和相应的值中都不会出现任何值。(train_idx, test_idx)X.shape[0] - 1train_idxtest_idx
transform
在变换器中,将输入(通常仅为X)转换为某个变换空间(通常标记为Xt)。输出是长度为n_samples的数组或稀疏矩阵,并且在拟合后固定列数。如果估算器尚未安装,则调用此方法应该提高a exceptions.NotFittedError。
参数
这些常用参数名称,特别是在估算器构造中使用(参见概念参数),有时也会出现为函数或非估计构造函数的参数。class_weight
用于在将分类器拟合为目标类的函数时指定样本权重。如果还支持并给出sample_weight,则将其乘以class_weight 贡献。类似地,当class_weight在一个使用 多输出(包括多标记)的任务,所述权重被跨越输出相乘(即,列y)。默认情况下,所有样本都具有相同的权重,以便通过它们在训练数据中的普遍性对类进行有效加权。对于所有类标签,这可以明确地实现。class_weight={label1: 1, label2: 1, ...}
更一般地,class_weight指定为dict将类标签映射到weights(),以便为命名类的每个样本赋予该权重。{class_label: weight}
class_weight='balanced'通过给每个样本提供与其在训练数据中的类别流行度成反比的权重,可以用来给予所有类别相同的权重: 。 但请注意,此重新平衡不会考虑每个类中的样本权重。n_samples / (n_classes * np.bincount(y))
对于多输出分类,使用dicts列表来指定每个输出的权重。例如,对于四级多标签分类权重应该代替。[{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
确定交叉验证拆分策略,用于基于交叉验证的例程。cv也可以在估算器中使用,multioutput.ClassifierChain或者 calibration.CalibratedClassifierCV使用一个估计器的预测作为另一个估计器的训练数据,以免过度训练监督。可能的输入cv通常是:
一个整数,指定K折交叉验证中的折叠数。如果估计量是分类器(由确定base.is_classifier)并且目标可以表示二元或多类(但不是多输出)分类问题(由 确定),则 K-fold将在类上分层utils.multiclass.type_of_target。
一个交叉验证分路器实例。有关Scikit-learn中可用的分割器,请参阅“ 用户指南”。
可迭代的屈服列车/测试分裂。
除了一些例外(特别是不使用交叉验证的选项),默认值为3倍,在版本0.22中将变为5倍。cv值经过验证和解释utils.check_cv。
kernel
去做
max_iter
对于涉及迭代优化的估计器,这确定了拟合中要执行的最大迭代次数。如果 max_iter迭代在没有收敛的情况下运行,则 exceptions.ConvergenceWarning应该引发a。请注意,“单次迭代”的解释在估算器之间是不一致的:有些(但不是全部)使用它来表示单个时期(即对数据中的每个样本进行传递)。FIXME或许我们应该对ConvergenceWarning和max_iter之间的关系进行一些常见的测试。
memory
一些估算器用于joblib.Memory在拟合期间存储部分解决方案。因此,当fit再次调用时,这些部分解决方案已被记忆并且可以重复使用。甲memory参数可以被指定为与到一个目录,或路径的字符串joblib.Memory实例(或具有类似接口的对象,即,cache方法)可以被使用。
memory值经过验证和解释 utils.validation.check_memory。
metric
作为参数,这是用于确定两个数据点之间的距离的方案。见metrics.pairwise_distances。在实践中,对于一些算法,可以使用不适当的距离度量(不遵守三角形不等式的度量,例如余弦距离)。XXX:层次聚类使用affinity具有此含义。
我们还使用度量来指代评估指标,但避免将此含义用作参数名称。
n_components
变换器应将输入转换为的功能数量。有关仿射投影的特殊情况,请参阅components_。
n_iter_no_change
在停止迭代过程之前等待没有改进的迭代次数。这也称为耐心参数。它通常用于提前停止,以避免过早停止。
n_jobs
这用于指定应该为并行化例程使用多少并发进程/线程。Scikit-learn默认使用一个处理器进行处理,尽管它也使用NumPy,NumPy可以配置为使用线程数字处理器库(如MKL;请参阅常见问题解答)。n_jobs是一个int,指定并发运行的作业的最大数量。如果设置为-1,则使用所有CPU。如果给出1,则根本不使用joblib级别并行性,这对于调试很有用。即使使用,也可能由于数字处理库而出现并行性(请参阅常见问题解答)。对于低于-1的n_jobs,使用(n_cpus + 1 + n_jobs)。因此 ,除了一个之外的所有CPU都被使用。n_jobs = 1n_jobs = -2
n_jobs=None意味着未设置 ; 它通常被解释为 n_jobs=1,除非当前joblib.Parallel后端上下文另有说明。
n_jobs在估算器中使用基于并行的方法有所不同:
大多数情况下并行性发生在拟合中,但有时并行性发生在预测中(例如在随机森林中)。
默认情况下,某些并行性使用多线程后端,有些是多处理后端。可以使用覆盖默认后端sklearn.utils.parallel_backend。
并行处理是否有助于提高运行时间取决于许多因素,通常是一个好主意,而不是假设增加工作数总是一件好事。 并行运行某些估算器或函数的多个副本对性能非常不利。
嵌套使用n_jobs具有相同后端的基于并行的将导致异常。所以 不行。GridSearchCV(OneVsRestClassifier(SVC(), n_jobs=2), n_jobs=2)当n_jobs不是1时,并行化的估计器必须是可选择的。这意味着,例如,lambda不能用作估计器参数。
random_state
每当随机化是Scikit-learn算法的一部分时, random_state可以提供参数来控制所使用的随机数发生器。注意,仅仅存在random_state并不意味着总是使用随机化,因为它可能依赖于另一个参数,例如shuffle被设置。random_state的价值可能是:
无(默认)
使用全局随机状态numpy.random。
整数
使用由给定整数播种的新随机数生成器。为了使随机算法具有确定性(即多次运行将产生相同的结果),random_state可以使用任意整数。但是,检查您的结果在许多不同的不同随机种子中是否稳定可能是值得的。流行的整数随机种子是0和42。
一个numpy.random.RandomState实例
使用提供的随机状态,仅影响同一随机状态实例的其他用户。多次调用fit将重用相同的实例,并产生不同的结果。
utils.check_random_state用于内部验证输入random_state并返回RandomState 实例。scoring
指定要最大化的分数函数(通常通过交叉验证),或者 - 在某些情况下 - 要报告多个分数函数。得分函数可以是通过接受一个字符串metrics.get_scorer或一个可调用的射手,不与一个混淆评估度量,因为后者具有更多样化的API。 scoring也可以设置为None,在这种情况下使用估计器的得分方法。请参阅“ 用户指南”中的评分参数:定义模型评估规则。在可以评估多个度量的情况下,scoring可以将其作为唯一字符串列表或以名称作为键的dict和作为值的可调用符号给出。注意,这没有指定要最大化哪个得分函数,以及refit 可以用于此目的的另一个参数。
使用scoring参数进行验证和解释 metrics.check_scoring。
verbose
目前在Scikit-learn中没有非常一致地处理日志记录,但是当它作为选项提供时,该verbose参数通常可用于选择无日志记录(设置为False)。任何True值都应该启用一些日志记录,但可能需要更大的整数(例如,大于10)以获得完整的详细程度。详细日志通常打印到标准输出。估算器不应使用默认verbose设置在标准输出上生成任何输出。
warm_start
当在相同数据集上重复拟合估计器时,但是对于多个参数值(例如在网格搜索中找到最大化性能的值),可以重用从先前参数值学习的模型的方面,从而节省时间。当warm_start为真时,现有的拟合 模型属性 a用于在随后的拟合调用中初始化新模型。请注意,这仅适用于某些模型和某些参数,甚至适用于某些参数值的顺序。例如, warm_start可以在构建随机森林时向森林中添加更多树木(增加n_estimators)但不减少其数量。
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_
将训练数据嵌入到流形学习估计器中,其形状与fit_transform的输出相同。另见 labels_。(n_samples, n_components)
n_iter_
在拟合可能在收敛时停止的迭代估计器时实际执行的迭代次数。另请参见max_iter。
feature_importances_
(n_features,)一些预测变量中可用 的形状矢量,用于提供模型预测中每个特征重要性的相对度量。
labels_
含有用于在训练数据中的每个样本的簇标签矢量clusterers,相同的输出 fit_predict。另见embedding_。
数据和样本属性
请参阅概念样本属性。groups
用于交叉验证程序,以识别相关的样本。每个值都是一个标识符,使得在支持的 CV分离器中,来自某个groups值的样本可能不会出现在训练集及其相应的测试集中。请参阅分组数据的交叉验证迭代器。。
sample_weight
每个样品的相对重量。直观地,如果所有权重都是整数,则加权模型或分数应等于在重复样本时计算的权重中指定的次数。权重可以指定为浮点数,因此样本权重通常等于一个恒定的正比例因子。FIXME这种解释在实践中总是如此吗?我们没有通用的测试。
一些估算器,例如决策树,支持负权重。FIXME:此功能或其缺失可能无法在许多估算器中进行测试或记录。
这并不完全其中该模型的其它参数考虑的区域中的样本的数目,与壳体min_samples中 cluster.DBSCAN。在这种情况下,样本计数变为其权重之和。
在分类中,样本权重也可以使用class_weight估计器参数指定为类的函数。
X
表示在训练和预测时观察到的数据,用作学习中的独立变量。符号是大写的,表示它通常是一个矩阵(见矩形)。当矩阵时,每个样本可以由特征 向量表示,或者与每个训练样本预先计算(dis)相似性的向量。X也可能不是矩阵,并且在学习模型之前可能需要 特征提取器或成对度量将其变为一个。
Xt
“变形X ”的简写。
y
Y
表示在训练时可以观察到的数据作为学习中的因变量,但是在预测时不可用,并且通常是预测的目标。符号可以是大写的,表示它是一个矩阵,例如表示 多输出目标; 但通常我们会使用y ,有时甚至在假定多个输出时这样做。