设为首页收藏本站

JMP数据分析论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 361|回复: 0

机器学习探索之(二):谁将赢得台球比赛?

[复制链接]
发表于 2019-5-21 13:40:14 | 显示全部楼层 |阅读模式
在上一篇《机器学习之入门探索(一)》的文章中,我们讨论了机器学习的定义以及JMP中的机器学习。在今天的文章中,我们将一起来看看Elizabeth如何把机器学习应用到她实际生活中的一些真实案例。

本文作者 Elizabeth ClassenJMP资深统计开发工程师,原文发表在JMP全球用户社区JMP Community,对英文版感兴趣的朋友也可以直接查看原文:https://community.jmp.com/t5/JMP-Blog/Applying-machine-learning-Will-I-beat-my-husband-at-pool-on-my/ba-p/83862

在机器学习里,有两种很容易理解的学习算法:K最近邻和朴素贝叶斯,一个算法不一定非得非常复杂才能获得良好的结果。对于某些问题,这两种简单的算法就可以快速准确地解决问题。顾名思义,K最近邻算法是计算数据集中的哪K个观测值是最接近你想要预测的点。 然后,预测值要么是K 个最近邻的响应的平均值(如果响应变量是连续的),要么是K个最近邻出现次数多的类别(如果响应变量是分类的)。通常的做法是拟合一系列的K,并使用交叉验证选出哪个K提供了最佳的预测性能。

大家可能常常会问:为什么朴素贝叶斯被称为“朴素(Naive)”?这个名字来源于这样的一个事实,即:使用这个算法时所做的关键假设是所有的预测变量都是相互独立的。在许多情况下,这是一个朴素的假设。因此,与具有彼此高度相关的预测变量相比,当真实情况接近该假设时,此方法往往表现更好。为了进行预测,由预测变量给出的响应类别(例如,赢或输)的概率,是基于在训练数据中观察到这些预测变量值的概率来计算的,具有更高概率的类别是最终的预测结果。

接下来,我们就来看看这两种方法的实际应用。

谁更能赢得比赛?

Elizabeth和她的丈夫是狂热的台球玩家,几乎每天下班回家都会玩上几局。 经过一年左右的比赛,他们的表现不相伯仲,也许Elizabeth会稍微好一些。 那么谁会在将来的比赛中表现地更好呢?或许可以尝试用机器学习来回答这个问题。

Elizabeth从2018年1月1日开始跟踪比赛的结果。 她将比赛结果记录全部为Excel表(因为家里的电脑暂未安装JMP),包含了比赛的月份、星期、日期、她赢了多少场、他们玩了多少场比赛、她是否赢了那个系列赛、打了哪种类型的台球(8球或9球)。因为这是记录Excel表格中,所以还包括了整体游戏胜率(Cum Percent)和系列赛胜率(Session Percent)的计算列。准备大展身手分析前,数据的处理是必不可少的。首先,Elizabeth需要将她的数据表从Excel中导入到JMP中。很简单,只需将Excel文件拖到JMP主窗口中,Excel导入向导就会新建一个JMP数据表。 做一些调整把“Session Win?”定义为一个名义型变量,把比赛数量和获胜的次数定义为有序型变量,接下来,准备预测未来谁会统治台球桌!

导入的数据表


有一点值得注意的是:在前面的K最近邻介绍中,我们提到了交叉验证可以用选出哪个K提供了最佳的预测性能。但目前的数据表中没有区别训练列和验证列。 虽然K最近邻和朴素贝叶斯都可以选择在开始界面中使用一定比例的数据作为验证集,但如果想比较这两种方法,就应该为两者使用相同的训练集。幸运的是,JMP也提供了生成验证列的功能。

在JMP中有多个选项可用于创建验证列。如果响应变量高度不平衡,这种情况发生在故障不常见或查找欺诈性交易等,可以使用分层随机选项来确保在训练集和验证集中都有两种响应的数据。在现在情况下,所有列都相当平衡,因此训练集或验证集中不太可能完全丢失某个类别。因此,可以使用固定随机选项来生成验证列。当然,可以为随机生成设置一个特定的种子,这样将来还可以再次重现这个特定的列,尽管在本案例中暂时不是必要的。


分析时刻到了!

现在,已经有验证列了,然后可以在JMP软件分析-> 预测模型菜单中启动k最近邻平台。 ”SessionWin?”是响应变量,Month、Day、Game和Played(比赛的数量)都是因子,需要预测的是Elizabeth的生日当天即10月13日的比赛结果。在这个案例中Date没有帮助,主要是因为每个Month和Day的组合只发生一次。 此外,将平台计算的最近邻数提高到25,而不是默认的10。

K最近邻平台窗口

报告的模型选择部分追溯了分别具有1到25个近邻的每个模型在训练集和验证集上的误分类率。选择线设置为K = 20,其在验证集上具有最小的误分类率。 下表显示在验证集中超过44%的观察结果被错误分类。混淆矩阵显示,被错误分类的实际获胜或失败的观测数量大致相同。马赛克图给出了混淆矩阵的直观表示。


K最近邻报告


误分类率不是很高,但不确定预测变量是否真的具有预测性。如果要得到拟合效果更好的模型,可能需要追踪诸如比赛者当天的压力, 以及前一天晚上的睡眠时间等因素并加入模型中进行分析。因此,不应该批评该算法没有给出一个非常合适的模型。先将K最近邻模型的预测公式保存到数据表中,再使用朴素贝叶斯拟合这些相同的数据之后进行预测。


朴素贝叶斯窗口

首先注意到的是,验证集上的误分类率只是略高于40%。 混淆矩阵表明,对比K最近邻模型,朴素贝叶斯模型在验证集中更多地正确分类了七个观测。 最后,为每组添加了ROC曲线。 在验证集上,曲线下面积(模型拟合质量的另一个度量AUC)为0.5676。 虽然这不是很好,但它仍然比随机猜测(AUC ≈ 0.5)更好。

朴素贝叶斯报告

将朴素贝叶斯模型的预测公式保存到数据表中,以便对Elizabeth生日当天的比赛进行预测。因为Elizabeth他们在比赛9球的时候采用九局五胜制,所以不知道他们将进行多少场比赛。 Elizabeth会以5比0快速地击败她的丈夫吗? 或者需要9场比赛比完才能确定获胜者? 于是,在数据表中为每个潜在的比赛数量(5到9)添加一行,并查看对应的模型预测结果。

添加了预测行

对于这个特殊的日子,两个模型都同意Elizabeth应该成为最终的赢家,除非系列赛进入第9场比赛。 在那种情况下,K最近邻算法预测她将输球。 显然,对于她来说,这天将是一个快乐的生日!然而,Elizabeth却在那天沮丧地输掉了比赛。

发生了什么?

根据模型,结果看起来对Elizabeth有利,但她为什么她会输掉呢? 可以在朴素贝叶斯模型看看除了最终预测结果之外估计的获胜概率。
将概率公式保存到数据表中,很明显,虽然算法预计Elizabeth会赢,但最高概率只有不到75%,最低概率只有60%。 这意味着她的丈夫实际上有很好的获胜机会。所以,仅仅查看最终预测,错误地判断了Elizabeth生日获胜的实际机会。因此,在下次预测之前,需要谨慎地看一下所有的信息。


赢球概率。[注意:一些数据表列因为空间不足隐藏了。]


关于这些模型的一些感想:当模型中的变量不能很好地预测响应时,即使是最先进的算法也不能得到好的结果。我们看到这些模型的误分类率很高。 正如之前所说,这不是算法的错,而是数据收集的错误。大多数有着合理的预测变量的模型都会比现在的模型更成功。也许将来我们会在数据收集中添加更多的信息并重新查看这些模型。此外,台球是一项体育赛事,其中人的因素在最终结果中起到比大多数一般的机器学习应用场景中更大的作用。在大学联赛或职业足球比赛中,你几乎每个周末都可以看到这种情况。在这种比赛中,劣势一方反而赢得比赛。 然而,从长远来看,经过大量的试验,Elizabeth赢球的概率会更高,就像大多数时候最受欢迎的足球队获胜一样。 而且,事实上,如果看看Elizabeth生日后几天的结果,她确实赢得了其中大约60%的比赛。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|JMP数据分析论坛 ( 沪ICP备13022603 )  

GMT+8, 2020-8-15 17:48 , Processed in 0.302986 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表