写点什么

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

评论

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

构建财务共享体系,智能化引领转型升级

用友BIP

财务共享

华为云 UCS GitOps:轻松交付多集群云原生应用

华为云开发者联盟

华为云 华为云开发者联盟 企业号 6 月 PK 榜

Java线程池一、基本概念和原理

echoes

Java 线程池

低代码开发与数智制造:数字转型的无缝结合

加入高科技仿生人

低代码 数智化 数智制造

浅谈低代码

不叫猫先生

低代码 6 月 优质更文活动

了解 Dubbo:分布式服务框架的基础知识

Apifox

程序员 gRPC dubbo RPC 开发

突破创新!Windows主机助你打造独一无二的网站!

一只扑棱蛾子

Windows主机

「悦数图数据库」亮相中国国际信息通信展览会,推进图技术产业化发展

悦数图数据库

通信 图数据库

大模型扎堆「赶考」,语文还是国产AI行,文言文能力超过95%考生

Openlab_cosmoplat

人工智能 机器学习 AI 高考

推动高校教改:如何面向人文社科教授数据分析

ModelWhale

数据分析 学科交叉 人文社科 教学经验 高等教育

中移链节点动态管控介绍

BSN研习社

阿里云微服务引擎负责人李艳林:云原生网关当道,会带来哪些改变

阿里巴巴云原生

阿里云 微服务 云原生

共享电动单车生产厂家怎么找合适

共享电单车厂家

共享电动车厂家 共享电单车厂商 共享电动车生产 本铯电动车厂家

旭阳数字:让焦化行业供应链更数智

用友BIP

数智平台

云原生中间件套件,如何为企业数字化转型提供支撑

金蝶天燕云

云原生 中间件 信创

实例讲解Flink 流处理程序编程模型

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

生态伙伴 | 中电创新科技集聚示范区携手华秋硬创,加速智能硬件孵化

华秋电子

「悦数图数据库」亮相中国国际信息通信展览会,推进图技术产业化发展

悦数图数据库

通信 图数据库 运营商

中企出海所面临的几点人力资源挑战

用友BIP

中企出海

华为云新一代分布式数据库GaussDB,给世界一个更优选择

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

别着急摆烂,看看你到底值多少钱?

引迈信息

程序员 软件开发 低代码 IT JNPF

TS中type和interface在类型声明时的区别

不叫猫先生

6 月 优质更文活动

Postman 和 GraphQL:最佳实践指南

Liam

Java Postman API graphql 接口工具

腾讯企点客服赛道国内TOP1!Gartner报告公布最新市场份额

人称T客

eosio.system智能合约介绍(一)账户和权限

BSN研习社

Java线程池二、使用线程池进行任务管理

echoes

面向多告警源,如何构建统一告警管理体系?

阿里巴巴云原生

阿里云 云原生 可观测

LRU缓存策略

不叫猫先生

LRU 6 月 优质更文活动

javaScript实现动态规划(Dynamic Programming)01背包问题

不叫猫先生

动态规划 JavaScrip 6 月 优质更文活动

基于 AIGC,RocketMQ 学习社区探索开源软件学习新范式

阿里巴巴云原生

阿里云 RocketMQ 云原生 AIGC

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