ML.NET 中的机器学习任务
机器学习 任务 是基于两者的预测或推理类型:
- 问题或疑问
- 可用数据
例如,分类任务将数据分配到类别,聚类分析任务会根据相似性对数据进行分组。
机器学习任务依赖于数据中的模式,而不是显式编程。
本文介绍 ML.NET 和一些常见用例中提供的不同机器学习任务。
确定哪个任务适用于你的方案后,需要选择最佳算法来训练模型。 每个任务的节中列出了可用的算法。
分类任务
二元分类
二元分类是一种监管式机器学习任务,用于预测数据实例属于两个类(类别)中的哪一个。 分类算法的输入是一组标记的示例,其中每个标签都是 0 或 1 的整数。 二元分类算法的输出是一个分类器,可用于预测新未标记实例的类。 二元分类方案的示例包括:
- 了解 Twitter 评论的情绪是“正面”还是“负面”。
- 诊断患者是否患有某种疾病。
- 决定将电子邮件标记为垃圾邮件。
- 确定照片是否包含特定项目,如狗或水果。
有关详细信息,请参阅维基百科上的 二元分类 文章。
二元分类训练器
可以使用以下算法训练二元分类模型:
- AveragedPerceptronTrainer
- SdcaLogisticRegressionBinaryTrainer
- SdcaNonCalibratedBinaryTrainer
- SymbolicSgdLogisticRegressionBinaryTrainer
- LbfgsLogisticRegressionBinaryTrainer
- LightGbmBinaryTrainer
- FastTreeBinaryTrainer
- FastForestBinaryTrainer
- GamBinaryTrainer
- FieldAwareFactorizationMachineTrainer
- PriorTrainer
- LinearSvmTrainer
二元分类输入和输出
为了获得最佳二元分类的结果,训练数据应保持平衡(即正数和负定型数据数相等)。 应在训练前处理缺失值。
输入标签列中的数据必须是 Boolean。 输入特征列数据必须是固定大小的 Single向量。
这些训练程序将输出以下列:
输出列名称 | 列类型 | 描述 |
---|---|---|
Score |
Single | 模型计算的原始分数。 |
PredictedLabel |
Boolean | 预测的标签,基于分数符号。 负分数映射到 false ,正分数映射到 true 。 |
多类分类
多类分类是一项 监督的机器学习 任务,用于将数据实例分类为三个或多个 类(类别)之一。 分类算法的输入是一组标记的示例。 每个标签通常以文本开头。 然后它将通过 TermTransform 运行,这会将其转换为“键”(数值)类型。 分类算法的输出是分类器,可用于预测新未标记实例的类。 多类分类方案的示例包括:
- 将航班分类为“提前”、“准时”或“延迟”。
- 将电影评论理解为“积极”、“中性”或“负面”。
- 例如,将酒店评论分类为“位置”、“价格”或“清洁”。
有关详细信息,请参阅维基百科上的 多类分类 文章。
多类分类训练程序
可以使用以下训练算法训练多类分类模型:
- TextClassificationTrainer
- LightGbmMulticlassTrainer
- SdcaMaximumEntropyMulticlassTrainer
- SdcaNonCalibratedMulticlassTrainer
- LbfgsMaximumEntropyMulticlassTrainer
- NaiveBayesMulticlassTrainer
- OneVersusAllTrainer
- PairwiseCouplingTrainer
多类分类输入和输出
输入标签列数据必须为 key 类型。 特征列必须是固定大小的 Single向量。
此训练程序输出以下内容:
输出名称 | 类型 | 描述 |
---|---|---|
Score |
Single 的向量 | 所有类的分数。 较高的值表示属于关联类的概率较高。 如果第 i 个元素具有最大值,则预测的标签索引为 i 。 请注意,i 是从零开始的索引。 |
PredictedLabel |
键 | 预测标签的索引。 如果其值为 i ,则实际标签将是键值型输入标签中的第 i 个类别。 |
文本分类
文本分类是多类分类的子类别,专门处理原始文本。 文本会带来有趣的挑战,因为你必须考虑到文本的上下文和语义。 因此,很难对含义和上下文进行编码。
深度学习 模型已成为解决自然语言问题的有前途的技术。 更具体地说,一种称为 转换器的神经网络 已成为解决自然语言问题的主要方式,如文本分类、翻译、摘要和问答。 自然语言任务的一些常用转换器体系结构包括:
- 来自转换器的双向编码器表示形式 (BERT)
- 可靠优化的 BERT 预训练方法 (RoBERTa)
- 生成式预训练转换器 (GPT)
ML.NET 文本分类 API 由 TorchSharp提供支持。 TorchSharp 是一个 .NET 库,提供对支持 PyTorch 的库的访问权限。 TorchSharp 包含用于在 .NET 中从头开始训练神经网络的构建基块。 ML.NET 将 TorchSharp 的一些复杂性抽象化到方案级别。 它使用 NAS-BERT 模型的预先训练版本,并使用数据对其进行微调。
有关文本分类的示例,请参阅如何开始使用文本分类 API。
图像分类
图像分类是 监督式机器学习 任务,用于预测图像的类(类别)。 输入是一组标记的示例。 每个标签通常以文本开头。 然后它将通过 TermTransform 运行,这会将其转换为“键”(数值)类型。 图像分类算法的输出是一个分类器,可用于预测新图像的类。 图像分类任务是多类分类的类型。 图像分类方案的示例包括:
- 确定狗的品种是“西伯利亚哈士奇”、“金毛寻回犬”、“贵宾犬”等。
- 确定制造产品是否有缺陷。
- 确定哪种类型的花卉为“玫瑰”、“向日葵”等。
图像分类训练器
可以使用以下训练算法训练图像分类模型:
图像分类输入和输出
输入标签列数据必须为 key 类型。 特征列必须是大小可变的 Byte向量。
该训练程序输出以下列:
输出名称 | 类型 | 描述 |
---|---|---|
Score |
Single | 所有类的分数。 较高的值表示属于关联类的概率较高。 如果第 i 个元素具有最大值,则预测的标签索引将是 i 。 (i 是从零开始的索引。 |
PredictedLabel |
密钥 类型 | 预测标签的索引。 如果其值为 i ,则实际标签是键值输入标签类型中的第 i 个类别。 |
回归
回归是一种监管式机器学习任务,用于基于一组相关特征预测标签的值。 标签可以是任何实数值,并且不像分类任务中的标签那样来自有限的值集。 回归算法根据标签的相关特征对标签的依赖关系建模,以确定随着特征值的变化,标签将如何变化。 回归算法的输入是一组具有已知值的标签的示例。 回归算法的输出是一个函数,可用于预测任何新输入特征集的标签值。 回归方案的示例包括:
- 根据房屋属性(如卧室数、位置或大小)预测房价。
- 根据历史数据和当前市场趋势预测未来股价。
- 根据广告预算预测产品的销售额。
- 在出版物中查找相关文章(句子相似性)。
回归训练程序
可以使用以下算法训练回归模型:
- SentenceSimilarityTrainer
- LbfgsPoissonRegressionTrainer
- LightGbmRegressionTrainer
- SdcaRegressionTrainer
- OlsTrainer
- OnlineGradientDescentTrainer
- FastTreeRegressionTrainer
- FastTreeTweedieTrainer
- FastForestRegressionTrainer
- GamRegressionTrainer
回归输入和输出
输入标签列数据必须为 Single。
此任务的训练程序输出以下列:
输出名称 | 类型 | 描述 |
---|---|---|
Score |
Single | 模型预测的原始分数 |
群集
聚类分析是一项 无监督机器学习 任务,用于将数据实例分组到包含类似特征的群集中。 聚类分析还可用于识别数据集中的关系,这些关系可能无法通过浏览或简单观察逻辑推断出来。 聚类分析算法的输入和输出取决于选择的方法。 可以采取分发、质心、连接或基于密度的方法。 ML.NET 当前支持使用 K 平均值聚类分析的基于质心的方法。 群集方案的示例包括:
- 根据酒店选择的习惯和特点了解酒店客人的细分。
- 确定客户细分市场和人口统计数据,以帮助建立有针对性的广告活动。
- 根据制造指标对库存进行分类。
聚类分析训练程序
可以使用以下算法训练聚类分析模型:
聚类分析输入和输出
输入特征数据必须为 Single。 不需要标签。
此训练程序输出以下内容:
输出名称 | 类型 | 描述 |
---|---|---|
Score |
Single 的向量 | 给定数据点到所有群集的质心的距离。 |
PredictedLabel |
键类型 | 模型预测的最接近的群集的索引。 |
异常情况检测
异常情况检测任务使用主体组件分析(PCA)创建异常检测模型。 基于PCA的异常检测在获取某一类(如有效交易)的训练数据较容易,但获取足够的目标异常样本相对困难的情况下,有助于生成模型。
PCA 是机器学习中的既定技术,它经常用于探索数据分析,因为它揭示了数据的内部结构并解释数据的差异。 PCA 的工作原理是分析包含多个变量的数据。 它查找变量之间的相关性,并确定最能捕获结果差异的值的组合。 这些组合特征值用于创建一个更紧凑的功能空间,称为主体组件。
异常情况检测包含机器学习中的许多重要任务:
- 识别可能存在欺诈性的事务。
- 指示发生了网络入侵的学习模式。
- 发现异常的患者群集。
- 检查输入系统的值。
由于异常是定义中的罕见事件,因此很难收集用于建模的代表性数据样本。 此类别中包含的算法专门用于解决使用不平衡数据集生成和训练模型的核心挑战。
异常情况检测训练程序
可以使用以下算法训练异常情况检测模型:
异常情况检测输入和输出
输入特征必须是固定大小的 Single向量。
此训练程序输出以下内容:
输出名称 | 类型 | 描述 |
---|---|---|
Score |
Single | 由异常情况检测模型计算得出的非负无界分数。 |
PredictedLabel |
Boolean | 如果输入是异常,则为 true ,如果不是异常,则为 false 。 |
排名
排名任务从一组标记的示例构建排名程序。 此示例集由可以使用给定条件评分的实例组组成。 每个实例的排名标签为 { 0、1、2、3、4 } 。 排名程序定型为用每个实例的未知分数对新实例组进行排名。 ML.NET 排名学习器基于机器已学习的排名。
排名训练算法
可以使用以下算法训练排名模型:
输入和输出的排名
输入标签数据类型必须为 key 类型或 Single。 标签的值确定相关性,其中较高的值表示较高的相关性。 如果标签是 键 类型,则键索引是相关性值,其中最小索引最不相关。 如果标签是 Single,则较大的值表示较高的相关性。
特征数据必须为 Single 的固定大小向量,输入行组列必须为 key 类型。
此训练程序输出以下内容:
输出名称 | 类型 | 描述 |
---|---|---|
Score |
Single | 由模型计算得出的用于确定预测的无界分数。 |
建议
建议任务允许生成推荐的产品或服务列表。 ML.NET 使用 矩阵分解(MF),这是一种协同过滤 算法,可在目录中具有历史产品评分数据时提供建议。 例如,你有用户的历史电影分级数据,并希望推荐他们下一步可能观看的其他电影。
建议训练算法
可以使用以下算法训练建议模型:
预测
预测任务使用过去的时序数据来预测未来行为。 适用于预测的方案包括天气预报、季节性销售预测和预测性维护。
预测训练器
可以使用以下算法训练预测模型:
对象检测
对象检测是一项 监督机器学习 任务,既用于预测图像的类别,也用于提供一个边界框来指示该类别在图像中的位置。 对象检测可以检测图像中的多个对象,而不是对图像中的单个对象进行分类。 对象检测的示例包括:
- 检测道路图像上的汽车、标志或人员。
- 检测产品图像上的缺陷。
- 检测 X 射线图像上值得关注的区域。
对象检测模型训练目前仅在使用 Azure 机器学习的 模型生成器 中提供。