NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

在 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


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-09-21 10:101102

评论

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

华为云新生代开发者招募

华为云PaaS服务小智

开发者 有奖活动 华为云

Karmada 结合 coreDNS 插件实现跨集群统一域名访问

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

延时摄影视频制作软件LRTimelapse mac中文激活版v6.5.0

mac

苹果mac Windows软件下载 lrTimelapse 延时摄影视频制作软件

软件测试/测试开发丨Selenium 高级定位 CSS

测试人

CSS Python 程序员 软件测试 selenium

性能专家深度解读:常见的压测模型

优测云服务平台

性能测试 压力测试 云平台 性能瓶颈 云平台技术

创新医疗:人工智能引领健康未来

测吧(北京)科技有限公司

测试

一文讲透 JavaScript 应用的演进历程

高端章鱼哥

JavaScript 软件开发 #web

Databend 开源周报第 108 期

Databend

来文心中国行!专家面对面解读大模型产业实践及AI场景突围

飞桨PaddlePaddle

人工智能 百度飞桨 百度AI 文心一言 文心大模型

印刷行业MES系统解决方案

万界星空科技

MES系统 印刷

为什么 Higress 是 Knative 入口网关的最佳实践?

阿里巴巴云原生

阿里云 云原生 Higress

大数据平台数据安全解决方案就看行云管家!

行云管家

大数据 数据安全 大数据平台

基于飞桨图学习框架的空间异配性感知图神经网络

飞桨PaddlePaddle

人工智能 百度飞桨

文心一言 VS 讯飞星火 VS chatgpt (83)-- 算法导论8.1 4题

福大大架构师每日一题

福大大架构师每日一题

【收藏】制作艺术二维码,用 Stable Diffusion 就行!

阿里巴巴云原生

阿里云 云原生 Stable Diffusion Stable

软件测试 | 人工智能的引领,医疗的未来

测吧(北京)科技有限公司

测试

一文让你简单知道银行建设堡垒机的意义

行云管家

网络安全 银行 堡垒机

NFT沙盒游戏开发搭建

V\TG【ch3nguang】

NFT数字藏品系统

软件测试 | 人工智能的背景与发展历程

测吧(北京)科技有限公司

测试

区块链交易所系统开发

V\TG【ch3nguang】

数字货币交易所系统搭建

直播预约丨《实时湖仓实践五讲》第一讲:企业为什么需要实时湖仓?

袋鼠云数栈

直播 实时湖仓

OpenHarmony组件复用示例

OpenHarmony开发者

OpenHarmony

JavaScript原型链污染

互联网工科生

JavaScript 前端 js

OpenHarmony设备截屏的5种方式

OpenHarmony开发者

OpenHarmony

通过AOP拦截Spring Boot日志并将其存入数据库

华为云开发者联盟

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

软件测试 | 人工智能的广泛应用领域有哪些?

测吧(北京)科技有限公司

测试

小灯塔系列-中小企业数字化转型系列研究——表单管理测评报告

向量智库

简单好用的防火墙 Radio Silence最新激活码

mac大玩家j

Mac软件 防火墙工具 防火墙软件 阻止网络连接软件

langchain中的LLM模型使用介绍

程序那些事

人工智能 AIGC langchain

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