线性回归不适用于此问题,因为您使用的棋盘特征和目标变量之间的关系不是线性的。
这就是数据科学家为井字游戏创建训练集的方式吗?
您的目标是什么并不是 100% 清楚的。为简单起见,我将您的目标选择为“根据当前的棋盘状态和双方未来完全随机的游戏,预测 X 最终获胜的概率。” 这似乎就是你正在做的事情。
顺便说一句,这不是训练神经网络以预测游戏中最佳动作的直接途径。对于这个简单的游戏,如果这是您的最终目标,它可能会起作用,但如果您想要机器学习来玩游戏,您可能应该研究强化学习,特别是强化学习的自我游戏,作为管理训练数据的框架.
回到您的问题,您正在做的事情对于创建数据集是可以接受的,尽管我想检查一下:
对于每场平局(全盘),我不把它算作任何东西
如果这意味着您仍在存储导致平局的状态,但使用不同的标签,那没关系。如果您丢弃有关关系的数据,那么这将扭曲数据集并可能影响您的预测 - 除非您在测试时也丢弃关系。
这也有点不寻常:
最后,我得到了我的训练数据集,其中包括棋盘状态(特征集)和结果,即在该状态下赢得的游戏的百分比(浮动品脱值。例如 0.8 是 80%)。
这是不寻常的,因为当特征相同时,您已将数据预处理到摘要行中。当与近似函数一起使用时,这会使数据集倾斜(线性回归 - 像大多数 ML 统计学习器一样 - 是一个近似函数),因为您会丢失这些特征出现的次数。执行此操作时,任何平衡预测函数以使其对常见状态更准确的做法都会丢失。将所有记录分开并让 ML 方法解决取平均值的最佳方法更为正常。如果您通过对新玩过的游戏进行随机抽样来测量已完成模型的准确性,那么它的准确性可能会因此而降低。
对于记录的数据收集,更常见的做法是将所有观察结果分开,而不是在训练分类器之前对其进行总结。然后分类器可以拟合允许每个观察频率的数据。
除了关于平局的警告(你可能是对的),过早地取平均值,加上你的数据集只能帮助预测完全随机游戏的结果的限制,然后数据集集合对我来说看起来不错。上述问题都不足以导致您注意到的问题。您的预测不适用于线性回归的原因主要是由于预测函数需要非线性。
一个简单的解决方法是使用非线性预测器,例如神经网络,或者可能是 xgboost 之类的决策树算法。
如果您使用神经网络,以下可能会有所帮助:
值得注意的是,你的平均胜率表已经是一个相当合理的游戏预测模型。对于井字游戏,它应该工作得很好,因为状态数量有限。在 20k 场随机游戏之后,您将记录几乎所有可能的状态,并且一些将具有相当准确的平均值(例如,X的每次初始游戏将有大约 2000 个采样延续,这应该会给您在几个百分)。这种方法的缺点是它不能推广到新的看不见的状态,但实际上这在细节很重要的棋盘游戏中很难做到。