用于二进制分类的强化算法

时间:2018-08-15 14:04:25

标签: machine-learning classification reinforcement-learning

我是机器学习的新手,但是在过去两天里,我读了很多有关强化学习的文章。我有一个可以获取项目列表的应用程序(例如从Upwork)。有一个主持人可以手动接受或拒绝项目(基于下面说明的某些参数)。如果一个项目被接受,我想发送一个项目建议,如果它被拒绝,我将忽略它。 我正在寻求将AI替换为主持人(除其他原因外),所以我想知道应该为此使用哪种强化算法。

参数: 下面列出了一些应该决定代理是接受还是拒绝项目的参数。假设我只想接受与Web开发相关的项目(特别是后端/服务器端),这就是参数应如何影响代理的问题。

  • 部门:如果该项目与IT部门相关,则应该有更多的机会被接受。
  • 类别:如果该项目属于“ Web开发”类别,则应该有更多的机会被接受。
  • 雇主评级:评级超过4(满分5分)的雇主应该有更多的机会被接受。

我认为Q-Learning或SARSA可以为我提供帮助,但是我看到的大多数示例都与Cliff Walking问题有关,该州的状态相互依赖,这不适用于我的情况,因为每个项目都是与前一个不同。

注意:我希望代理能够自我学习,以便将来如果我也开始为前端项目奖励它,它应该学习这种行为。因此,提出“纯”监督学习算法是行不通的。

编辑1:我要补充一点,我拥有3000个项目的数据(行业,类别,职务,雇主评级等),以及该项目是否被我的主持人接受或拒绝。

1 个答案:

答案 0 :(得分:2)

您的问题应该可以轻松地使用Q学习解决。这仅取决于您如何设计问题。强化学习本身是一种非常强大的算法,它允许代理从环境接收状态,然后根据给定的状态执行操作。根据这些动作,它将得到相应的奖励。对于您的问题,结构如下所示:

状态:3 x 1矩阵。 [行业,类别,雇主评分]

扇区状态都是整数,其中每个整数代表一个不同的扇区。例如,1 = IT部门,2 =能源,3 =药品,4 =汽车等。

类别状态也可以是所有整数,其中每个整数代表一个不同的类别。例如:1 = Web开发,2 =硬件,3 =等等。

雇主评级也是1-5之间的所有整数。状态代表评级。

操作

操作:输出是整数。

动作空间将是二进制的。 1或0。1 =接受项目,0 =不接受项目。

奖励

奖励将为您的系统提供反馈。在您的情况下,您仅会在操作= 1(即您参加了该项目)的情况下评估奖励。这样一来,您的RL就能了解完成该项目后的工作表现。

奖励将是一个类似于以下内容的函数:

def reward(states):
    sector, category, emp_rating = states
    rewards = 0
    if sector == 1:   # The IT sector
        rewards += 1

    if category == 1:   # The web development category
        rewards += 1

    if emp_rating = 5:   # Highest rating
        rewards += 2
    elif emp_rating = 4:   # 2nd highest rating
        rewards += 1

    return rewards

要增强此奖励功能,您实际上可以给某些部门带来负面奖励,因此如果RL接受了这些项目,则RL实际上会获得负面奖励。为了避免进一步的复杂性,我在这里避免了这种情况。

您还可以在将来编辑奖励功能,以使您的RL学习新事物。例如使某些行业优于其他行业等等。

edit:是的,关于lejlot的评论,它基本上是一个多武装的土匪问题,没有顺序决策。土匪问题的设置基本上与Q学习减去顺序部分相同。您所关心的是您有一个项目建议(陈述),做出决定(行动),然后得到回报。没关系,接下来发生什么情况。