9 月 13 日,2025 Inclusion・外滩大会「开源嘉年华」正在限量报名中! 了解详情
写点什么

在 FIFA 20 将技能相似球员进行分组(1):K- 均值聚类

  • 2020-09-21
  • 本文字数:2011 字

    阅读完需:约 7 分钟

在 FIFA 20 将技能相似球员进行分组(1):K-均值聚类

引言

足球(欧洲足球)从小就是我最喜欢的运动之一。过去无论我去哪里,都会随身带着足球,这样我就能最大限度地利用踢足球的机会。


我也喜欢玩电脑游戏《FIFA 足球世界》,我觉得,用机器学习来分析 FIFA 中的球员是一件很酷的事情。


在本教程中,我将使用 K-均值(K-Means)聚类算法在 FIFA 20 将技能相似的球员进行分组。

了解聚类

聚类(Clustering)是无监督学习技术的一种(另一种是主成分分析)。


我们可以将观测值聚类(或分组)到相同的子组中,使子组内的观测值彼此相当相似,而不同子组中的观测值彼此相当不同。



聚类示例。


上面的散点图显示了数据集中有三个不同的组。

了解 K-均值聚类算法

K-均值聚类算法是聚类算法中的一种。


基本算法如下:


  • 指定 K-聚类并初始化随机质心。

  • 进行迭代,直到聚类分配停止更改。该方法将每个观测值精确地分配到 K 个聚类中的一个。

  • 对于每个 K 聚类,计算聚类平均值。

  • 继续查看观测值列表,并将观测值分配给平均值最接近的聚类。


其目的是形成聚类,使同一聚类内的观测值尽可能相似。


K-均值聚类算法使用平方欧几里得距离计算相似度。

数据集

我们将使用 Kaggle 的 FIFA 20 数据集

特征工程

我们只会选择数值和每个球员的名字。


df = df[['short_name','age', 'height_cm', 'weight_kg', 'overall', 'potential','value_eur', 'wage_eur', 'international_reputation', 'weak_foot','skill_moves', 'release_clause_eur', 'team_jersey_number','contract_valid_until', 'nation_jersey_number', 'pace', 'shooting','passing', 'dribbling', 'defending', 'physic', 'gk_diving','gk_handling', 'gk_kicking', 'gk_reflexes', 'gk_speed','gk_positioning', 'attacking_crossing', 'attacking_finishing','attacking_heading_accuracy', 'attacking_short_passing','attacking_volleys', 'skill_dribbling', 'skill_curve','skill_fk_accuracy', 'skill_long_passing', 'skill_ball_control','movement_acceleration', 'movement_sprint_speed', 'movement_agility','movement_reactions', 'movement_balance', 'power_shot_power','power_jumping', 'power_stamina', 'power_strength', 'power_long_shots','mentality_aggression', 'mentality_interceptions','mentality_positioning', 'mentality_vision', 'mentality_penalties','mentality_composure', 'defending_marking', 'defending_standing_tackle','defending_sliding_tackle', 'goalkeeping_diving','goalkeeping_handling', 'goalkeeping_kicking','goalkeeping_positioning', 'goalkeeping_reflexes']]
复制代码


我提取的是总成绩高于 86 分的球员,因为我们不想使用 18000 多名球员进行分组。


df = df[df.overall > 86] # extracting players with overall above 86
复制代码


将空值替换为平均值。


df = df.fillna(df.mean())
复制代码


归一化(标准化/缩放)数据。


  • 我们希望将数据进行归一化,因为变量是在不同尺度上测量的。


from sklearn import preprocessingx = df.values # numpy arrayscaler = preprocessing.MinMaxScaler()x_scaled = scaler.fit_transform(x)X_norm = pd.DataFrame(x_scaled)
复制代码


使用主成分分析将图中的 60 个维度减少到 2 个。


from sklearn.decomposition import PCApca = PCA(n_components = 2) # 2D PCA for the plotreduced = pd.DataFrame(pca.fit_transform(X_norm))
复制代码

执行 K-均值聚类

我们将指定有 5 个聚类。


from sklearn.cluster import KMeans# specify the number of clusterskmeans = KMeans(n_clusters=5)# fit the input datakmeans = kmeans.fit(reduced)# get the cluster labelslabels = kmeans.predict(reduced)# centroid valuescentroid = kmeans.cluster_centers_# cluster valuesclusters = kmeans.labels_.tolist()
复制代码


通过添加球员的名字和他们的聚类来创建一个新的数据帧。


reduced['cluster'] = clustersreduced['name'] = namesreduced.columns = ['x', 'y', 'cluster', 'name']reduced.head()
复制代码

K-均值聚类图的可视化

import matplotlib.pyplot as pltimport seaborn as sns%matplotlib inlinesns.set(style="white")ax = sns.lmplot(x="x", y="y", hue='cluster', data = reduced, legend=False,fit_reg=False, size = 15, scatter_kws={"s": 250})texts = []for x, y, s in zip(reduced.x, reduced.y, reduced.name):texts.append(plt.text(x, y, s))ax.set(ylim=(-2, 2))plt.tick_params(labelsize=15)plt.xlabel("PC 1", fontsize = 20)plt.ylabel("PC 2", fontsize = 20)plt.show()
复制代码



K-均值聚类


看看基于球员位置的聚类是如何形成的,是不是很酷!


我希望本教程对你有所启发,敬请关注下一篇教程!


作者介绍


Jaemin Lee,专攻数据分析与数据科学,数据科学应届毕业生。


原文链接


https://towardsdatascience.com/grouping-soccer-players-with-similar-skillsets-in-fifa-20-part-1-k-means-clustering-c4a845db78bc


2020-09-21 10:101487

评论

发布
暂无评论
发现更多内容

开源一夏 | 提高代码可重用性,减少重复劳动--手把手带你实现Python自定义模块并上传到pypi,贡献自己创造的轮子为所有人使用,让Python开发更加简单

迷彩

Python 开源 签约计划第三季 8月月更 自定义模块

一文搞懂传统单节点网站的 Serverless 上云

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

云渲染的应用正在扩大,越来越多的行业需要可视化服务

Finovy Cloud

云渲染 GPU渲染

测试开发【Mock 平台】08 开发:项目管理(四)编辑功能和Component抽离

MegaQi

8月月更

选择是公有云还或是私有云,这很重要吗?

BeeWorks

AIRIOT答疑第8期|AIRIOT的金字塔服务体系是如何搞定客户的?

AIRIOT

低代码 物联网 低代码,项目开发

网络可观测性:让您的网络监控更上一层楼|TechGenix

观测云

【C#】WCF和TCP消息通信练习,实现群聊功能

南蓬幽

签约计划第三季 8月月更

Apache DolphinScheduler 3.0.0 正式版发布!

白鲸开源

海豚调度 DolphinScheduler 调度器 版本发布

机器学习模型验证:被低估的重要一环

澳鹏Appen

人工智能 机器学习 模型开发 模型开发训练 模型验证

从Delta 2.0开始聊聊我们需要怎样的数据湖

网易数帆

大数据 数据湖 Arctic 湖仓一体

产品说明丨Android端使用MobPush快速集成方法

MobTech袤博科技

android Android Studio 集成 mobpush

Java System.lineSeparator 方法

HoneyMoose

SpringMVC(四、异常处理和综合练习)

开源 springmvc 8月月更

搭载2.8K 120Hz OLED华硕好屏 无畏Pro15 2022锐龙版屏开得胜

科技热闻

shell运算详解,看这一篇就够了!

Albert Edison

Linux centos 运维 shell脚本编程 8月月更

从企业的视角来看,数据中台到底意味着什么?

BeeWorks

6月各手机银行活跃用户较快增长,创半年新高

易观分析

数据分析 金融 电子银行

HarmonyOS自动化测试框架—Hypium

HarmonyOS开发者

HarmonyOS

【接入指南 之 直接接入】手把手教你快速上手接入HONOR Connect平台(下)

荣耀开发者服务平台

手机 新手指南 安卓 荣耀 honor

兼具外观、性能、屏幕!华硕灵耀X 14火热抢购中

科技热闻

接口测试进阶接口脚本使用—apipost(预/后执行脚本)

Xd

Java 接口测试

120Hz OLED拒绝“烧屏”!华硕无双全能轻薄本

科技热闻

企业即时通讯是什么?可以应用在哪些场景?

BeeWorks

开源一夏 | mysql5.7 安装部署 -二进制安装

zhangpfly

MySQL 开源 MySQL 运维 #开源 8月月更

直播回顾|多云时代,如何建设企业级云管理平台?(附建设指南下载)

BoCloud博云

云计算 容器 云平台 云管理

CEO对今天的CIO们真正的要求是什么?

BeeWorks

什么是企业知识库?有什么作用?如何搭建?

金陵老街

vue cli 知识库 spring-boot

RocketMQ 消息集成:多类型业务消息——定时消息

阿里巴巴云原生

阿里云 RocketMQ 云原生 消息队列

每日一R「03」Borrow 语义与引用

Samson

8月月更 ​Rust

MSE 治理中心重磅升级-流量治理、数据库治理、同 AZ 优先

阿里巴巴云原生

数据库 阿里云 微服务 云原生 限流

在 FIFA 20 将技能相似球员进行分组(1):K-均值聚类_AI&大模型_Jaemin Lee_InfoQ精选文章