【问题标题】:solve tic tac toe with multi class classification用多类分类解决井字游戏
【发布时间】:2017-03-11 21:02:40
【问题描述】:

我正在尝试一种多类分类方法来解决井字游戏问题。 我正在使用回归分类器来解决单步井字游戏。为简单起见,计算机或分类器将始终是第二个玩家。我正在用这样的数据集训练分类器。这是每次移动的预期输出和对应的特征向量。

y - X
2 - 0 0 0 | 0 X 0 | 0 0 0    # pay for 'O' at 2th location
1 - 0 0 O | 0 X 0 | 0 X 0    # pay for 'O' at 1st location
...

我已将每个特征“O”或“X”分配为二进制 3 位编码。

0 => 0 0 1
O => 0 1 0
X => 1 0 0

我正在尝试使用 100 行数据集,它给了我 72% 的准确率!但似乎没有随着更多数据而改善。 还是应该以不同的方式表示特征向量?

编辑: 澄清上述示例中的 y 值。 第一个例子。棋局状态:人类迈出的第一步。

0 0 0
0 X 0
0 0 0

现在 2 ==> 一维数组的第二个索引。这将是一个很好的举措。 同样,下一个示例,1 表示 => 在棋盘的 1D 表示中的第 1 位。

【问题讨论】:

  • 这很有趣!您能否阐明为什么 y=2 在您的第一个预期输出中以及为什么 y=1 在您的第二个预期输出中?
  • 用监督学习解决游戏是一种悖论。求解通常意味着完美游戏,获得完美游戏需要大量数据(以及大多数游戏的非线性机器学习工具;忽略非线性预处理)。您将需要生成许多示例,并且每个经过训练的回归器都会比简单的查找表更糟糕(TTT 没有内存问题)。另外:样本生成和学习没有任何联系。如果没有很多(高质量)数据,这种设计就不能做很多(几乎没有说)。通常,人们会通过 Q-learning 之类的强化学习来解决这个问题。
  • @sascha 感谢您的知识。我知道我目前的方法并不是很有希望。神经网络呢?与其使用专门的算法,不如尝试模仿我们大脑学习玩游戏的方式的模型?
  • 是的,我希望如果您将输出表示从 0-9 转换为 one-hot-encoding,您可能会得到更好的结果。

标签: machine-learning


【解决方案1】:

我希望如果您将输出表示从 0-8 转换为 one-hot-encoding,您可能会得到更好的结果。也就是说,您将有 9 个输出节点,每个输出节点对应于船上的一个位置。与其说 y = 2,不如说:

y = [0 0 1 0 0 0 0 0 0 0]

在分类或评估时,选择具有最高值的节点作为预测移动。

另一个建议是,由于此状态空间很小,您希望耗尽所有可能的状态,并为每个状态生成y 的目标标签。这是为了提供更多的训练示例(如@sascha 所述)。

第三个建议是:您可能希望独立使用 9 个 logistic 节点作为输出,因为这实际上是一个 多标签 问题。也就是说,在某些情况下,多个位置同样好。

最后的建议是:棋盘是对称的,因此你可以使用这个属性来减少状态空间。

【讨论】:

  • one-hot-encoding 是一个很好的建议。我自己用它来识别数字。嗯,详尽的数据 - 这是最重要的,不是吗!看起来,这种分类不是解决这个问题的正确方法,尽管它是一个很好的练习来获得一些见解。
  • 正如@sascha 指出的那样,q-learning 是更有原则的方法。
猜你喜欢
  • 2020-10-15
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
相关资源
最近更新 更多