在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

在 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:101588

评论

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

我一进门就看见 AI 在啪啪啪狂敲代码

江南一点雨

Java音视频文件解析工具

江南一点雨

小间距显示屏方案的具体要求

Dylan

应用 LED LED display LED显示屏 效果广告

鸿蒙NEXT生态应用核心技术理念:统一生态,原生智能

芯盾时代

鸿蒙 生态

从数据中台到数据飞轮:企业数字化战略的新范式

不叫猫先生

数据中台 数据仓库 数据 数据飞轮

为什么全球顶尖银行纷纷选择与华为合作?

脑极体

AI

【Tomcat源码分析】启动过程深度解析 (二)

派大星

tomcat源码解读

架构设计的悖论,复用是美好的还是邪恶的

阿里技术

阿里巴巴 中台 Supercell 代码复用 DRY原则

百度Android IM SDK组件能力建设及应用

百度Geek说

聊天 IM sdk 安卓 即时通讯IM

【堡垒机小知识】堡垒机常见运维方式你知道几种呢?

行云管家

网络安全 堡垒机 运维审计

随州等保测评机构在哪里?电话多少?

行云管家

等保 堡垒机 等保测评 随州

淘宝商品详情数据api接口深度探索:解锁商品信息的全面视角

代码忍者

API 接口 pinduoduo API

天猫商品详情数据API接口:解锁高效数据获取的钥匙

代码忍者

API 接口 pinduoduo API

概念回顾:现代应用架构中的数据平面、管理平面和控制平面

NGINX开源社区

读书笔记 开源 个人成长

VMware NSX Advanced Load Balancer (NSX ALB) 22.1.7 发布下载,新增功能概览

sysin

负载均衡 Lab nsx

面试官:单核服务器可以不加锁吗?

王磊

Zabbix 2024 中国峰会在上海举办,Databuff 携最业界领先研发成果重磅亮相

乘云数字DataBuff

故障定位 zabbix 峰会

人工智能 | 基于ChatGPT开发人工智能服务平台

测试人

人工智能 软件测试

万兆时代 TCP/IP如何赋能以太网飞跃

郑州埃文科技

TCP/IP 以太网

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