machine-learning - 为什么模型无法学习这种填充整数的游戏

标签 machine-learning scikit-learn artificial-intelligence random-forest

为什么我的模型无法学会玩这个仅从部分填充的数组中生成 1 到 5 的唯一元素数组的游戏?

===

我正在尝试训练一个模型来执行此任务:

给定一个由 5 个元素组成的固定数组,每个元素最多包含一个 (1, 2, 3, 4, 5) 和一个或多个 (0),将 0 替换为适当的值,以便最终数组恰好只有一个 (1, 2, 3, 4, 5)。

所以,这是应该如何玩:

  • [1, 2, 3, 4, 0] => [1, 2, 3, 4, 5]
  • [4, 3, 0, 5, 1] => [4, 3, 2, 5, 1]
  • [0, 3, 5, 4, 0] => [2, 3, 5, 4, 1] 或 [1, 3, 5, 4, 2]
  • ...

这不是一个复杂的游戏(从人类的角度来看),但我想看看模型是否可以识别规则(将 0 替换为 1 到 5,以便最终数组只有 (1, 2, 3,4,5))。

我这样做的方法是:

  • 生成 N 个以 [1, 2, 3, 4, 5] 元素作为答案的组合配置示例,并随机将部分元素替换为 0。
  • 例如,一个训练示例是 [(0, 3, 5, 4, 0), (2, 3, 5, 4, 1)]。
  • 可以有多个相同的输入映射到不同的输出,即 [(0, 3, 5, 4, 0), (2, 3, 5, 4, 1)] 和 [(0, 3, 5, 4 , 0), (1, 3, 5, 4, 2)] 都可以作为两个单独的训练实例出现。
  • 使用 Scikit-Learn 中的 RandomForestClassifier 将训练数据集进行 10 倍分离、打乱并进行训练。
  • 正确的输出定义为最终配置数组恰好具有 (1, 2, 3, 4, 5) 中的一个元素。因此 (2, 4, 4, 5, 1) 无效。

===

令人惊讶的是,使用 1000、10000、50000 甚至 100000 个训练示例仍然会导致模型仅获得约 70% 的测试用例正确结果 - 这意味着模型无法通过增加训练示例来学习如何玩游戏。

我在想的一件事是,RandomForestClassifier 不适用于此类称为结构化机器学习的问题,其中输出不是单个类别或实值输出,而是输出向量。

更多问题:

  • 为什么模型无法学习这一点 游戏?
  • 这是正确的建模方式吗 这个问题?
  • 数据还不够吗 学习这个任务?但越来越多 从 1000 到 100000 的数据不 似乎有帮助。

最佳答案

lejlot's answer非常好,但我想我应该添加一些关于为什么随机森林在这种情况下失败的直觉。

您必须记住,机器学习并不是向计算机传授智能的神奇方法;它只是一种方法。它只是将特定模型拟合到数据并使用该模型进行概括的一种方法。正如古老的格言所说,“所有模型都是错误的,但有些模型是有用的”。您遇到了一个案例,模型像往常一样是错误的,但也恰好毫无用处!

  • 输出空间:随机森林的核心基本上是一种将输入映射到输出的聪明且通用的方法。您的输出空间有 5^5 = 3125可能的唯一输出,并且仅 5! = 120其中一个是有效的(即每个数字都有一个输出)。随机森林知道输出是否有效的唯一方法是它是否看到了它:因此为了正常工作,您的训练集必须包含所有这 120 个输出的示例。

  • 输入空间:当随机森林遇到以前见过的输入时,它会将其直接映射到以前见过的输出。但是如果它遇到一个它没有见过的输入怎么办?例如,如果您询问 [0, 2, 3, 4, 1] 的答案,该怎么办?这不在训练集中?就欧几里得距离(一种思考事物如何分组的有用方法)而言,最接近的结果可能类似于 [0, 2, 3, 4, 0] ,可能映射到 [1, 2, 3, 4, 5] ,这是错误的。因此我们看到,为了使随机森林正常工作,您的训练集必须具有所有可能的输入。一些快速组合表明您的训练集大小必须至少为 5!*32 = 3840 ,没有重复项。

  • 森林本身:即使您有完整的输入空间,随机森林也不包含输入到输出的简单字典映射。根据模型的参数,映射通常是从一组附近结果到单个答案,例如 {[1, 2, 3, 4, 5], [1, 0, 3, 4, 5], [0, 1, 3, 4, 5]...}将全部映射到[1, 2, 3, 4, 5] 。这种概括在大多数情况下很有用,但对于您的特定问题没有用。随机森林在您的情况下工作的唯一方法是插入 max_depthmin_samples参数到其极值,因此森林本质上是输入到正确输出的一对一映射:换句话说,您的分类器将只是构建字典的一种极其复杂的方式。

总结一下:机器学习只是应用于数据的模型,在某些情况下很有用。就您而言,该模型并不是那么有用:为了让随机森林解决您的问题,您需要过度拟合一组全面的输入和输出。到那时,您不妨构建一个字典,然后就到此为止了。

关于machine-learning - 为什么模型无法学习这种填充整数的游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33734567/

相关文章:

python - 随机森林树生长算法

python - UndefinedMetricWarning : F-score is ill-defined and being set to 0. 0 在没有预测样本的标签中

python - 将类信息添加到keras中的Generator模型

java - 感知器学习——最重要的特征

android - 谷歌日历 API 在 android 中创建像目标这样的事件

python - sklearn.roc_auc_score() 和 sklearn.plot_roc_curve() 之间的区别

python - 如何使用 TensorFlow 中的官方 Batch Normalization 层?

python - 使用 TensorFlow 对实时视频进行分类

python - 与 R 相比,Python 中支持向量机的技术较差

r - R中二维核密度估计的混淆