gg 小组种子杯初赛报告

gg 小组种子杯初赛报告

队员: 柳泓鑫 梁志博 洪志远 AUC: 0.7566 2017年10月1日 Github:https://github.com/ver217/seedcup2017 报告链接:https://storage.fredliang.cn/gg队种子杯初赛报告.pdf

执行概要

前期分析以及决策

本次比赛一共有5个数据集,其中可供训练的有两个数据集,一个是不同队伍之间的对战成绩,另一个是每个队伍球员的成绩。目前的因此整体的前期数据处理都是分为两个方面,一个方面是通过挖掘比赛队伍之间的成绩来训练模型,另一个是把队员能力映射到球队水平来进行训练。

环境以及工具概要

整个初赛都是由 Python3.6 来写的,环境是 Archlinux和 MacOS。由于数据量比较小,没有使用深度学习框架。用 scikit-learn 方便后期调参以及切换模型,同时使用 XGBoost 的 sklearn 模块与 sklearn 对接,方便日后模型以及参数选择。

整体思路(数据特征提取思路、模型选取和型参数的优化)

第一阶段

第一天仔细看了一下文档,由于 matchDataTest.csv 数据集中就有比赛的胜负数据,于是就尝试直接处理 test 数据集。直接将胜负率进行处理之后提交,结果0.69999,排名第八。这个主要是一开始还没搭建好结构,不想浪费提交机会。

第二阶段

首先1思路将比赛结果数据进行分类,将数据处理成胜负率,然后清洗掉值为1或0的数据。再手动检查并清洗一遍。在输入模型的时候进行特征缩放,保证后面输入的可行性。把主场球队和客场球队的胜负率作为 X 比赛胜负作为 y 输入。机器学习算法集有 AdaBoostClassifier, RandomForestClassifier, GradientBoostingClassifier,GaussianNB, MultinomialNB, SVC, MLPClassifier, XGBClassifier。测试算法的时候使用 sklearn 自带的 train_test_split 随机切分数据集,训练样本和测试样本比例为0.2。同时使用 matplotlib 对特征进行可视化来筛选算法模型。AUC 使用 sklearn 自带的 AUC 计算工具进行计算。

其次,2思路将队员的各项特征按照上场时间进行加权,得到每一队的特征。然后按照 matchDataTest.csv 以及 matchDataTrain.csv 的数据将客场和主场的信息并入文件,进行测试。测试模块与上方相同,输入特征由2个拓展到了14个,进过测试之后的 AUC 基本上维持在0.66左右。将数据可视化之后发现数据相关性非常小,基本上处于一种随机分布状态。同时高维的特征在只有 6k左右 的数据集中很难训练出来,并且最后的比赛胜负也是球员个人特征的表现,因此放弃了从球员信息入手。

第三阶段

因为确定了从胜负入手,所以主要目标放在胜负的样本上面,发现在开始的时候,每个球队的数据量很少,可信度不高。所以对样本进行了处理,将每个队取出了最高的胜率和最大样本的胜率,将这两份数据进行加权,加权系数通过暴力尝试选取特征最明显的系数。

经过测试之后的数据集的掺杂系数在 0.86 的效果最好,因此以这个系数为基础进行算法筛选,最后显示 bayes和 mlp 类的算法拟合程度最高,提交之后发现 mlp 和测试数据集拟合程度最好的算法。

在参数选取方面使用了“暴力调参”使用 sklearn 的 GridSearchCV 和 RandomizedSearchCV 来进行参数选取,这样节约了人力调参选取。

代码相关

目录结构

├── README.md
├── data
│   ├── matchDataTest.csv
│   ├── matchDataTest_2.csv
│   ├── matchDataTrain.csv
│   ├── matchDataTrain_2.csv
│   ├── matchDataTrain_pre.csv
│   ├── predictPro.csv
│   ├── predictPro_mlp.csv
│   ├── predictPro_mnb.csv
│   └── teamData.csv
└── src
    ├── data_io.py
    ├── pre_process.py
    ├── scaler.py
    └── try.py

文件说明

src 文件夹是根文件夹,存放所有的机器学习相关的 py 文件。 dataa_io.py 是封装函数模型,数据可视化等工具的文件,主要存放一些“中间件”,进行一些封装模块的存放。 pre_process.py是数据处理相关的问件,将原始数据集处理成期望的最大胜率和最大样本的胜率。进行train 和 test 的特征拼接。

scaler.py 是特征缩放测处理文件。

try.py 是模型尝试以及调参的文件,

matchDataTest.csv 是附加相关比率特征之后的 test 文件。

matchDataTrain.csv 是附加相关比率特征之后的 train 文件。

predictPro_mlp.csv 是经过 MLPClassifier 训练之后的结果。

predictPro_mnb.csv 是经过 MultinomialNB 训练之后的结果。

teamData.csv 是每队队员的数据。

data_io.py

data_io.load_csv(file) 传入csv文件路径字符串,返回用numpy解析好的ndarray,默认跳过header。

Parameter

Desc

file

str, csv文件路径

Returns: ndarray, 用numpy格式化好的ndarray。

data_io.save_csv(file, hypothesis, header='') 传入文件路径, 预测值和头,以%f的格式保存csv。

Parameter

Desc

file

str, csv文件路径。

hypothesis

ndarray, float, 要保存的预测值。

header

str, optional, default '', 要保存的csv文件的头。

Returns: None。

data_io.plot_decision_boundary(X, y, predict_func, x_label='', y_label='') 画出点和决策边界。

Parameter

Desc

X

ndarray, float, 要画的X, 限定二维数组。

y

ndarray, float, 要画的y,限定值为0,1。

predict_func

functoin, 预测函数。

x_label

str, optional, default '', x轴标签名。

y_label

str, optional, default '', y轴标签名。

Returns: None。

class data_io.Model(clf, scale=False, grid_search=False, random_search=False, search_params=None)

基于 sk-learn 抽象的分类器模型。

Parameter

Desc

clf

object, sk-learn 分类 。

scale

boolean, optional, default False, 是否进 feature scaling,使 sklearn.preprocessing.StandardScaler 进 缩放。

grid_search

boolean, optional, default False,是否进 格搜索,使 sklearn.grid_search.GridSearchCV 进 搜索。

random_search

boolean, optional, default False, 是否进 随机搜索,使 sklearn.grid_search.RandomizedSearchCV 进 搜索。

search_params

dict, optional, default None,搜索参数,参数与 sklearn 的参数 致。

Attribute

Desc

clf

object, 初始化时传 的分类 。

scale

boolean,初始化时传 的参数。

random_search

boolean,初始化时传 的参数。

grid_search

boolean,初始化时传 的参数。

x

ndarray, float, fit 时传 的 x。

y

ndarray, float, fit 时传 的 y。

Returns: self, 返回分类 模型。

Method

Desc

fit(x, y)

基于 sklearn 封装

predict(x)

返回预测值

predict_prob(x)

返回 y 为 1 的置信度

auc(x, y_true)

返回 auc

plot(x, y, x_label='', y_label='')

画出点和决策边界

try.py

try.run(model) 运 该模型,返回 auc

Parameter

Desc

model

object, data_io.Model 的实例

Returns: auc, float

try.save(model) 保存该模型预测的置信度,输出到 csv。

Parameter

Desc

model

object, data_io.Model 的实例

Returns: None

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

【专知国庆特刊-PyTorch手把手深度学习教程系列01】一文带你入门优雅的PyTorch

【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视...

1.2K80
来自专栏机器学习人工学weekly

机器学习人工学weekly-2018/5/20

Dynamic Control Flow in Large-Scale Machine Learning

11560
来自专栏程序员的知识天地

前端工程师深度学习,就能在浏览器里玩转深度学习

TensorFlow.js 的发布可以说是 JS 社区开发者的福音!但是在浏览器中训练一些模型还是会存在一些问题与不同,如何可以让训练效果更好?本文为大家总结了...

18130

Keras中带LSTM的多变量时间序列预测

像长短期记忆(Long Short-Term Memory ) LSTM 递归神经网络这样的神经网络几乎可以完美地模拟多个输入变量的问题。

12.1K80
来自专栏AI科技大本营的专栏

前端工程师掌握这18招,就能在浏览器里玩转深度学习

【导读】TensorFlow.js 的发布可以说是 JS 社区开发者的福音!但是在浏览器中训练一些模型还是会存在一些问题与不同,如何可以让训练效果更好?本文的作...

12810
来自专栏QQ音乐前端团队专栏

前端图片主题色提取

对于需要根据用户“定制”、“生成”的图片,这样的方式就有了一个上传图片---->后端计算---->返回结果的时间,等待时间也许就比较长了。由此,我尝试着利用 c...

1.8K150
来自专栏Python爬虫实战

图片转字符画

字符画是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能表现一种颜色(暂且这么理解吧),字符的种类越多,可以表现的颜色也越多,图片也会更有层次感...

23220
来自专栏PaddlePaddle

【RNN】使用RNN语言模型生成文本

导语 PaddlePaddle提供了丰富的运算单元,帮助大家以模块化的方式构建起千变万化的深度学习模型来解决不同的应用问题。这里,我们针对常见的机器学习任务,提...

58060
来自专栏从流域到海域

Decision Trees in Apache Spark (Apache Spark中的决策树)

Decision Trees in Apache Spark 原文作者:Akash Sethi 原文地址:https://dzone.com/article...

21560
来自专栏企鹅号快讯

从零开始用Python构造决策树

来源:Python中文社区 作者:weapon 本文长度为700字,建议阅读5分钟 本文介绍如何不利用第三方库,仅用python自带的标准库来构造一个决策树。 ...

32470

扫码关注云+社区

领取腾讯云代金券