类型为’A’、’B’或’任意’的三元分类?

对于任何通用的机器学习模型(尽管我目前正在研究神经网络),在执行以下任务时:

将集合中的元素分类为三组(’A’或’B’或’任意’),

(这里,标记为’A‘意味着唯一有效的标签是’A’(类似地,’B‘也是如此),而’任意‘意味着’A’和’B’这两个标签都是同样有效的),应该使用哪种损失函数

这个问题可以使用与更一般的问题“三元分类”相关的技术来解决,但我认为通过这种泛化会丢失一些信息。

为了举例说明,假设我们想根据动词的时态形式(仅考虑现在时和过去时)对英语动词进行分类

那么模型应该将

{“work”, “eat”, “sing”, …} 分类为”现在时

{“worked”, “ate”, “sang”, …} 分类为”过去时

以及,

{“read”, “put”, “cut”, …} 分类为”任意

(请注意,“read”的现在时和过去时的发音不同,但我们正在考虑基于文本的分类)

这与我正在研究的任务不同,但应该可以作为这个问题的一个有效示例。

附注:我是一名学生,对这个领域只有基本的了解,所以如果需要,请就问题提出任何澄清要求。


回答:

我认为您处于多标签分类的情况,而不是多类分类。

这里所述:

在机器学习中,多标签分类和与之密切相关的多输出分类问题是分类问题的变体,其中每个实例可以分配多个标签

这意味着实例可以与多个类别相关联。

通常,当您处理二元分类(例如,0、1类)时,您可以将网络的最后一层设置为一个神经元,该神经元将输出0到1之间的连续值,使用sigmoid激活函数,并使用二元交叉熵作为损失函数

鉴于您的情况,您可以决定使用:

  • 两个神经元作为神经网络的输出
  • 对于每个神经元,您可以使用sigmoid激活函数
  • 并使用二元交叉熵作为损失函数

这样,每个实例都可以由模型以特定概率与两个类别相关联。

这意味着,对于每个实例,您应该关联两个类别,或者更确切地说是“标签”。例如,对于您的动词,您应该有“过去时”、“现在时”类别:

         现在时  过去时work:    1      0worked:  0      1read     1      1

您的模型将尝试输出两个概率,按照之前解释的架构:

         现在时  过去时   总和work:    0.9      0.3    1.2worked:  0.21     0.8    1.01read     0.86     0.7    1.5

基本上,您有两个独立的概率(如果您检查,每行的总和不是1),因此您可以将一个实例与两个类别相关联。

相反,如果您想要一个互斥的分类,超过两个类别,您应该使用分类交叉熵作为损失函数,并在最后一层使用softmax激活函数,这将基本处理输出以生成总和为1的概率向量。例如

         现在时   过去时     两者   总和work:    0.7       0.2      0.1    1worked:  0.21      0.7      0.19   1read     0.33      0.33     0.33   1

查看这里以查看一个详细的示例

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注