SdcaMulticlassTrainerBase<TModel> 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
使用 IEstimator<TTransformer> 使用坐标下降方法训练的线性多类分类器模型预测目标。 根据所使用的损失函数,训练的模型可以是最大枚举分类器或多类支持向量机。
public abstract class SdcaMulticlassTrainerBase<TModel> : Microsoft.ML.Trainers.SdcaTrainerBase<Microsoft.ML.Trainers.SdcaMulticlassTrainerBase<TModel>.MulticlassOptions,Microsoft.ML.Data.MulticlassPredictionTransformer<TModel>,TModel> where TModel : class
type SdcaMulticlassTrainerBase<'Model (requires 'Model : null)> = class
inherit SdcaTrainerBase<SdcaMulticlassTrainerBase<'Model>.MulticlassOptions, MulticlassPredictionTransformer<'Model>, 'Model (requires 'Model : null)>
Public MustInherit Class SdcaMulticlassTrainerBase(Of TModel)
Inherits SdcaTrainerBase(Of SdcaMulticlassTrainerBase(Of TModel).MulticlassOptions, MulticlassPredictionTransformer(Of TModel), TModel)
类型参数
- TModel
- 继承
-
SdcaTrainerBase<SdcaMulticlassTrainerBase<TModel>.MulticlassOptions,MulticlassPredictionTransformer<TModel>,TModel>SdcaMulticlassTrainerBase<TModel>
- 派生
注解
若要为最大 entropy 分类器创建此训练器,请使用 SdcaMaximumEntropy 或 SdcaMaximumEntropy (Options) 。 若要为 丢失函数 创建此训练器 (,例如支持矢量机的 铰链丢失) ,请使用 SdcaNonCalibrated 或 SdcaNonCalibrated (Options) 。
输入和输出列
输入标签列数据必须是 键 类型,特征列必须是已知大小的向量 Single。
该训练程序输出以下列:
输出列名称 | 列名称 | 描述 |
---|---|---|
Score |
Single 的向量 | 所有类的分数。 值越高意味着落入相关类的概率越高。 如果第 i 个元素具有最大值,则预测的标签索引为 i。 请注意,i 是从零开始的索引。 |
PredictedLabel |
key 类型 | 预测标签的索引。 如果其值为 i,则实际标签为键值输入标签类型中的第 i 个类别。 |
训练器特征
机器学习任务 | 多类分类 |
规范化是否需要? | 是 |
是否需要缓存? | 否 |
除 Microsoft.ML 外所需的 NuGet | 无 |
可导出到 ONNX | 是 |
评分函数
这会训练线性模型来解决多类分类问题。 假设类数为 $m$ 且特征数为 $n$。 它为 $c$-th 类分配系数向量 $\textbf{w}_c \in {\mathbb R}^n$ 和 {\mathbb R}$ 中的偏差$b_c \,用于 $c=1,\dots,m$。 给定特征向量 $\textbf{x} \in {\mathbb R}^n$,$c$-th 类的分数将为 $\hat{y}^c = \textbf{w}_c^T \textbf{x} + b_c$。 如果 $\textbf{x}$ 属于类 $c$,则 $\hat{y}^c$ 应大于 0。 相比之下,$\hat{y}^c$ 小于 0 意味着所需的标签不应$c$。
如果训练的模型是最大递增分类器,则可以将输出分数向量解释为预测类概率,因为 softmax 函数 可能应用于处理所有类的分数后。 更具体地说,属于类 $c$ 的 $\textbf{x}$ 的概率由 $\tilde{P} ( c |\textbf{x} ) = \frac{ e^{\hat{y}^c} }{ \sum_{c' = 1}^m e^{\hat{y}^{c'}} }$ 并存储在分数向量中的 $c$-th 元素处。 在其他情况下,输出分数向量仅为 $[\hat{y}^1、\dots、\hat{y}^m]$。
训练算法详细信息
优化算法是坐标 下降方法 的扩展,遵循前面 论文中提出的类似路径。 它通常比 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-norm 正则化具有不同的效果,并且在某些方面具有互补性。
与实现的优化算法一起,L1 规范正则化可以增加模型权重的稀疏性 $\textbf{w}_1,\dots,\textbf{w}_m$。 对于高维和稀疏数据集,如果用户仔细选择 L1-norm 的系数,则可以通过模型实现良好的预测质量,该模型只有少数非零权重 (,例如,1% 的总模型权重) 不影响其预测能力。 相比之下,L2 规范不能增加训练模型的稀疏性,但仍可以通过避免较大的参数值来防止过度拟合。 有时,使用 L2 规范会导致更好的预测质量,因此用户可能仍希望尝试并微调 L1 规范和 L2 规范的系数。 请注意,从概念上讲,使用 L1 规范意味着所有模型参数的分布是 Laplace 分布 ,而 L2 规范表示 它们的高斯分布 。
主动正则化 (,即将大型系数分配给 L1-norm 或 L2 规范正则化术语) 可以通过从模型中排除重要变量来损害预测能力。 例如,非常大的 L1 规范系数可能会强制所有参数为零,并导致微不足道的模型。 因此,在实践中选择正确的正则化系数非常重要。
有关使用示例的链接,请查看“另请参阅”部分。
字段
FeatureColumn |
训练程序期望的功能列。 (继承自 TrainerEstimatorBase<TTransformer,TModel>) |
LabelColumn |
训练程序期望的标签列。 可以是 |
WeightColumn |
训练器期望的权重列。 可以 |
属性
Info |
使用 IEstimator<TTransformer> 使用坐标下降方法训练的线性多类分类器模型预测目标。 根据所使用的损失函数,训练的模型可以是最大枚举分类器或多类支持向量机。 (继承自 StochasticTrainerBase<TTransformer,TModel>) |
方法
Fit(IDataView) |
火车并返回一个 ITransformer。 (继承自 TrainerEstimatorBase<TTransformer,TModel>) |
GetOutputSchema(SchemaShape) |
使用 IEstimator<TTransformer> 使用坐标下降方法训练的线性多类分类器模型预测目标。 根据所使用的损失函数,训练的模型可以是最大枚举分类器或多类支持向量机。 (继承自 TrainerEstimatorBase<TTransformer,TModel>) |
扩展方法
AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment) |
将“缓存检查点”追加到估算器链。 这将确保针对缓存的数据训练下游估算器。 在执行多个数据传递的训练器之前,拥有缓存检查点会很有帮助。 |
WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>) |
给定估算器后,返回将调用委托的 Fit(IDataView) 包装对象。 估算器通常必须返回有关拟合情况的信息,这就是为什么 Fit(IDataView) 该方法返回特定类型化对象的原因,而不仅仅是常规 ITransformer对象。 但是,同时, IEstimator<TTransformer> 通常形成为包含许多对象的管道,因此,我们可能需要通过 EstimatorChain<TLastTransformer> 估算器链生成一系列估算器,以便我们要获取转换器的估算器被埋在此链中的某个位置。 对于这种情况,我们可以通过此方法附加调用一次将调用的委托。 |
适用于
另请参阅
- SdcaNonCalibrated(MulticlassClassificationCatalog+MulticlassClassificationTrainers, SdcaNonCalibratedMulticlassTrainer+Options)
- SdcaNonCalibrated(MulticlassClassificationCatalog+MulticlassClassificationTrainers, String, String, String, ISupportSdcaClassificationLoss, Nullable<Single>, Nullable<Single>, Nullable<Int32>)
- SdcaNonCalibratedMulticlassTrainer.Options
- SdcaMaximumEntropy(MulticlassClassificationCatalog+MulticlassClassificationTrainers, SdcaMaximumEntropyMulticlassTrainer+Options)
- SdcaMaximumEntropy(MulticlassClassificationCatalog+MulticlassClassificationTrainers, String, String, String, Nullable<Single>, Nullable<Single>, Nullable<Int32>)
- SdcaMaximumEntropyMulticlassTrainer.Options