基于LightGBM分类实现英雄联盟数据预测(二)

这里写目录标题

  • 基于LightGBM分类实现英雄联盟数据预测(二)
    • Step5:利用 LightGBM 进行训练与预测
plt.figure(figsize=(18,14))
#cmap即colormaps 获取图谱使用plt.get_cmap(‘xxx’) 其值有很多,
#如官网:https://matplotlib.org/users/colormaps.html 或https://matplotlib.org/examples/color/colormaps_reference.html
sns.heatmap(round(x.corr(),2), cmap='Greys', annot=True)
plt.show()

同时我们画出各个特征之间的相关性热力图,颜色越深代表特征之间相关性越强,我们剔除那些相关性较强的冗余特征。

# 去除冗余特征
drop_cols = ['redAvgLevel','blueAvgLevel']
x.drop(drop_cols, axis=1, inplace=True)sns.set(style='whitegrid', palette='muted')# 构造两个新特征
x['wardsPlacedDiff'] = x['blueWardsPlaced'] - x['redWardsPlaced']
x['wardsDestroyedDiff'] = x['blueWardsDestroyed'] - x['redWardsDestroyed']data = x[['blueWardsPlaced','blueWardsDestroyed','wardsPlacedDiff','wardsDestroyedDiff']].sample(1000)
data_std = (data - data.mean()) / data.std()
data = pd.concat([y, data_std], axis=1)
data = pd.melt(data, id_vars='blueWins', var_name='Features', value_name='Values')plt.figure(figsize=(10,6))
sns.swarmplot(x='Features', y='Values', hue='blueWins', data=data)
plt.xticks(rotation=45)
plt.show()


我们画出了插眼数量的散点图,发现不存在插眼数量与游戏胜负间的显著规律。猜测由于钻石分段以上在哪插眼在哪好排眼都是套路,所以数据中前十分钟插眼数拔眼数对游戏的影响不大。所以我们暂时先把这些特征去掉。

## 去除和眼位相关的特征
drop_cols = ['blueWardsPlaced','blueWardsDestroyed','wardsPlacedDiff','wardsDestroyedDiff','redWardsPlaced','redWardsDestroyed']
x.drop(drop_cols, axis=1, inplace=True)x['killsDiff'] = x['blueKills'] - x['blueDeaths']
x['assistsDiff'] = x['blueAssists'] - x['redAssists']x[['blueKills','blueDeaths','blueAssists','killsDiff','assistsDiff','redAssists']].hist(figsize=(12,10), bins=20)
plt.show()


我们发现击杀、死亡与助攻数的数据分布差别不大。但是击杀减去死亡、助攻减去死亡的分布与原分布差别很大,因此我们新构造这么两个特征。

data = x[['blueKills','blueDeaths','blueAssists','killsDiff','assistsDiff','redAssists']].sample(1000)
data_std = (data - data.mean()) / data.std()
data = pd.concat([y, data_std], axis=1)
data = pd.melt(data, id_vars='blueWins', var_name='Features', value_name='Values')plt.figure(figsize=(10,6))
sns.swarmplot(x='Features', y='Values', hue='blueWins', data=data)
plt.xticks(rotation=45)
plt.show()


一些特征两两组合后对于数据的划分能力也有提升。

x['dragonsDiff'] = x['blueDragons'] - x['redDragons']
x['heraldsDiff'] = x['blueHeralds'] - x['redHeralds']
x['eliteDiff'] = x['blueEliteMonsters'] - x['redEliteMonsters']data = pd.concat([y, x], axis=1)eliteGroup = data.groupby(['eliteDiff'])['blueWins'].mean()
dragonGroup = data.groupby(['dragonsDiff'])['blueWins'].mean()
heraldGroup = data.groupby(['heraldsDiff'])['blueWins'].mean()fig, ax = plt.subplots(1,3, figsize=(15,4))eliteGroup.plot(kind='bar', ax=ax[0])
dragonGroup.plot(kind='bar', ax=ax[1])
heraldGroup.plot(kind='bar', ax=ax[2])print(eliteGroup)
print(dragonGroup)
print(heraldGroup)plt.show()


我们构造了两队之间是否拿到龙、是否拿到峡谷先锋、击杀大型野怪的数量差值,发现在游戏的前期拿到龙比拿到峡谷先锋更容易获得胜利。拿到大型野怪的数量和胜率也存在着强相关。

x['towerDiff'] = x['blueTowersDestroyed'] - x['redTowersDestroyed']data = pd.concat([y, x], axis=1)towerGroup = data.groupby(['towerDiff'])['blueWins']
print(towerGroup.count())
print(towerGroup.mean())fig, ax = plt.subplots(1,2,figsize=(15,5))towerGroup.mean().plot(kind='line', ax=ax[0])
ax[0].set_title('Proportion of Blue Wins')
ax[0].set_ylabel('Proportion')towerGroup.count().plot(kind='line', ax=ax[1])
ax[1].set_title('Count of Towers Destroyed')
ax[1].set_ylabel('Count')


推塔是英雄联盟这个游戏的核心,因此推塔数量可能与游戏的胜负有很大关系。我们绘图发现,尽管前十分钟推掉第一座防御塔的概率很低,但是一旦某只队伍推掉第一座防御塔,获得游戏的胜率将大大增加

Step5:利用 LightGBM 进行训练与预测

## 为了正确评估模型性能,将数据划分为训练集和测试集,并在训练集上训练模型,在测试集上验证模型性能。
from sklearn.model_selection import train_test_split
## 导入LightGBM模型
from lightgbm.sklearn import LGBMClassifier
## 选择其类别为0和1的样本 (不包括类别为2的样本),因为blueWins 只有0和1
data_target_part = y
data_features_part = x## 测试集大小为20%, 80%/20%分
x_train, x_test, y_train, y_test = train_test_split(data_features_part, data_target_part, test_size = 0.2, random_state = 2020)## 定义 LightGBM 模型
clf = LGBMClassifier()
# 在训练集上训练LightGBM模型
clf.fit(x_train, y_train)
## 在训练集和测试集上分布利用训练好的模型进行预测
train_predict = clf.predict(x_train)
test_predict = clf.predict(x_test)
from sklearn import metrics## 利用accuracy(准确度)【预测正确的样本数目占总预测样本数目的比例】评估模型效果
print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))
print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))## 查看混淆矩阵 (预测值和真实值的各类情况统计矩阵)
confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)
print('The confusion matrix result:\n',confusion_matrix_result)# 利用热力图对于结果进行可视化
plt.figure(figsize=(8, 6))
sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')
plt.xlabel('Predicted labels')
plt.ylabel('True labels')
plt.show()

基于LightGBM分类实现英雄联盟数据预测(二)相关推荐

  1. 基于LightGBM分类实现英雄联盟数据预测(一)

    基于LightGBM分类实现英雄联盟数据预测(一) 文章目录 基于LightGBM分类实现英雄联盟数据预测(一) 一.LightGBM的介绍 二.操作步骤 Step1:库函数导入 Step2 .读入数 ...

  2. 我的飞桨学习赛:英雄联盟大师预测

    我的飞浆学习赛:英雄联盟大师预测 原始代码 数据集 评分结果 改进方式 构建更多的前馈神经网络 修改模型的超参数 学习率 batch_size和epoch 进行特征选择 改进的结果 目前正在改进的方法 ...

  3. 飞桨学习赛:英雄联盟大师预测2023年2月85.365分方案

    ★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 飞桨学习赛:英雄联盟大师预测2023年2月85.365分方案 比赛链接 - 飞桨学习赛:英雄联盟大 ...

  4. 对英雄联盟比赛预测(三)- 数据获取Java实现

    系列文章目录 对英雄联盟比赛预测(一)- 特征分析 对英雄联盟比赛预测(二)- 数据获取api分析 对英雄联盟比赛预测(三)- 数据获取Java实现 文章目录 系列文章目录 声明 前言 一.基本框架 ...

  5. 对英雄联盟比赛预测(二)- 数据获取api分析

    系列文章目录 对英雄联盟比赛预测(一)- 特征分析 对英雄联盟比赛预测(二)- 数据获取api分析 对英雄联盟比赛预测(三)- 数据获取Java实现 文章目录 系列文章目录 声明 前言 一.数据源分析 ...

  6. 对英雄联盟比赛预测(一)- 特征分析

    系列文章目录 对英雄联盟比赛预测(一)- 特征分析 对英雄联盟比赛预测(二)- 数据获取api分析 对英雄联盟比赛预测(三)- 数据获取Java实现 这里写目录标题 系列文章目录 我们先来分析下影响比 ...

  7. 对英雄联盟比赛预测(四)- 数据清洗

    系列文章目录 对英雄联盟比赛预测(一)- 特征分析 对英雄联盟比赛预测(二)- 数据获取api分析 对英雄联盟比赛预测(三)- 数据获取Java实现 对英雄联盟比赛预测(四)- 数据清洗 文章目录 前 ...

  8. DL之LSTM之MvP:基于TF利用LSTM基于DIY时间训练csv文件数据预测后100个数据(多值预测)状态

    DL之LSTM之MvP:基于TF利用LSTM基于DIY时间训练csv文件数据预测后100个数据(多值预测)状态 目录 数据集csv文件内容 输出结果 设计思路 训练记录全过程 数据集csv文件内容 输 ...

  9. DL之LSTM之UvP:基于TF利用LSTM基于DIY时间训练1200个数据预测后200个数据状态

    DL之LSTM之UvP:基于TF利用LSTM基于DIY时间训练1200个数据预测后200个数据状态 目录 输出结果 设计思路 训练记录全过程 输出结果 设计思路 训练记录全过程 INFO:tensor ...

最新文章

  1. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 反射获取系统的 Element[] dexElements )
  2. 项目管理沙龙第五次聚会
  3. 《TableStore最佳实践:GEO索引打造店铺搜索系统》
  4. Unity3D开发技巧:如何避开unity编辑器的那些坑
  5. 智能音箱“好耳朵”的设计奥秘
  6. web.xml 详细介绍
  7. Permute 3 for mac(全能媒体格式转换器)
  8. 计算机装机配置单5000元,5000以内的diy装机配置清单推荐
  9. 北漂小斌和你分享北京大兴机场3dmax模型
  10. 【乐通达】微信永不缺席!连发三大重磅更新,视频号终于成了视频号
  11. 【Vue3+Vite+TS项目集成ESlint +Prettier实现代码规范检查和代码格式化】
  12. Cisco Packet Tracer中配置三层交换机
  13. Neo4j的安装与配置
  14. 网络基础(四) — QUIC协议
  15. 差商近似1阶导数matlab,常微分方程的解法 (一): 常微分方程的离散化 :差商近似导数、数值积分方法、Taylor 多项式近似...
  16. html 整体缩小zoom,页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
  17. Python学习笔记(1)---B站黑马程序员
  18. 「MySQL 数据库 存储引擎」InnoDB和MyIsAm的区别
  19. e-icon-picker
  20. matlab fft实现dft,matlab实现dft和fft

热门文章

  1. C语言实现JSON字符串解码与编码(三)源代码
  2. NC文件的处理【netcdf】
  3. 帝国cms php序号,帝国cms教程:如何使用灵动标签生成带序号的列表
  4. 高通平台之TP代码分析
  5. 中科创达发布融合智能泊车技术于解决方案
  6. “降准”带来大牛市? 量化测算PMI 社融 汇率等宏观数据A股择时效果
  7. 不插卡就可以实现全网通上网的设备——无线宽带
  8. 数据结构题及c语言版严第七章答案,数据结构第七章习题答案.doc
  9. 网易企业邮箱:给国外公司发邮件用什么邮箱?
  10. 软件维护(Software maintenance)的流程