乐趣区

python在Scikitlearn中用决策树和随机森林预测NBA获胜者

原文链接:http://tecdat.cn/?p=5222

在本文中,我们将以 Scikit-learn 的决策树和随机森林预测 NBA 获胜者。美国国家篮球协会(NBA)是北美主要的男子职业篮球联赛,被广泛认为是首屈一指的男子职业篮球联赛在世界上。它有 30 个团队(美国 29 个,加拿大 1 个)。

在 常规赛期间,每支球队打 82 场比赛,每场 41 场。一支球队每年会有四次面对对手(16 场比赛)。每个小组在其四次(24 场比赛)中的其他两个小组中的六个小组中进行比赛,其余四个小组三次(12 场)进行比赛。最后,每个队都会在另一场比赛中两次参加所有的球队(30 场比赛)。

用决策树和随机森林预测 NBA 获胜者

#导入数据集并解析日期导入熊猫作为 pd df = pd。read_csv(“NBA_2017_regularGames.csv”,parse_dates = [“Date”])

从游戏玩法的描述中,我们可以计算机会率。在每场比赛中,主队和客队都有可能赢得一半时间

预测类

在下面的代码中,我们将指定我们的分类类。这将帮助我们查看决策树分类器的预测是否正确。如果主队获胜,我们将指定我们的等级为 1,如果访客队在另一个名为“主队赢”的列中获胜,我们将指定为 0。

df [“主队获胜”] = df [“访客积分”] < df [“主队积分”]

主队胜率:58.4%

#该数组现在拥有 scikit-learn 可以读取的格式的类值。

特征工程

我们将创建以下功能来帮助我们预测 NBA 2017 年的获胜者。

无论是来访者还是主队都赢得了最后一场比赛。

一般认为哪个团队更好?

scikit-learn 软件包实现 CART(分类和回归树)算法作为其默认 决策树类

决策树实现提供了一种方法来停止构建树,以防止过度使用以下选项:

• min_samples_split: can create arbitrary small leaves in order to create a new node in the decision tree• min_samples_leaf: guarantees a minimum number of samples in a leaf resultingfrom a node

建议使用 min_samples_split 或 min_samples_leaf 来控制叶节点处的采样数。一个非常小的数字通常意味着树将过度拟合,而大量的数据将阻止树学习数据。

决策的另一个参数是创建决策的标准。基尼的不纯和信息收益是两种流行的:

• Gini impurity: measures how often a decision node would incorrectly predict a sample's class•`Information gain: indicate how much extra information is gained by the decision node

功能选择

我们通过指定我们希望使用的列并使用数据框视图的 values 参数,从数据集中提取要素以与我们的 scikit-learn 的 DecisionTreeClassifier 一起使用。我们使用 cross_val_score 函数来测试结果。

X_features_only = df [['Home Win Streak','Visitor Win Streak','Home Team Ranks Higher','Home Team Won Last','Home Last Win','Visitor Last Win']]。值 

结果准确性:56.0%

通过选择我们制作的功能,精确度下降到 56%。是否有可能通过添加更多功能来提高准确性。

混淆矩阵显示了我们决策树的正确和不正确的分类。对角线 1,295 分别表示主队的真正负数和真正的正数。左下角的 1 表示假阴性的数量。而右上角的 195,误报的数量。我们也可以查看大约 0.602 的准确性分数,这表明决策树模型已经将 60.2%的样本正确地归类为主队获胜与否。

导入 pydotplus 图

出于探索的目的,测试较少数量的变量以便首先获得决策树输出的感觉会很有帮助。最终的树开始于 X 的分裂,我们的第一个解释变量,主队队列更高。如果主队排名较高的值小于 4.5,那么主队就会松动,因为我们的二元变量具有虚假等值亏损值和真实同赢。

如有任何问题、意见,请留言咨询

退出移动版