Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning 多标签分类的机器学习模型,其中我们知道标签之间的关系_Machine Learning - Fatal编程技术网

Machine learning 多标签分类的机器学习模型,其中我们知道标签之间的关系

Machine learning 多标签分类的机器学习模型,其中我们知道标签之间的关系,machine-learning,Machine Learning,我手头有一个问题 我需要将输入数据分类到一个或多个标签S1、S2、S3、S4 标签S1、S2、S3和S4之间存在关系,即 如果输入标记为Sn,则必须标记为S1..Sn S1、S2、S3和S4类似于实体X要经过的不同阶段。根据输入数据X可能通过一个或多个阶段,X必须通过S1进入S2,S2进入S3,依此类推 我们希望确保只有到达S3的X才被允许通过,因此根据输入数据,我们决定是否允许X通过S1 如果我们有像输入数据这样的信息,我们可以选择什么机器学习模型来预测X是否达到S3,以及X为该输入数据经过了

我手头有一个问题

我需要将输入数据分类到一个或多个标签S1、S2、S3、S4

标签S1、S2、S3和S4之间存在关系,即

如果输入标记为Sn,则必须标记为S1..Sn

S1、S2、S3和S4类似于实体X要经过的不同阶段。根据输入数据X可能通过一个或多个阶段,X必须通过S1进入S2,S2进入S3,依此类推

我们希望确保只有到达S3的X才被允许通过,因此根据输入数据,我们决定是否允许X通过S1

如果我们有像输入数据这样的信息,我们可以选择什么机器学习模型来预测X是否达到S3,以及X为该输入数据经过了哪些阶段

我认为在多标签分类的方向上,输入数据阶段S1和S2之间可能存在某种关系

更新:我必须用这样的例子来训练 1.输入数据为s1 2.输入数据为s2 3. 4.

有些疑问 你的问题很不清楚,例如:

我们希望优化大多数X到达S3,因此根据输入数据,我们决定是否允许X通过S1

实际上,最好的模型应该是“总是回答是”,因为它最大化了到达S3的对象数量(因为它只允许任何对象到达这一点)

总体思路 我假设有两种可能的解释:

  • 您有一个标签“pipeline”,这意味着,如果对象尚未为
    i
    标记所有
    S\u i
    ,则无法标记该对象

    对于单个模型来说,这似乎不是问题,您可以以自然的方式对模型进行管道化,即,如果对象
    x
    应具有标签
    S_1
    ,则训练一个模型
    1
    ,该模型将进行重新分类。接下来,在训练集中具有标签
    S_1
    的所有数据上训练模型
    2
    ,并预测标签
    S_2
    ,依此类推。在执行过程中,您只需询问每个模型
    i
    是否接受(标记)传入对象
    x
    ,并在第一个模型说“否”时停止

  • 您对标签有一些更复杂的约束,这些约束可能是严格的,也可能不是。对于这种情况,您应该尝试使用约束的
    多标签分类的多种方法之一,特别是关于ML的这一方面

  • 解决方案1-近似测试函数 如果您的问题可以描述为:

    • 您有数据点
      X
      ,因此对于每个数据点,您都知道通过
      X
      的一些管道可测试
      T\i
      的最大数量
    • 您希望训练一个能够预测的分类器,您的点
      x
      通过的consequentive测试的最大数量是多少
    • 您无法访问实际测试
      T_i
      ,或者测试效率非常低
    然后,最简单的方法是应用以下训练过程,而不是一个分类器:

  • 取所有数据点,将
    y=0
    标记为
    0
    ,将
    y>=1
    标记为
    1
    ,并训练一些二进制分类器(例如SVM)。因此,只需暂时重新标记数据,即可显示通过第一次测试的点和未通过测试的点。让我们调用这个分类器
    cl_1
  • 现在获取数据点,将
    y=1
    标记为
    0
    ,将
    y>=2
    标记为
    1
    ,然后再次训练二进制分类器,并将其命名为
    cl\u 2
  • 重复测试,直到所有测试都有了分类器,通常我们称分类器为
    cl_i
    ,当它能够区分标有
    y=i-1
    的点和标有
    y>=i
    的点时
  • 现在,为了对新点进行分类,您只需反复检查所有
    cl_i
    i=1,…,测试
    ,并用
    cl_i(x)=1的最大值回答
    i
    。因此,您可以使用分类器“模拟”您的测试,并简单地说它通过了多少个测试的近似值

    综上所述:每个测试可以用一个二元分类器近似,然后“我们的点通过的最大consequentive测试数是多少”的问题被近似为“outpoint被分类为true的最大consequentive分类器数是多少”

    解决方案2-简单回归
    您还可以简单地将回归从输入空间应用到它达到的测试数量中。回归实际上有一个根深蒂固的假设,即输出值是相关的。因此,如果您使用成对的
    (x,y)
    来训练数据,其中
    y
    是通过
    x
    的最后一次测试的次数,那么您实际上使用的是这样一个事实,即输出
    y=3
    与计算中的第一次获得
    y=2
    高度相关。这种回归(非线性!)可以简单地使用神经网络(可能是正则化的)

    这听起来更像是顺序回归,而不是多标签分类。关于如何使用顺序回归的任何建议??将s_n作为因变量,将特征作为自变量。just learn是一个回归模型,它将隐式地强制执行顺序约束(但是,这种解释对于您的类可能没有意义)