首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 mlxtend 堆浅泛化:预测 NBA MVP

使用 mlxtend 堆浅泛化:预测 NBA MVP

作者头像
AI研习社
发布2019-07-23 15:35:58
8520
发布2019-07-23 15:35:58
举报
文章被收录于专栏:AI研习社AI研习社

原标题 | Stacked generalization with mlxtend: Predicting the NBA MVP 作者 | Steven Liu 译者 | 汪鹏(重庆邮电大学) 注:本文的相关链接请访问文末【阅读原文】

堆栈泛化: 基础知识

堆栈是一种集成学习技术,通过结合几个更简单模型的优势,构建更具预测性的模型。中心思想是训练几个不同的基础模型,然后将这些预测作为最终元学习者的输入。换句话说,取每个1级模型学习的内容,然后创建一个比任何一个模型更具预测性的新广义学习者(2级模型)。

堆栈泛化的例子

当我们创建这些堆叠的集合时,选择各种各样的1级模型非常重要,因为我们希望每个模型都添加尚未学习的信息。每个模型都应该为最终的元学习者贡献一些价值。因此,避免模型只是彼此的变化,否则我们只会添加冗余。

堆叠模型通常用于Kaggle比赛,并且非常适合团队,每个团队成员可以将他们的模型堆叠在一起。

只要记住要考虑准确性和可解释性/努力之间的权衡是否值得。一些堆叠的模型可能变得非常大。例如,Netflix第一次电影评级预测竞赛的成功解决方案涉及107个算法和200多个小时的工作!这是一个如此复杂的模型,Netflix最终决定额外的准确性增益不值得将模型投入生产所需的工程努力。

mlxtend

有很多方法可以创建堆叠模型,但在我看来,最简单的方法是从mlxtend开始,这是一个允许我们快速组装堆叠回归器的库。

在这个例子中(以及NBA季后赛的精神!),我们将尝试预测2018-2019赛季的MVP。数据集可以从Kaggle下载,它包含两个文件:

  • mvp_votings代表我们的训练集,并且具有从1980-81赛季开始的历史数据。这是媒体开始对联盟MVP投票的时候。目标是award_share,即球员获得MVP头衔的投票份额。
  • test_data来自当前赛季胜利贡献值前40名的球员,这个指标可以估算个人球员对球队的贡献。

开始入门

训练集共有637条数据。在读入并清理了一些数据之后,这就是数据帧的样子:

历史赛季的NBA统计数据

下一步是数据预处理:

# create feature and target variable    
X = df1.drop(columns='award_share')    
y = df1['award_share']

# standardize features    
from sklearn.preprocessing import StandardScaler    
X = StandardScaler().fit_transform(X)

数据标准化非常重要,因为存在具有显着不同大小的值,并且我们不希望任何一个特征支配目标函数。使用StandardScaler功能,我们可以:

  • 通过减去每个要素中的平均值来使数据适中。
  • 按标准偏差缩放每个要素。

单一随机森林回归

为了比较单个模型与堆叠回归量的性能,我们训练了随机森林回归模型。

# train with a single model    
from sklearn.ensemble import RandomForestRegressor
    
random_forest = RandomForestRegressor(n_estimators=500, max_depth=3)    
random_forest.fit(X, y)    
random_forest.score(X, y)

随机森林模型产生0.65的准确度分数。让我们看看堆叠回归器的表现如何。

堆栈回归

# train with stacked model
from sklearn.linear_model import LinearRegression
from sklearn.neighbors import KNeighborsRegressor
from sklearn.svm import LinearSVR
from sklearn.neural_network import MLPRegressor
from mlxtend.regressor import StackingRegressor

# initialize first layer of models and final learner
regr = StackingRegressor(regressors=[KNeighborsRegressor(),
                                     LinearRegression(),
                                     LinearSVR(),
                                     MLPRegressor()],
                         meta_regressor=RandomForestRegressor(n_estimators=500, max_depth=3))

# fit on data
regr.fit(X, y)

# get accuracy score
regr.score(X, y)

创建堆栈回归器非常简单:

  1. 从mlextend初始化StackingRegressor。
  2. 使用多个基本模型填充StackingRegressor。
  3. 指定用于元回归量(或最终学习者)的模型。

就是这样!从这里开始,您可以像平常一样使用scikit-learn模型进行拟合和预测。堆叠回归器的精度得分为0.84,与单一型号相比,精度提高了22%!

您可能还注意到我们没有在堆叠回归量中指定任何超参数,但是mlextend允许我们调整基本和元模型中的超参数。

要获取所有可调参数的列表,请调用estimator.get_params().keys()以查找支持的内容。

# tune hyperparameters
from sklearn.model_selection import RandomizedSearchCV

knn = KNeighborsRegressor()
rf = RandomForestRegressor()
mlp = MLPRegressor()

params = {'kneighborsregressor__n_neighbors':[5, 7, 9],
          'mlpregressor__solver':['sgd', 'adam'],
          'meta-randomforestregressor__n_estimators':[200, 500, 1000]}

grid = RandomizedSearchCV(estimator=regr,
                          param_distributions=params,
                          cv=5,
                          refit=True)

grid.fit(X, y)

然后我们可以调用grid.best_params_来返回最佳的超参数集以进行训练。

谁会是2018-2019赛季的MVP?

现在已经调整了叠加回归量,让我们预测谁将赢得MVP,并将其与NBA自己的预测进行比较。

字母哥是全场最受欢迎的球员,他赢得了MVP,而且击败了哈登!

哈登(左)与字母哥(右)

来自我们堆叠回归的一些值得注意的内容,包括Rudy Gobert,Steven Adams,Andre Drummond和Nikola Vucevic,他们都不是真正的MVP级别球员。我们可以看到,在Giannis和Harden之后,预测的award_share在第10名玩家中迅速衰减至0.18。

为了了解我们的堆叠模型的精确程度,您必须在2019年NBA奖项揭晓后后的6月24日回来查看谁真正赢得了MVP冠军。决赛选手被命名为:Giannis,Harden和Paul George(我们的模型中排名第五)。但事实上,毫无疑问,MVP将会给Giannis或Harden,他们每个人都有一个令人难以置信的赛季。

就我个人而言,我将支持Giannis(字母哥)在进攻和防守方面成为如此具有统治力的最高荣誉,同时在如此年轻的时候带领雄鹿队成为联盟的佼佼者。

感谢阅读,并随时发表评论或留下你可能有的任何反馈——包括你认为这届NBA的MVP应该是谁。

本文编辑:王立鱼

英语原文:https://heartbeat.fritz.ai/stacked-generalization-with-mlxtend-predicting-the-nba-mvp-fc5171daac60

想要继续查看该篇文章相关链接和参考文献?

点击底部【阅读原文】即可访问:

https://ai.yanxishe.com/page/TextTranslation/1779

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 堆栈泛化: 基础知识
  • mlxtend
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档