精华内容
下载资源
问答
  • python预测算整理集合

    2019-03-05 22:25:20
    python预测算整理集合,包含SVR回归预测详解及代码,AR/ARMA LSTM预测详解及代码 卡尔曼滤波,粒子滤波等算法
  • 篇预测入门章认识预测21.1什么是预测21.1.1占卜术31.1.2神秘的地动仪31.1.3科学预测51.1.4预测的原则71.2前沿技术91.2.1...Python预测初步261.3.1数据预处理271.3.2建立模型311.3.3预测及误差分析34第2章预测方法...

    篇预测入门

    章认识预测2

    1.1什么是预测2

    1.1.1占卜术3

    1.1.2神秘的地动仪3

    1.1.3科学预测5

    1.1.4预测的原则7

    1.2前沿技术9

    1.2.1大数据与预测10

    1.2.2大数据预测的特点11

    1.2.3人工智能与预测15

    1.2.4人工智能预测的特点17

    1.2.5典型预测案例18

    1.3Python预测初步26

    1.3.1数据预处理27

    1.3.2建立模型31

    1.3.3预测及误差分析34

    第2章预测方法论37

    2.1预测流程37

    2.1.1确定主题38

    2.1.2收集数据40

    2.1.3选择方法42

    2.1.4分析规律43

    2.1.5建立模型48

    2.1.6评估效果51

    2.1.7发布模型52

    2.2指导原则53

    2.2.1界定问题53

    2.2.2判断预测法55

    2.2.3外推预测法56

    2.2.4因果预测法58

    2.3团队构成59

    2.3.1成员分类59

    2.3.2数据氛围61

    2.3.3团队合作63

    第3章探索规律65

    3.1相关分析.65

    3.1.1自相关分析65

    3.1.2偏相关分析68

    3.1.3简单相关分析69

    3.1.4互相关分析80

    3.1.5典型相关分析82

    3.2因果分析87

    3.2.1什么是因果推断87

    3.2.2因果推断的方法90

    3.2.3时序因果推断93

    3.3聚类分析98

    3.3.1K-Means算法98

    3.3.2系统聚类算法102

    3.4关联分析110

    3.4.1关联规则挖掘110

    3.4.2Apriori算法111

    3.4.3Eclat算法120

    3.4.4序列模式挖掘123

    3.4.5SPADE算法124

    第4章特征工程136

    4.1特征变换136

    4.1.1概念分层137

    4.1.2标准化138

    4.1.3离散化141

    4.1.4函数变换143

    4.1.5深入表达144

    4.2特征组合145

    4.2.1基于经验145

    4.2.2二元组合146

    4.2.3高阶多项式148

    4.3特征评价151

    4.3.1特征初选151

    4.3.2影响评价152

    4.3.3模型法167

    4.4特征学习172

    4.4.1基本思路173

    4.4.2特征表达式174

    4.4.3初始种群183

    4.4.4适应度185

    4.4.5遗传行为187

    4.4.6实例分析192

    第2篇预测算法

    第5章参数优化199

    5.1交叉验证199

    5.2网格搜索201

    5.3遗传算法203

    5.3.1基本概念203

    5.3.2遗传算法算例204

    5.3.3遗传算法实现步骤209

    5.3.4遗传算法Python实现210

    5.4粒子群优化213

    5.4.1基本概念及原理213

    5.4.2粒子群算法的实现步骤214

    5.4.3用Python实现粒子群算法215

    5.5模拟退火220

    5.5.1基本概念及原理220

    5.5.2模拟退火算法的实现步骤221

    5.5.3模拟退火算法Python实现222

    第6章线性回归及其优化226

    6.1多元线性回归226

    6.1.1回归模型与基本假定226

    6.1.2最小二乘估计227

    6.1.3回归方程和回归系数的显著性检验228

    6.1.4多重共线性229

    6.2Ridge回归233

    6.2.1基本概念233

    6.2.2岭迹曲线233

    6.2.3基于GCV准则确定岭参数235

    6.2.4Ridge回归的Python实现237

    6.3Lasso回归237

    6.3.1基本概念237

    6.3.2使用LAR算法求解Lasso238

    6.3.3Lasso算法的Python实现240

    6.4分位数回归242

    6.4.1基本概念242

    6.4.2分位数回归的计算245

    6.4.3用单纯形法求解分位数回归及Python实现246

    6.5稳健回归248

    6.5.1基本概念249

    6.5.2M估计法及Python实现250

    第7章复杂回归分析254

    7.1梯度提升回归树(GBRT)254

    7.1.1Boosting方法简介254

    7.1.2AdaBoost算法255

    7.1.3提升回归树算法257

    7.1.4梯度提升259

    7.1.5GBRT算法的Python实现261

    7.2深度神经网络264

    7.2.1基本概念264

    7.2.2从线性回归说起269

    7.2.3浅层神经网络272

    7.2.4深层次拟合问题277

    7.2.5DNN的Python实现278

    7.3支持向量机回归281

    7.3.1基本问题281

    7.3.2LS-SVMR算法284

    7.3.3LS-SVMR算法的Python实现285

    7.4高斯过程回归286

    7.4.1GPR算法287

    7.4.2GPR算法的Python实现289

    第8章时间序列分析292

    8.1Box-Jenkins方法292

    8.1.1p阶自回归模型293

    8.1.2q阶移动平均模型295

    8.1.3自回归移动平均模型296

    8.1.4ARIMA模型300

    8.1.5ARIMA模型的Python实现301

    8.2门限自回归模型309

    8.2.1TAR模型的基本原理309

    8.2.2TAR模型的Python实现310

    8.3GARCH模型族313

    8.3.1线性ARCH模型313

    8.3.2GRACH模型315

    8.3.3EGARCH模型315

    8.3.4PowerARCH模型316

    8.4向量自回归模型318

    8.4.1VAR模型基本原理318

    8.4.2VAR模型的Python实现320

    8.5卡尔曼滤波324

    8.5.1卡尔曼滤波算法介绍324

    8.5.2卡尔曼滤波的Python实现326

    8.6循环神经网络328

    8.6.1RNN的基本原理329

    8.6.2RNN算法的Python实现332

    8.7长短期记忆网络335

    8.7.1LSTM模型的基本原理336

    8.7.2LSTM算法的Python实现341

    第3篇预测应用

    第9章短期日负荷曲线预测345

    9.1电力行业负荷预测介绍345

    9.2短期日负荷曲线预测的基本要求346

    9.3预测建模准备347

    9.3.1基础数据采集347

    9.3.2缺失数据处理349

    9.3.3潜在规律分析352

    9.4基于DNN算法的预测355

    9.4.1数据要求356

    9.4.2数据预处理356

    9.4.3网络结构设计357

    9.4.4建立模型358

    9.4.5预测实现359

    9.4.6效果评估359

    9.5基于LSTM算法的预测361

    9.5.1数据要求361

    9.5.2数据预处理362

    9.5.3网络结构设计362

    9.5.4建立模型363

    9.5.5预测实现364

    9.5.6效果评估364

    0章股票价格预测367

    10.1股票市场简介367

    10.2获取股票数据368

    10.3基于VAR算法的预测371

    10.3.1平稳性检验371

    10.3.2VAR模型定阶372

    10.3.3预测及效果验证373

    10.4基于LSTM算法的预测375

    10.4.1数据要求375

    10.4.2数据预处理376

    10.4.3网络结构设计377

    10.4.4建立模型377

    10.4.5预测实现378

    10.4.6效果评估378

    参考文献381显示全部>>隐藏全部>>

    展开全文
  • 原标题:用Python预测收入,我用Python机器学习了5万人的数据Python界的网红机器学习,这股浪潮已经逐渐成为热点,而Python是机器学习方向的头牌语言,用机器学习来玩一些好玩的项目一定很有意思。比如根据你的职业...

    原标题:用Python预测收入,我用Python机器学习了5万人的数据

    Python界的网红机器学习,这股浪潮已经逐渐成为热点,而Python是机器学习方向的头牌语言,用机器学习来玩一些好玩的项目一定很有意思。比如根据你的职业,婚姻,家庭,教育时间等等来预测你的收入,这么神奇!不信的话,一起跟我往下看。

    1.数据集

    收入问题一直是大家比较关心的热点,在kaggle比赛中,也出现过此类的数据集,因此,本次小实战的数据集就是来源于kaggle比赛的数据集,数据集长得样子如下:

    上面密密麻麻一堆记录了几万人的收入数据,每个人的收入数据其实就是下面这些特征值,比如你的年龄,工作类类型啊,婚否,教育水平啊,时间啊,职业等等,详细如下:

    1).导入数据集

    我们将训练集和测试集加入列标签,然后查看训练集的信息,如下图所示:

    2.数据清洗

    2).去掉缺失值

    数据集中存在缺失值,并且以‘ ?’形式来代替,所以我们要对这样的数据进行剔除。并将剔除后的数据集进行重新排序,如下图所示:

    3).数值处理

    因为测试集和训练集中标签‘income’的数据存在不统一的问题,在测试集中是以‘<=50K.’的形式,而训练集中是‘<=50K’,所以要将测试集中的数据形式改为训练集中的数据形式。

    为了使得数据集中的编码类型一致,我们将数据集中的string类型,转化为数值类型,用到的是pandas库中的Categorical函数,转化完成后,通过观察数据集中的‘income’数据值来检查是否完成转换。

    转化完成后,原先数据集中的字符串便被数字所代替,例如‘income’中的数据,原先是’<=50K’和’>50K’。现在分别对应为0和1。其他的列也是同样的改变方式。也就是说最后我们预测收入如果为0,表示收入小于50k。

    在这推荐下小编创建的Python学习交流群556370268,可以获取Python入门基础教程,送给每一位小伙伴,这里是小白聚集地,每天还会直播和大家交流分享经验哦,欢迎初学和进阶中的小伙伴。

    到目前为止,数据清洗的工作基本上完成,下面,我们通过pandas库中的交叉表函数(crosstab)来观察‘受教育时间’和收入之间的关系:

    其中‘income’下的1代表收入大于50K,由上图可以看出,当受教育时间小于8年时,收入大于50K的人数可谓是寥寥无几,所以说从统计概率的角度上讲,九年义务教育,对大家的收入还是很有帮助的。

    3.用决策树来构建模型

    什么是决策树,看下面这个形象的比如,就一清二楚了。

    社区大妈经验丰富,有一套自己的判断逻辑。假设“抽烟”、“染发”和“讲脏话”是社区大妈认为的区分“好坏”学生的三项关键特征,那么这样一个有先后次序的判断逻辑就构成一个决策树模型。在决策树中,最能区分类别的特征将作为最先判断的条件,然后依次向下判断各个次优特征。决策树的核心就在于如何选取每个节点的最优判断条件,也即特征选择的过程。

    而在每一个判断节点,决策树都会遵循一套IF-THEN的规则:

    IF “抽烟” THEN -> “坏学生”

    ELSE

    IF “染发” THEN -> “坏学生”

    ELSE IF “讲脏话” THEN -> “坏学生”

    ELSE -> “好学生”

    通过sklearn库提供的决策树算法,可以很方便的进行分类:

    首先是建立一个clf的决策树分类器

    然后将我们的训练数据导入fit函数,这里我们用到数据集中所有的特征值,因为数据集中的特征值只有14维,并不是很高的特征维度,因此,并不需要进行降维处理。

    接着将数据导入训练决策树算法,训练完成后再我们的测试集上进行测试,

    最后训练结果显示,准确率在80%左右,效果还是很不错的。

    4.预测你的收入

    看到这里小白是不是有点晕,这个模型到底靠不靠谱,我们用更直观的收入的例子来试试就知道啦:

    上面的这个人有一堆参数,如果我们输入模型里面,通过模型来预测一些它的收入到底是多少呢,是不是真的是小于50K:

    这里的array[0]表示最后的预测收入是小于50k的,而实际上这组数据的收入也确实如此!懂点机器学习还是很有用的,尤其是喂了大量的数据之后,当然我们还可以通过网格来寻找最佳参数,有兴趣的小伙伴可以动手试试!返回搜狐,查看更多

    责任编辑:

    展开全文
  • 主要介绍了Python预测2020高考分数和录取情况可能是这样,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 认识预测1.1 什么是预测1.1.1 占卜术1.1.2 神秘的地动仪1.1.3 科学预测1.1.4 预测的原则1.2 前沿技术1.2.1 大数据与预测1.2.2 大数据预测的...Python预测初步1.3.1 数据预处理1.3.2 建立模型1.3.3 预测及...

    前折页

    书名页

    内容简介

    版权页

    前言

    第1篇 预测入门

    第1章 认识预测

    1.1 什么是预测

    1.1.1 占卜术

    1.1.2 神秘的地动仪

    1.1.3 科学预测

    1.1.4 预测的原则

    1.2 前沿技术

    1.2.1 大数据与预测

    1.2.2 大数据预测的特点

    1.2.3 人工智能与预测

    1.2.4 人工智能预测的特点

    1.2.5 典型预测案例

    1.3 Python预测初步

    1.3.1 数据预处理

    1.3.2 建立模型

    1.3.3 预测及误差分析

    第2章 预测方法论

    2.1 预测流程

    2.1.1 确定主题

    2.1.2 收集数据

    2.1.3 选择方法

    2.1.4 分析规律

    2.1.5 建立模型

    2.1.6 评估效果

    2.1.7 发布模型

    2.2 指导原则

    2.2.1 界定问题

    2.2.2 判断预测法

    2.2.3 外推预测法

    2.2.4 因果预测法

    2.3 团队构成

    2.3.1 成员分类

    2.3.2 数据氛围

    2.3.3 团队合作

    第3章 探索规律

    3.1 相关分析

    3.1.1 自相关分析

    3.1.2 偏相关分析

    3.1.3 简单相关分析

    3.1.4 互相关分析

    3.1.5 典型相关分析

    3.2 因果分析

    3.2.1 什么是因果推断

    3.2.2 因果推断的方法

    3.2.3 时序因果推断

    3.3 聚类分析

    3.3.1 K-Means算法

    3.3.2 系统聚类算法

    3.4 关联分析

    3.4.1 关联规则挖掘

    3.4.2 Apriori算法

    3.4.3 Eclat算法

    3.4.4 序列模式挖掘

    3.4.5 SPADE算法

    第4章 特征工程

    4.1 特征变换

    4.1.1 概念分层

    4.1.2 标准化

    4.1.3 离散化

    4.1.4 函数变换

    4.1.5 深入表达

    4.2 特征组合

    4.2.1 基于经验

    4.2.2 二元组合

    4.2.3 高阶多项式

    4.3 特征评价

    4.3.1 特征初选

    4.3.2 影响评价

    4.3.3 模型法

    4.4 特征学习

    4.4.1 基本思路

    4.4.2 特征表达式

    4.4.3 初始种群

    4.4.4 适应度

    4.4.5 遗传行为

    4.4.6 实例分析

    第2篇 预测算法

    第5章 参数优化

    5.1 交叉验证

    5.2 网格搜索

    5.3 遗传算法

    5.3.1 基本概念

    5.3.2 遗传算法算例

    5.3.3 遗传算法实现步骤

    5.3.4 遗传算法的Python实现

    5.4 粒子群优化

    5.4.1 基本概念及原理

    5.4.2 粒子群算法的实现步骤

    5.4.3 粒子群算法的Python实现

    5.5 模拟退火

    5.5.1 基本概念及原理

    5.5.2 模拟退火算法的实现步骤

    5.5.3 模拟退火算法的Python实现

    第6章 线性回归及其优化

    6.1 多元线性回归

    6.1.1 回归模型与基本假定

    6.1.2 最小二乘估计

    6.1.3 回归方程和回归系数的显著性检验

    6.1.4 多重共线性

    6.2 Ridge回归

    6.2.1 基本概念

    6.2.2 岭迹曲线

    6.2.3 基于GCV准则确定岭参数

    6.2.4 Ridge回归的Python实现

    6.3 Lasso回归

    6.3.1 基本概念

    6.3.2 使用LAR算法求解Lasso

    6.3.3 Lasso算法的Python实现

    6.4 分位数回归

    6.4.1 基本概念

    6.4.2 分位数回归的计算

    6.4.3 用单纯形法求解分位数回归及Python实现

    6.5 稳健回归

    6.5.1 基本概念

    6.5.2 M估计法及Python实现

    第7章 复杂回归分析

    7.1 梯度提升回归树(GBRT)

    7.1.1 Boosting方法简介

    7.1.2 AdaBoost算法

    7.1.3 提升回归树算法

    7.1.4 梯度提升

    7.1.5 GBRT算法的Python实现

    7.2 深度神经网络

    7.2.1 基本概念

    7.2.2 从线性回归说起

    7.2.3 浅层神经网络

    7.2.4 深层次拟合问题

    7.2.5 DNN的Python实现

    7.3 支持向量机回归

    7.3.1 基本问题

    7.3.2 LS-SVMR算法

    7.3.3 LS-SVMR算法的Python实现

    7.4 高斯过程回归

    7.4.1 GPR算法

    7.4.2 GPR算法的Python实现

    第8章 时间序列分析

    8.1 Box-Jenkins方法

    8.1.1 p阶自回归模型

    8.1.2 q阶移动平均模型

    8.1.3 自回归移动平均模型

    8.1.4 ARIMA模型

    8.1.5 ARIMA模型的Python实现

    8.2 门限自回归模型

    8.2.1 TAR模型的基本原理

    8.2.2 TAR模型的Python实现

    8.3 GARCH模型族

    8.3.1 线性ARCH模型

    8.3.2 GRACH模型

    8.3.3 EGARCH模型

    8.3.4 PowerARCH模型

    8.4 向量自回归模型

    8.4.1 VAR模型的基本原理

    8.4.2 VAR模型的Python实现

    8.5 卡尔曼滤波

    8.5.1 卡尔曼滤波算法介绍

    8.5.2 卡尔曼滤波的Python实现

    8.6 循环神经网络

    8.6.1 RNN的基本原理

    8.6.2 RNN算法的Python实现

    8.7 长短期记忆网络

    8.7.1 LSTM模型的基本原理

    8.7.2 LSTM算法的Python实现

    第3篇 预测应用

    第9章 短期日负荷曲线预测

    9.1 电力行业负荷预测介绍

    9.2 短期日负荷曲线预测的基本要求

    9.3 预测建模准备

    9.3.1 基础数据采集

    9.3.2 缺失数据处理

    9.3.3 潜在规律分析

    9.4 基于DNN算法的预测

    9.4.1 数据要求

    9.4.2 数据预处理

    9.4.3 网络结构设计

    9.4.4 建立模型

    9.4.5 预测实现

    9.4.6 效果评估

    9.5 基于LSTM算法的预测

    9.5.1 数据要求

    9.5.2 数据预处理

    9.5.3 网络结构设计

    9.5.4 建立模型

    9.5.5 预测实现

    9.5.6 效果评估

    第10章 股票价格预测

    10.1 股票市场简介

    10.2 获取股票数据

    10.3 基于VAR算法的预测

    10.3.1 平稳性检验

    10.3.2 VAR模型定阶

    10.3.3 预测及效果验证

    10.4 基于LSTM算法的预测

    10.4.1 数据要求

    10.4.2 数据预处理

    10.4.3 网络结构设计

    10.4.4 建立模型

    10.4.5 预测实现

    10.4.6 效果评估

    参考文献

    后折页

    展开全文
  • 利用Python预测NBA比赛结果

    万次阅读 2018-06-06 19:47:02
    关注「实验楼」,每天分享一个项目教程 NBA总决赛正在火热上演,而有数据的地方就有预测,本教程就教你使用Python预测NBA比赛的结果。正文共:3240 字 预计阅...
        

    关注「实验楼」,每天分享一个项目教程   

    NBA总决赛正在火热上演,而有数据的地方就有预测,本教程就教你使用Python预测NBA比赛的结果。

    正文共:3240 字 

    预计阅读时间:8 分钟

    一、实验介绍

    1.1 内容简介

    不知道你是否朋友圈被刷屏过nba的某场比赛进度或者结果?或者你就是一个nba狂热粉,比赛中的每个进球,抢断或是逆转压哨球都能让你热血沸腾。除去观赏精彩的比赛过程,我们也同样好奇比赛的结果会是如何。因此本节课程,将给同学们展示如何使用nba比赛的以往统计数据,判断每个球队的战斗力,及预测某场比赛中的结果。

    我们将基于2015-2016年的NBA常规赛及季后赛的比赛统计数据,预测在当下正在进行的2016-2017常规赛每场赛事的结果。

    640?wx_fmt=png

    1.2 实验知识点

    • nba球队的Elo score计算

    • 特征向量

    • 逻辑回归

    1.3 实验环境

    • python2.7

    • Xfce终端

    1.4 实验流程

    本次课程我们将按照下面的流程实现NBA比赛数据分析的任务:

    1. 获取比赛统计数据

    2. 比赛数据分析,得到代表每场比赛每支队伍状态的特征表达

    3. 利用**机器学习**方法学习每场比赛与胜利队伍的关系,并对2016-2017的比赛进行预测

    1.5 代码获取

    本次实验的源码可通过以下命令获得:

    $ wget http://labfile.oss.aliyuncs.com/courses/782/prediction.py

    二、获取 NBA比赛统计数据

    2.1 比赛数据介绍

    在本次实验中,我们将采用Basketball Reference.com中的统计数据。在这个网站中,你可以看到不同球员、队伍、赛季和联盟比赛的基本统计数据,如得分,犯规次数等情况,胜负次数等情况。而我们在这里将会使用2015-16 NBA Season Summary中数据。

    640?wx_fmt=png

    在这个2015-16总结的所有表格中,我们将使用的是以下三个数据表格:

    • Team Per Game Stats:每支队伍平均每场比赛的表现统计

    | 数据名 | 含义 || ------------------------------------ | -------------- || Rk -- Rank | 排名 || G -- Games | 参与的比赛场数(都为82场) || MP -- Minutes Played | 平均每场比赛进行的时间 || FG--Field Goals | 投球命中次数 || FGA--Field Goal Attempts | 投射次数 || FG%--Field Goal Percentage | 投球命中次数 || 3P--3-Point Field Goals | 三分球命中次数 || 3PA--3-Point Field Goal Attempts | 三分球投射次数 || 3P%--3-Point Field Goal Percentage | 三分球命中率 || 2P--2-Point Field Goals | 二分球命中次数 || 2PA--2-point Field Goal Attempts | 二分球投射次数 || 2P%--2-Point Field Goal Percentage | 二分球命中率 || FT--Free Throws | 罚球命中次数 || FTA--Free Throw Attempts | 罚球投射次数 || FT%--Free Throw Percentage | 罚球命中率 || ORB--Offensive Rebounds | 进攻篮板球 || DRB--Defensive Rebounds | 防守篮板球 || TRB--Total Rebounds | 篮板球总数 || AST--Assists | 助攻 || STL--Steals | 抢断 || BLK -- Blocks | 封盖 || TOV -- Turnovers | 失误 || PF -- Personal Fouls | 个犯 || PTS -- Points | 得分 |

    • Opponent Per Game Stats:所遇到的对手平均每场比赛的统计信息,所包含的统计数据与Team Per Game Stats中的一致,只是代表的该球队对应的对手的

    • Miscellaneous Stats:综合统计数据

    数据项数据含义
    Rk (Rank)排名
    Age队员的平均年龄
    W (Wins)胜利次数
    L (Losses)失败次数
    PW (Pythagorean wins)基于毕达哥拉斯理论计算的赢的概率
    PL (Pythagorean losses)基于毕达哥拉斯理论计算的输的概率
    MOV (Margin of Victory)赢球次数的平均间隔
    SOS (Strength of Schedule)用以评判对手选择与其球队或是其他球队的难易程度对比,0为平均线,可以为正负数
    SRS (Simple Rating System)3
    ORtg (Offensive Rating)每100个比赛回合中的进攻比例
    DRtg (Defensive Rating)每100个比赛回合中的防守比例
    Pace (Pace Factor)每48分钟内大概会进行多少个回合
    FTr (Free Throw Attempt Rate)罚球次数所占投射次数的比例
    3PAr (3-Point Attempt Rate)三分球投射占投射次数的比例
    TS% (True Shooting Percentage)二分球、三分球和罚球的总共命中率
    eFG% (Effective Field Goal Percentage)有效的投射百分比(含二分球、三分球)
    TOV% (Turnover Percentage)每100场比赛中失误的比例
    ORB% (Offensive Rebound Percentage)球队中平均每个人的进攻篮板的比例
    FT/FGA罚球所占投射的比例
    eFG% (Opponent Effective Field Goal Percentage)对手投射命中比例
    TOV% (Opponent Turnover Percentage)对手的失误比例
    DRB% (Defensive Rebound Percentage)球队平均每个球员的防守篮板比例
    FT/FGA (Opponent Free Throws Per Field Goal Attempt)对手的罚球次数占投射次数的比例

    毕达哥拉斯定律:640?wx_fmt=png

    我们将用这三个表格来评估球队过去的战斗力,另外还需2015-16 NBA Schedule and Results中的2015~2016年的nba常规赛及季后赛的每场比赛的比赛数据,用以评估Elo score(在之后的实验小节中解释)。在Basketball Reference.com中按照从常规赛至季后赛的时间。列出了2015年10月份至2016年6月份的每场比赛的比赛情况。

    640?wx_fmt=png

    可在上图中,看到2015年10月份的部分比赛数据。在每个*Schedule*表格中所包含的数据为:

    数据项数据含义
    Date比赛日期
    Start (ET)比赛开始时间
    Visitor/Neutral客场作战队伍
    PTS客场队伍最后得分
    Home/Neutral主场队伍
    PTS主场队伍最后得分
    Notes备注,表明是否为加时赛等

    在预测时,我们同样也需要在2016-17 NBA Schedule and Results中2016~2017年的NBA的常规赛比赛安排数据。

    2.2 获取比赛数据

    我们将以获取Team Per Game Stats表格数据为例,展示如何获取这三项统计数据。

    1. 进入到用Basketball Reference.com中,在导航栏中选择Season并选择2015~2016赛季中的Summary

      640?wx_fmt=png

    2. 进入到2015~2016年的Summary界面后,滑动窗口找到Team Per Game Stats表格,并选择左上方的Share & more,在其下拉菜单中选择Get table as CSV (for Excel)

      640?wx_fmt=png

    3. 复制在界面中生的的csv格式数据,并复制粘贴至一个文本编辑器保存为csv文件即可:

      640?wx_fmt=gif

    为了方便同学们进行实验,我们已经将数据全部都保存成*csv*文件上传至实验楼的云环境中。在后续的代码实现小节里,我们将给出获取这些文件的地址。

    三、数据分析

    在获取到数据之后,我们将利用每支队伍过去的比赛情况Elo 等级分来判断每支比赛队伍的可胜概率。在评价到每支队伍过去的比赛情况时,我们将使用到Team Per Game StatsOpponent Per Game StatsMiscellaneous Stats(之后简称为T、O和M表)这三个表格的数据,作为代表比赛中某支队伍的比赛特征。我们最终将实现针对每场比赛,预测比赛中哪支队伍最终将会获胜,但并不是给出绝对的胜败情况,而是预判胜利的队伍有多大的获胜概率。因此我们将建立一个代表比赛的特征向量。由两支队伍的以往比赛情况统计情况(T、O和M表),和两个队伍各自的Elo等级分构成。

    关于Elo score等级分,不知道同学们是否看过《社交网络》这部电影,在这部电影中,Mark(主人公原型就是扎克伯格,FaceBook创始人)在电影起初开发的一个美女排名系统就是利用其好友Eduardo在窗户上写下的排名公式,对不同的女生进行等级制度对比,最后PK出胜利的一方。

    640?wx_fmt=png

    这条对比公式就是Elo Score等级分制度。Elo的最初为了提供国际象棋中,更好地对不同的选手进行等级划分。在现在很多的竞技运动或者游戏中都会采取Elo等级分制度对选手或玩家进行等级划分,如足球、篮球、棒球比赛或LOL,DOTA等游戏。

    在这里我们将基于国际象棋比赛,大致地介绍下Elo等级划分制度。在上图中Eduardo在窗户上写下的公式就是根据Logistic Distribution计算PK双方(A和B)对各自的胜率期望值计算公式。假设A和B的当前等级分为$$R_A$$$$R_B$$,则A对B的胜率期望值为:

    640?wx_fmt=png

    B对A的胜率期望值为

    640?wx_fmt=png

    如果棋手A在比赛中的真实得分$$S_A$$(胜1分,和0.5分,负0分)和他的胜率期望值$$E_A$$不同,则他的等级分要根据以下公式进行调整:

    640?wx_fmt=png

    在国际象棋中,根据等级分的不同K值也会做相应的调整:

    • $$\ge2400$$,K=16

    • 2100~2400分,K=24

    • $$\le2100$$,K=32

    因此我们将会用以表示某场比赛数据的特征向量为(加入A与B队比赛):[A队Elo score, A队的T,O和M表统计数据,B队Elo score, B队的T,O和M表统计数据]

    四、基于数据进行模型训练和预测

    4.1 实验前期准备

    在本次实验环境中,我们将会使用到python的pandasnumpyscipysklearn库,不过实验楼中已经安装了numpy,所以在实验前,我们需要先利用pip命令安装另外三个Python库。

    $ sudo pip install pandas
    $ sudo pip install scipy
    $ sudo pip install sklearn

    在安装完所需的实验库之后,进入到实验环境的Code目录下,创建cs_782文件夹,并且通过以下地址获取我们为大家处理好的csv文件压缩包data.zip

    $ cd Code
    $ mkdir cs_782 && cd cs_782

    # 获取数据文件
    $ wget http://labfile.oss.aliyuncs.com/courses/782/data.zip

    # 解压data压缩包并且删除该压缩包
    $ unzip data.zip
    $ rm -r data.zip

    data文件夹中,包含了2015~2016年的NBA数据T,O和M表,及经处理后的常规赛和挑战赛的比赛数据2015~16result.csv,这个数据文件是我们通过在basketball-reference.com的2015-16 Schedule and result的几个月份比赛数据中提取得到的,其中包括三个字段:

    • WTeam: 比赛胜利队伍

    • LTeam: 失败队伍

    • WLoc: 胜利队伍一方所在的为主场或是客场

    另外一个文件就是16-17Schedule.csv,也是经过我们加工处理得到的NBA在2016~2017年的常规赛的比赛安排,其中包括两个字段:

    • Vteam: 访问/客场作战队伍

    • Hteam: 主场作战队伍

    4.2 代码实现

    Code\cs_782目录下,创建prediction.py开始实验。首先插入实验相关模块:

    # -*- coding:utf-8 -*-
    import pandas as pd
    import math
    import csv
    import random
    import numpy as np
    from sklearn import linear_model
    from sklearn.model_selection import cross_val_score

    设置回归训练时所需用到的参数变量:

    # 当每支队伍没有elo等级分时,赋予其基础elo等级分
    base_elo = 1600
    team_elos = {}
    team_stats = {}
    X = []
    y = []
    folder = 'data' #存放数据的目录

    在最开始需要初始化数据,从T、O和M表格中读入数据,去除一些无关数据并将这三个表格通过Team属性列进行连接:

    # 根据每支队伍的Miscellaneous Opponent,Team统计数据csv文件进行初始化
    def initialize_data(Mstat, Ostat, Tstat):
    new_Mstat = Mstat.drop(['Rk', 'Arena'], axis=1)
    new_Ostat = Ostat.drop(['Rk', 'G', 'MP'], axis=1)
    new_Tstat = Tstat.drop(['Rk', 'G', 'MP'], axis=1)

    team_stats1 = pd.merge(new_Mstat, new_Ostat, how='left', on='Team')
    team_stats1 = pd.merge(team_stats1, new_Tstat, how='left', on='Team')
    return team_stats1.set_index('Team', inplace=False, drop=True)

    获取每支队伍的Elo Score等级分函数,当在开始没有等级分时,将其赋予初始base_elo值:

    def get_elo(team):
    try:
    return team_elos[team]
    except:
    # 当最初没有elo时,给每个队伍最初赋base_elo
    team_elos[team] = base_elo
    return team_elos[team]

    定义计算每支球队的Elo等级分函数:

    # 计算每个球队的elo值
    def calc_elo(win_team, lose_team):
    winner_rank = get_elo(win_team)
    loser_rank = get_elo(lose_team)

    rank_diff = winner_rank - loser_rank
    exp = (rank_diff * -1) / 400
    odds = 1 / (1 + math.pow(10, exp))
    # 根据rank级别修改K值
    if winner_rank < 2100:
    k = 32
    elif winner_rank >= 2100 and winner_rank < 2400:
    k = 24
    else:
    k = 16
    new_winner_rank = round(winner_rank + (k * (1 - odds)))
    new_rank_diff = new_winner_rank - winner_rank
    new_loser_rank = loser_rank - new_rank_diff

    return new_winner_rank, new_loser_rank

    基于我们初始好的统计数据,及每支队伍的Elo score计算结果,建立对应2015~2016年常规赛和季后赛中每场比赛的数据集(在主客场比赛时,我们认为主场作战的队伍更加有优势一点,因此会给主场作战队伍相应加上100等级分):

    def  build_dataSet(all_data):
    print("Building data set..")
    X = []
    skip = 0
    for index, row in all_data.iterrows():

    Wteam = row['WTeam']
    Lteam = row['LTeam']

    #获取最初的elo或是每个队伍最初的elo值
    team1_elo = get_elo(Wteam)
    team2_elo = get_elo(Lteam)

    # 给主场比赛的队伍加上100的elo值
    if row['WLoc'] == 'H':
    team1_elo += 100
    else:
    team2_elo += 100

    # 把elo当为评价每个队伍的第一个特征值
    team1_features = [team1_elo]
    team2_features = [team2_elo]

    # 添加我们从basketball reference.com获得的每个队伍的统计信息
    for key, value in team_stats.loc[Wteam].iteritems():
    team1_features.append(value)
    for key, value in team_stats.loc[Lteam].iteritems():
    team2_features.append(value)

    # 将两支队伍的特征值随机的分配在每场比赛数据的左右两侧
    # 并将对应的0/1赋给y值
    if random.random() > 0.5:
    X.append(team1_features + team2_features)
    y.append(0)
    else:
    X.append(team2_features + team1_features)
    y.append(1)

    if skip == 0:
    print X
    skip = 1

    # 根据这场比赛的数据更新队伍的elo值
    new_winner_rank, new_loser_rank = calc_elo(Wteam, Lteam)
    team_elos[Wteam] = new_winner_rank
    team_elos[Lteam] = new_loser_rank

    return np.nan_to_num(X), y

    最终在main函数中调用这些数据处理函数,使用sklearn的Logistic Regression方法建立回归模型:

    if __name__ == '__main__':

    Mstat = pd.read_csv(folder + '/15-16Miscellaneous_Stat.csv')
    Ostat = pd.read_csv(folder + '/15-16Opponent_Per_Game_Stat.csv')
    Tstat = pd.read_csv(folder + '/15-16Team_Per_Game_Stat.csv')

    team_stats = initialize_data(Mstat, Ostat, Tstat)

    result_data = pd.read_csv(folder + '/2015-2016_result.csv')
    X, y = build_dataSet(result_data)

    # 训练网络模型
    print("Fitting on %d game samples.." % len(X))

    model = linear_model.LogisticRegression()
    model.fit(X, y)

    #利用10折交叉验证计算训练正确率
    print("Doing cross-validation..")
    print(cross_val_score(model, X, y, cv = 10, scoring='accuracy', n_jobs=-1).mean())

    最终利用训练好的模型在16~17年的常规赛数据中进行预测。利用模型对一场新的比赛进行胜负判断,并返回其胜利的概率:

    def predict_winner(team_1, team_2, model):
    features = []

    # team 1,客场队伍
    features.append(get_elo(team_1))
    for key, value in team_stats.loc[team_1].iteritems():
    features.append(value)

    # team 2,主场队伍
    features.append(get_elo(team_2) + 100)
    for key, value in team_stats.loc[team_2].iteritems():
    features.append(value)

    features = np.nan_to_num(features)
    return model.predict_proba([features])

    在main函数中调用该函数,并将预测结果输出到16-17Result.csv文件中:

    #利用训练好的model在16-17年的比赛中进行预测
    print('Predicting on new schedule..')
    schedule1617 = pd.read_csv(folder + '/16-17Schedule.csv')
    result = []
    for index, row in schedule1617.iterrows():
    team1 = row['Vteam']
    team2 = row['Hteam']
    pred = predict_winner(team1, team2, model)
    prob = pred[0][0]
    if prob > 0.5:
    winner = team1
    loser = team2
    result.append([winner, loser, prob])
    else:
    winner = team2
    loser = team1
    result.append([winner, loser, 1 - prob])

    with open('16-17Result.csv', 'wb') as f:
    writer = csv.writer(f)
    writer.writerow(['win', 'lose', 'probability'])
    writer.writerows(result)

    运行prediction.py

    640?wx_fmt=png

    生成预测结果文件16-17Result.csv文件:

    640?wx_fmt=png

    640?wx_fmt=png

    五、总结

    在本节课程中,我们利用Basketball-reference.com的部分统计数据,计算每支nba比赛队伍的Elo socre,和利用这些基本统计数据评价每支队伍过去的比赛情况,并且根据国际等级划分方法Elo Score对队伍现在的战斗等级进行评分,最终结合这些不同队伍的特征判断在一场比赛中,哪支队伍能够占到优势。但在我们的预测结果中,与以往不同,我们没有给出绝对的正负之分,而是给出胜算较大一方的队伍能够赢另外一方的概率。当然在这里,我们所采用评价一支队伍性能的数据量还太少(只采用了15~16年一年的数据),如果想要更加准确、系统的判断,有兴趣的你当然可以从各种统计数据网站中获取到更多年份,更加全面的数据。结合不同的回归决策机器学习模型,搭建一个更加全面,预测准确率更高的模型。在kaggle中有相关的篮球预测比赛项目,有兴趣的同学可尝试一下。

    六、参考阅读

    • 知乎:在哪能看到最全面细致的NBA数据统计

    • How I won my NCAA tournament bracket pool using machine learning

    七、课后习题

    本次课程中,我们只是利用了scikit-learn提供的Logisitc Regression方法进行回归模型的训练,你可否尝试scikit-learn中的其他机器学习方法,或者其他类似于TensorFlow的开源框架,结合我们所提供的数据集进行训练。若采用Scikit-learn中的方法,可参看实验楼的课程:ebay在线拍卖数据分析。或是结合下图进行模型的尝试:

    640?wx_fmt=png

    八、常见疑问解答补充

    在这里我们将对之前在文档中解释得比较模糊的部分做一点补充,之后有疑问的欢迎同学们在课程讨论区提出讨论。

    Q1: 在生成训练集时,“将特征值随机分配在每场比赛数据的左右侧”是什么意思?为什么要做如下的随机分配:

    640?wx_fmt=png

    Q2: 为什么按照X: [winTeam, loseTeam]对应标签Y: 0X: [loseTeam, winTeam]对应标签Y: 1,这样的取法在后边进行预测[team1, team2]的比赛结果时,是否应该按照$$prob<0.5$$team1胜出,胜出概率为$$1-prob$$$$prob>0.5$$team2胜出,胜出概率为$$prob$$

    答案和完整代码点击 阅读原文 即可观看敲代码是学编程的唯一方式~PC端登陆实验楼,亲手敲出这个项目吧!


    学习更多


    楼+「 PHP7实战 」、「 Linux运维与Devops实战 」优惠报名中——来自腾讯、Intel、IBM等互联网大厂的一线大牛,带你从零入门成为PHP、Linux大咖!

    点击下面的链接了解详情:

    11周打通 Linux 任督二脉,实验楼技术天团带你飞!

    他在一线互联网大厂研发PHP数年,用6周时间带你打通“全宇宙最好的语言

    展开全文
  • python预测分析核心算法(含大量实例代码) 在学习和研究机器学习的时候,面临令人眼花缭乱的算法,机器学习新手往往会不知 所措。本书从算法和 Python 语言实现的角度,帮助读者认识机器学习。 本书专注于两类核心...
  • 使用socket通信,java调用python预测算法项目需求1.定IP和端口号2.java向客户端(python)发送消息3.python客户端收到消息解析(1)定ip和端口号,一定和服务器端(java)保持一致(2)python客户端解析java服务器端...
  • python 预测之美

    2021-01-11 15:46:52
    数据分析与算法实战,全书代码都有。
  • DBN Python预测交通流

    2017-11-01 10:30:24
    python 实现的基于DBN的交通流预测系统,为方便验证已给出实验,绝对可用
  • Python 孩子身高预测:源代码:# 创建死循环,直至 用户自行 选择 退出while True :# 分割线print('*'*60)print('*'*10,'欢迎来到 孩子身高 预测系统','*'*10)# 功能选择print('\t1、预测查询')print('\t2、退出系统')...
  • Python预测糖尿病

    2020-09-24 21:41:36
    今天给大家讲解一个实战案例:如何根据现有数据预测糖尿病。在这个案例开始之前,希望大家回忆一下大学里讲过的线性回归的知识,这是数据挖掘里非常重要的一部分知识。当然,鉴于大家都学过,本篇就不再赘述。 一. ...
  • Python预测之美 数据分析与算法实战 第一篇 预测入门 第一章到第四章 第二篇 预测算法 第五章到第八章内容简介 第三篇 预测应用 第九章 短期日负荷曲线预测
  • Python预测之美:数据分析与算法实战》书籍Python 是一种面向对象的脚本语言,其代码简洁优美,类库丰富,开发效率也很高,因此,其得到越 来越多开发者的喜爱,广泛应用于 Web 开发、网络编程、爬虫开发、自动化...
  • Python 预测孩子身高

    千次阅读 2020-05-07 10:00:01
    Python 孩子身高预测: 源代码: # 创建死循环,直至 用户自行 选择 退出 while True : # 分割线 print('*'*60) print('*'*10,'欢迎来到 孩子身高 预测系统','*'*10) # 功能选择 print('\t1、预测查询') ...
  • Python预测股票走势

    万次阅读 多人点赞 2018-02-04 15:12:20
    本文介绍了如何利用时间序列模型ARIMA进行股票走势预测。 环境:windows 64 平台:Jupyter Notebook (Kernel python3) 库:tushare statsmodels pandas numpy seaborn matplotlib 先来看看效果吧  
  • 长短期记忆(英语:Long Short-Term Memory,LSTM)神经网络,是一种时间递归神经网络(RNN),该网络适合于处理和预测时间序列中间隔和延迟非常长的重要事件,如股票价格预测和水文预报等。第一步 数据获取、可视化与...
  • Python预测成绩

    2019-09-12 14:20:30
    https://blog.csdn.net/wuzlun/article/details/80001746
  • 预测者网:不经意间发现,一个免费提供股票数据网站 预测者网,下载的是CSV格式 TB交易开拓者:Tradeblazer,感谢@孙存浩提供数据源 TuShare:TuShare -财经数据接口包,基于Python的财经数据包,利用Python进行...
  • python预测房价

    千次阅读 2019-03-02 21:58:58
    (学习)python预测房价 房价数据: https://pan.baidu.com/s/1eiCjwZKuI2E1eZ6wgMnCyA 提取码:9glo 代码: https://pan.baidu.com/s/1V3QUdEFo86fN7DAgjzBadA 提取码:uw8x 一:导入数据 二:显示...
  • 利用Python预测股票价格

    千次阅读 2020-07-16 16:24:12
    作为一种技术手段,预测在金融、证券领域的应用非常广泛,尤其是对股票价格的预测。我们介绍一下获得股票数据的方法,并基于此对数据进行预处理,接着使用数据分析方法,建立基础特征,进一步构建预测模型,且基于新...
  • 无意中看到一本讲用python做数据运营的书,实操性较强。书名是《Python数据分析与数据化运营》(第2版)。书中给了很多的案例,作者还提供了可供操作的数据以及详细的代码。第一章中,为了说明数据分析是怎么回事,...
  • python预测疫情发展

    千次阅读 2020-03-13 20:50:30
    numpy和matplotlib用python实现传染病模型SI模型SIS模型SIR模型SEIR模型 什么是传染病动力学? 最近,在报道疫情的众多新闻中,相信大家也看到过一些来预测新型冠状病毒会导致感染肺炎的人数。你一定好奇,这个人数...
  • 当涉及到预测数据(时间序列或其他类型的序列)时,人们会关注基本回归、ARIMA、ARMA、GARCH,甚至Prophet,但不排除使用随机森林来预测数据。随机森林通常被认为是一种分类技术,但回归问题绝对是随机森林可以处理的...
  • 第1 篇 预测入门第1 章 认识预测 . 21.1 什么是预测 . 21.1.1 占卜术 . 31.1.2 神秘的地动仪 . 31.1.3 科学预测 . 51.1.4 预测的原则 . 71.2 前沿技术 . 91.2.1 大数据与预测 . 101.2.2 大数据预测的特点 111.2.3 ...
  • 源码编译编译编译python预测库总结 一、为什么选Paddle-Lite? 因为我第一次接触人工智能,PaddlePaddle官网https://www.paddlepaddle.org.cn/就有详细可靠的中文教程,还有PaddleX的图形化界面,对新人非常友好。 ...
  • 作者|真达、Mika来源 |CDA数据分析师(ID:cdacdacda)头图 | CSDN下载自东方IC今天教大家用Python预测英雄联盟比赛胜负。Show me data,...
  • Python机器学习实战项目--预测红酒质量(超详细)发布时间:2018-06-28 11:25,浏览次数:734, 标签:Python用Scikit-Learn(sklearn)建立模型1 环境搭建Python 3+NumPy+Pandas+Scikit-Learn (sklearn)2 导入库和模块...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,835
精华内容 6,334
关键字:

python预测

python 订阅