LbfgsMaximumEntropyMulticlassTrainer 类

定义

使用 IEstimator<TTransformer> L-BFGS 方法训练的最大枚举多类分类器来预测目标。

public sealed class LbfgsMaximumEntropyMulticlassTrainer : Microsoft.ML.Trainers.LbfgsTrainerBase<Microsoft.ML.Trainers.LbfgsMaximumEntropyMulticlassTrainer.Options,Microsoft.ML.Data.MulticlassPredictionTransformer<Microsoft.ML.Trainers.MaximumEntropyModelParameters>,Microsoft.ML.Trainers.MaximumEntropyModelParameters>
type LbfgsMaximumEntropyMulticlassTrainer = class
    inherit LbfgsTrainerBase<LbfgsMaximumEntropyMulticlassTrainer.Options, MulticlassPredictionTransformer<MaximumEntropyModelParameters>, MaximumEntropyModelParameters>
Public NotInheritable Class LbfgsMaximumEntropyMulticlassTrainer
Inherits LbfgsTrainerBase(Of LbfgsMaximumEntropyMulticlassTrainer.Options, MulticlassPredictionTransformer(Of MaximumEntropyModelParameters), MaximumEntropyModelParameters)
继承

注解

若要创建此训练器,请使用 LbfgsMaximumEntropyLbfgsMaximumEntropy (选项)

输入和输出列

输入标签列数据必须是 类型,特征列必须是已知大小的向量 Single

该训练程序输出以下列:

输出列名称 列名称 描述
Score Single 的向量 所有类的分数。 值越高意味着落入相关类的概率越高。 如果第 i 个元素具有最大值,则预测的标签索引为 i。 请注意,i 是从零开始的索引。
PredictedLabel key 类型 预测标签的索引。 如果其值为 i,则实际标签为键值输入标签类型中的第 i 个类别。

训练器特征

机器学习任务 多类分类
是否需要规范化?
是否需要缓存?
除 Microsoft.ML 以外,还需要 NuGet
可导出到 ONNX

评分函数

最大萎缩模型 是线性 逻辑回归的通用化。 最大萎缩模型和逻辑回归之间的主要区别是考虑分类问题中支持的类数。 逻辑回归仅适用于二元分类,而最大萎缩模型处理多个类。 有关详细说明,请参阅 本文 第 1 部分。

假设类数为 $m$ 且特征数为 $n$。 最大 entropy 模型为 $c$-th 类分配系数向量 $\textbf{w}_c \in {\mathbb R}^n$ 和 {\mathbb R}$中的偏差 $b_c \in {\mathbb R}$,for $c=1,\dots,m$。 给定特征向量 $\textbf{x} \in {\mathbb R}^n$,$c$-th 类的分数是 $\hat{y}^c = \textbf{w}_c^T \textbf{x} + b_c$。 属于类 $c$ 的 $\textbf{x}$ 的概率由 $\tilde{P} (c | 定义\textbf{x}) = \frac{ e^{\hat{y}^c} }{ \sum_{c' = 1}^m e^{\hat{y}^{c'}} }$。 让 $P (c、\textbf{ x}) $ 表示看到 $c$ 和 $\textbf{x}$ 的联合概率。 此训练器最小化的损失函数为 $-\sum_{c = 1}^m P (c,\textbf{ x}) \log \tilde{P} (c |\textbf{x}) $,这是负 对数可能性函数

训练算法详细信息

实现的优化技术基于 有限的内存 Broyden-Fletcher-Goldfarb-Shanno 方法 (L-BFGS) 。 L-BFGS 是 准牛顿方法,它将 Hessian 矩阵的昂贵计算替换为近似值,但仍享受像 牛顿方法 那样快速收敛率,其中计算完整的 Hessian 矩阵。 由于 L-BFGS 近似仅使用有限的历史状态来计算下一步方向,因此它特别适用于高维特征向量的问题。 历史状态数是用户指定的参数,使用较大的数字可能会导致赫西安矩阵的近似值更好,但每个步骤的计算成本也更高。

此类使用 经验风险最小化 (,即 ERM) 来制定基于收集的数据构建的优化问题。 请注意,经验风险通常通过对所收集的数据点的模型预测应用损失函数来测量。 例如,如果训练数据不包含足够的数据点 (,若要在 $n$维空间中训练线性模型,则至少需要 $n$ 数据点) ,可能会发生 过度拟 合,以便 ERM 生成的模型擅长描述训练数据,但可能无法预测未见事件的正确结果。 正则化 是一种常见技术,通过惩罚通常由模型参数的 规范函数) 测量的量级 (来缓解此类现象。 此训练器支持 弹性网络正则化,从而惩罚 L1 规范 (LASSO) 的线性组合,即 $||\textbf{w}_c ||_1$和 L2 规范 (岭) ,$||\textbf{w}_c ||_2^2$ $c=1,\dots,m$的正则化。 L1-norm 和 L2 规范正则化具有不同的效果和用途,在某些方面是互补的。

与实现的优化算法一起,L1 规范正则化可以增加模型权重的稀疏性,$\textbf{w}_1,\dots,\textbf{w}_m$。 对于高维数据集和稀疏数据集,如果用户仔细选择 L1 规范的系数,则可以通过模型实现良好的预测质量,该模型只有少数非零权重 (,例如,1% 的总模型权重) 而不会影响其预测能力。 相比之下,L2 规范无法增加训练模型的稀疏性,但仍可以通过避免较大的参数值来防止过度拟合。 有时,使用 L2 规范会导致更好的预测质量,因此用户可能仍希望尝试它并微调 L1 规范和 L2 规范的系数。 请注意,从概念上讲,使用 L1 规范意味着所有模型参数的分布都是 Laplace 分布 ,而 L2 规范表示高 斯分布

积极的正则化 (,即将大型系数分配给 L1 规范或 L2 规范正则化术语,) 可以通过排除模型中的重要变量来损害预测容量。 例如,非常大的 L1 规范系数可能会强制所有参数为零,并导致微不足道的模型。 因此,在实践中,选择正确的正则化系数非常重要。

有关使用示例的链接,请查看“另请参阅”部分。

字段

FeatureColumn

训练器期望的功能列。

(继承自 TrainerEstimatorBase<TTransformer,TModel>)
LabelColumn

训练器期望的标签列。 可以 null,指示标签不用于训练。

(继承自 TrainerEstimatorBase<TTransformer,TModel>)
WeightColumn

训练器期望的权重列。 可以 null,指示权重不用于训练。

(继承自 TrainerEstimatorBase<TTransformer,TModel>)

属性

Info

使用 IEstimator<TTransformer> L-BFGS 方法训练的最大枚举多类分类器来预测目标。

(继承自 LbfgsTrainerBase<TOptions,TTransformer,TModel>)

方法

Fit(IDataView)

火车并返回一个 ITransformer

(继承自 TrainerEstimatorBase<TTransformer,TModel>)
Fit(IDataView, MaximumEntropyModelParameters)

继续使用已训练modelParametersLbfgsMaximumEntropyMulticlassTrainer训练并返回 aMulticlassPredictionTransformer<TModel>

GetOutputSchema(SchemaShape)

使用 IEstimator<TTransformer> L-BFGS 方法训练的最大枚举多类分类器来预测目标。

(继承自 TrainerEstimatorBase<TTransformer,TModel>)

扩展方法

AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment)

将“缓存检查点”追加到估算器链。 这将确保根据缓存的数据训练下游估算器。 在执行多个数据传递的训练器之前,拥有缓存检查点会很有帮助。

WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>)

给定估算器后,返回一个包装对象,该对象将调用委托一次 Fit(IDataView) 。 估算器通常必须返回有关适合的内容的信息,这就是为什么 Fit(IDataView) 该方法返回特定类型化对象的原因,而不仅仅是常规 ITransformer对象。 但是,同时, IEstimator<TTransformer> 通常形成为包含许多对象的管道,因此,我们可能需要通过 EstimatorChain<TLastTransformer> 估算器链生成一个估算器链,以便将转换器埋在此链中的某个位置。 对于该方案,我们可以通过此方法附加一个委托,该委托将在调用拟合后调用。

适用于

另请参阅