前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 mlxtend 堆浅泛化:预测 NBA MVP

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

作者头像
AI研习社
发布于 2019-07-23 07:35:58
发布于 2019-07-23 07:35:58
93400
代码可运行
举报
文章被收录于专栏:AI研习社AI研习社
运行总次数:0
代码可运行

原标题 | 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统计数据

下一步是数据预处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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功能,我们可以:

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

单一随机森林回归

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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的准确度分数。让我们看看堆叠回归器的表现如何。

堆栈回归

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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()以查找支持的内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ELK、Filebeat环境搭建
ELK为Elasticsearch、Logstash、Kibana简称,Filebeat为日志传输工具
LiosWong
2018/10/29
1.1K0
Spring Cloud + ELK 统一日志系统搭建
ELK 是 Elasticsearch、Logstash、Kibana 的简称,这三者是核心套件,但并非全部。
大数据真好玩
2021/01/26
3.4K0
Elastic Stack内置nginx日志收集
在Elastic Stack安装使用后,打开Kibana页面,开始进入内置的Nginx数据收集配置向导
十毛
2021/11/24
4340
Elastic Stack内置nginx日志收集
MySQL日志收集之Filebeat和Logstsh的一键安装配置(ELK架构)
关于ELK是什么、做什么用,我们不在此讨论。本文重点在如何实现快速方便地安装logstash和filebeat组件,特别是在近千台DB Server的环境下(为了安全保守,公司DB Server 目前尚未部署saltstack一类的管控软件)。在尽可能标准化的条件下,希望可以实现一键化安装。下面是我们功能实现的一些尝试,我们把手动一步步操作打包提炼到一个sh文档中,安装部署时只要执行sh文件即可。部署安装logstash和filebeat组件由原来的10分钟缩减到目前的1分钟左右,并且减少了因手动部署带来的误操作。
东山絮柳仔
2021/03/18
7200
使用 Filebeat 采集 Nginx 日志发送 ElasticSearch
可以使用 Filebeat 采集服务日志发送到 ElasticSearch 中进行搜索查看,这种方式体验好、效率高。
软件书桌
2024/05/07
8630
ELK-beats数据采集
因为logstash太费内存了,如果在要采集的服务上都安装logstash,你可以想象这样这样资源消耗多高。所以我们要用轻量级的采集工具才更高效,更省资源。
星哥玩云
2022/09/15
8500
ELK-beats数据采集
Beats:Beats 入门教程 (二)
这篇文章是 “Beats 入门教程 (一)”的续篇。在上一篇文章,我们主要讲述了 Beats 的一些理论方面的知识。在这篇文章中,我们将具体展示如何使用 Filebeat 及 Metriceat 把数据导入到我们的 Elasticsearch 并对他们进行分析。
腾讯云大数据
2020/07/14
1.2K0
Beats:Beats 入门教程 (二)
ELK Stack日志中心搭建
本文主要目的是简化搭建ELK环境的步骤,使用Docker Compose部署ELK 7.1.1分布式集群的日志框架,只需要执行一个init.sh脚本即可搭建好一个ELK Stack日志中心。
茶半香初
2021/11/26
5800
ELK Stack日志中心搭建
在ELK+Filebeat搭建日志中心
当前环境 系统:centos7 docker 1.12.1 介绍 ElasticSearch Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。 Logstash Logstash 是一个具有实时渠道能力的数据收集引擎,主要用于日志的收集与解析,并将其存入 ElasticSearch中。 Kibana Kibana 是一款基于 Apache 开源协议,使用
Java架构
2018/05/04
1.4K0
在ELK+Filebeat搭建日志中心
ELK+filebeat采集java日志
此文章是我在生产环境下搭建ELK日志系统的记录,该日志系统主要是采集Java日志,开发人员能通过kibanaWeb页面查找相关主机的指定日志;对于Java日志,filebeat已做多行合并、过滤行处理,更精准的获取需要的日志信息,关于ELK系统的介绍,这里不再赘述。
肓己
2021/08/12
1.8K0
面对成百上千台服务器产生的日志,试试这款轻量级日志搬运神器!
Filebeat是一款轻量级日志采集器,可用于转发和汇总日志与文件。Filebeat内置有多种模块(Nginx、MySQL、Redis、Elasticsearch、Logstash等),可针对常见格式的日志大大简化收集、解析和可视化过程,只需一条命令即可。
macrozheng
2020/08/27
6540
面对成百上千台服务器产生的日志,试试这款轻量级日志搬运神器!
kubernetes Filebeat+ELK日志收集监控方案
接收来自filebeat的数据,根据其中的tags进行分类,再添加index进行分类,例如nginx-access-%{+YYYY.MM.dd},在kibana中会根据这个index获取日志。
kubernetes中文社区
2019/06/24
3.2K0
kubernetes  Filebeat+ELK日志收集监控方案
傻瓜也能玩转日志归集
关注"一猿小讲"的猿友们都知道,前段时间我在《一文讲懂线上应用系统监控》给大家简单提到了日志归集,埋下了伏笔,今天的这篇分享是来给大家还债的,主要从整体到局部,深入了解一下日志归集。如果你正在困惑于每天登录服务器查询业务日志的繁琐,或正在寻找一个业务日志归集的方案,那么就请跟紧我的脚步,莫掉队。
一猿小讲
2019/08/16
7690
傻瓜也能玩转日志归集
搭建ELFK日志采集系统
最近的工作涉及搭建一套日志采集系统,采用了业界成熟的ELFK方案,这里将搭建过程记录一下。
jeremyxu
2019/03/13
2.6K0
搭建ELFK日志采集系统
Linux安装ELK日志平台(7.5.1)
一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大也就是日志量多而复杂的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
子润先生
2021/07/07
1.8K1
ELFK服务搭建
在上述命令的输出里可以看到集群的相关信息,同时 nodes 字段里面包含了每个节点的详细信息,这样一个基本的elasticsearch集群就部署好了。
不凡
2021/08/31
9290
ELFK服务搭建
Elastic 技术栈之 Filebeat
Elastic 技术栈之 Filebeat 简介 Beats 是安装在服务器上的数据中转代理。 Beats 可以将数据直接传输到 Elasticsearch 或传输到 Logstash 。 Beats
静默虚空
2018/03/16
2K0
Elastic 技术栈之 Filebeat
Linux运维日志收集ELKStack安装部署
对于日志来说,最常见的需求就是收集、存储、查询、展示,开源社区正好有相对应的开源项目:logstash(收集)、elasticsearch(存储+搜索)、kibana(展示),我们将这三个组合起来的技术称之为ELKStack,所以说ELKStack指的是Elasticsearch、Logstash、Kibana技术栈的结合。
王先森sec
2023/04/24
5670
Linux运维日志收集ELKStack安装部署
FileBeat收集Nginx的日志到ELK中进行可视化分析
将SpringBoot应用的日志输出到Logstash之后,所有的应用日志都可以使用使用Kibana进行可视化的检索,使用起来还是蛮香的,Kibana用着用着之后发现他的强大远不止于日志检索,因为他拥有一个可视化分析的功能.
姜同学
2022/10/27
3980
FileBeat收集Nginx的日志到ELK中进行可视化分析
Elastic Stack之 Filebeat 6.7.1版本安装
1、截至目前Elasticsearch 版本已经更新到了7.10.1版本了,这里先使用Filebeat 6.7.1版本,给一个下载地址,如下所示:
别先生
2021/01/13
9460
相关推荐
ELK、Filebeat环境搭建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验