用随机森林预测NBA球员打什么么位置?
文 | Jurgen 译者 | Cup
目的
用NBA球员的统计数据来预测他们所打的位置。
方式
决策树和随机森林
引言
众所周知,篮球队分为大前锋、小前锋、得分后卫、控球后卫和中锋五个位置,虽然现在无位置篮球正在兴起,但是我们还是可以用球员的历史数据来预测它的位置。在这里我们就是要对球员进行一个多分类,方法选用经典的决策树和它们的集成方法——随机森林。接下来我们先看一下这五个位置各有什么特点,当然你可能比我更清楚这些内容,但是我们也不是在做无用功,注意加重的文字,我们就从这些里面选择特征。
中锋
中锋一般都是整支球队中最高的,能够进行激烈的身体对抗,负责篮板和阻拦,得分方式主要靠勾手、跳投和扣篮。
平均身高:6’11.25”
平均体重:257 lbs
控球后卫
控卫一般都是最矮的球员,应该具有优秀的过人能力和控球能力,而不是作为主要投手。一般控卫都是在攻防转换中带球过场的那个人,在进攻和防守之间控制好球权。优秀的控卫在助攻和抢断上数据很好看。
平均身高:6’2
平均体重:189 lbs
得分后卫
得分后卫一般比控卫要高一点但还是要比前锋矮,他的定位是全队的最佳投手,在其他队友的掩护下投篮得分,也要足够灵活分担控卫的职责。
平均身高:6’5.25”
平均体重:209 lbs
小前锋
小前锋被视为是进攻时的全能球员,既要足够强转可以在内线对抗又要足够灵活足够在外线驰骋,能够在外线和内线都具有较强的得分能力。
平均身高:6’7.75”
平均体重:225 lbs
大前锋
大前锋是一个既要身体高大强壮,还要有一定的速度,能够积极进攻并抢得篮板。
平均身高:6’9.5”
平均体重:246 lbs
变量
我们选择了15个变量来进行预测分析:
- 场均得分 Points per Game
- 真实投篮命中得分 True Shooting Score
- 进攻篮板 Offensive Rebounds
- 防御篮板 Defensive Rebounds
- 总篮板 Total Rebounds
- 助攻 Assists
- 盖帽 Blocks
- 失误 Turn Overs
- 团队利用Team Play Usage
- 进攻等级 Offensive Ratings
- 防守等级 Defensive Ratings
- 进攻胜利贡献 Offensive Win Shares
- 防守胜利贡献 Defensive Win Shares
- 胜利贡献 Win Shares
- 抢断 Steals
可视化
在分析之前,我们先来看一些变量在不同位置中的分布,从而判断什么变量可以帮助我们区分不同的位置。以下几个可视化的图表显示了这15个变量的分布。可以清晰地发现,中锋和大前锋在篮板和盖帽的数量上独领风骚,这就很可能成为决策树的分支变量。更加显著的是助攻数据,看到这里我认为要获得一个高的预测准确度还是容易达到的。
数据汇总
分布
热力图(按变量)
热力图(按位置)
决策树和随机森林分类器
适度拟合的决策树
决策树类似于一个向你问问题的机器。比如我们有一个新球员,要预测他的位置。决策树就会问:“它的总篮板数是多少”,然后你给它一个答案,它向你问的下一个问题是基于上一个问题的答案,直到他问的问题足够多以后他不会再问了而是告诉你这个球员会打什么位置。决策树很好理解而且做出来的图也很直观。
混淆矩阵显示中锋和大前锋预测正确率在50%左右,因为这两个位置往往可替代性很强,混淆的部分也很大。我们也看到了控卫的预测正确率有80%。做的这里我就想随机森林的结果一定会更好。
过拟合的决策树
过拟合是指一个模型训练的程度过头了,导致这了模型把很多因为抽样所带来的随机因素考虑进去,从而导致模型的泛化能力差,在决策树中主要是没有进行剪枝的问题。可以从图中看出这个决策树的分支很多,数比较深。而混淆矩阵显示模型的预测准确率变差了。从方差—偏差权衡的角度来看,过拟合往往是因为过于注重控制偏差,反而使方差超过了最优水平。
随机森林
随机森林是把很多的决策树组合在一起的集成算法,在下面我们可以看到在模型集成的过程中加入了随机因素,所以综合称之为随机森林。
第一种随机因素是指我们在训练模型时用的是自助采样法随机抽取出来的样本子集,这样可以使得我们的预测更为稳定并减少过拟合的风险。
第二种随机因素是构建决策树并选择最优特征划分样本时,在一个随机抽取的特征子集中选择最优特征。这样可以集成更多的树,降低方差。
在展示结果之前,我们先来剖析一下模型的训练过程。我们确定要集成的决策树数目为T,第一步是为每一棵树随机抽取一个样本子集,一般为样本全集的2/3。第二步是在树的每个节点上随机抽取m个特征作为特征子集。第三步是树的生成,在每个节点上选择一个最佳的特征进行分支。在下一个节点上继续随机选择m个特征重复以上步骤。
在我做的过程当中,我只注重调整两个影响力最大的参数,就是ntree和ntry,ntree就是指数的数目T,mtry就是指随机抽取的样本子集的大小m。
调参
对于第一个参数T我设置为180,这个图
展示了每个参数值对应的最小袋外误差。
对于参数m我设置为9,从下图袋外误差中可以看出当m=9的时候误差最小。
从混淆矩阵显示结果来看,随机森林的预测结果明显优于决策树,尤其是控球后卫的预测结果较好,但是对大前锋和得分后卫的预测精度就有些下降了。我的数据集还是有些太少,如果我们用更多的数据,随机森林的效果必然有更高的提升。在我下一步的计划中,我想从50个赛季中抓取数据,然后做一个类似的分析看看最终结果如何。
结论
这篇博客是利用NBA球员的历史数据来预测球员的位置,我用的是决策树和它的集成算法随机森林。结果显示随机森林表现得更好一点,但是提升空间也很大。
译者注:从混淆矩阵结果来看并没有预想的那么好,另外作者明明在介绍各种位置的时候着重介绍了身高和体重的问题却没有将其加入特征全集中,也有特征选用少的原因。有兴趣的朋友可以进一步尝试扩大数据集和特征集以求更好的结果。
以下是代码集,作者用的是R语言。
36大数据(www.36dsj.com)成立于2013年5月,是中国访问量最大的大数据网站。36大数据(微信号:dashuju36)以独立第三方的角度,为大数据产业生态图谱上的需求商 、应用商、服务商、技术解决商等相关公司及从业人员提供全球资讯、商机、案例、技术教程、项目对接、创业投资及专访报道等服务。
End.
转载请注明来自36大数据(36dsj.com): 36大数据 » 用随机森林预测NBA球员打什么么位置?