2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论

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

和鲸科技参与第17届中国R会议,分享有组织科研的模型生命周期管理

ModelWhale

人工智能 R 数据科学 AI4S

杭州银行与平凯星辰联合荣获 2024 “金鼎奖”

先锋IT

100行代码手把手带你实现Feisitel加密算法

我再BUG界嘎嘎乱杀

Python 网络安全 安全 加密算法 Feisitel

如何定量分析 Llama 3,大模型系统工程师视角的 Transformer 架构

Baidu AICLOUD

Transformer llama GPU 利用率 推理并发

杭州银行 x 平凯星辰 TiDB “行领柜面系统”荣获 2024 “金鼎奖”

PingCAP

安全 创新 金融 银行 TiDB

【YashanDB知识库】update/delete未选中行时,v$transaction视图没有事务,alter超时问题

YashanDB

yashandb 崖山数据库 崖山DB

“网络去NAT”工作的推进,对IPv6升级改造提出新要求

防火墙后吃泡面

利用 Databend 生态构建现代数据湖工作流

Databend

人工智能丨ReACT 推理提示

测试人

软件测试

SIGGRAPH 2024 | 物理模拟领域再攀高峰!网易伏羲最新技术成果成功入选

网易伏羲

Python 算法

软考架构师必过的学习经验

源字节1号

小程序 开源 后端

Solana行情为何坚挺?强劲基本面和ETF预期吸引资本流入

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

人类历史上首届AI选美,谁吃到了第一波AI审美红利?

脑极体

AI

平凯星辰亮相 2024 中国国际金融展,发布银行交易明细查询白皮书

PingCAP

金融 会议 TiDB 交易明细

微信小程序不备案有什么后果

源字节1号

小程序 开源 后端

Apache Doris + Paimon 快速搭建指南|Lakehouse 使用手册(二)

SelectDB

数据湖 Doris LakeHouse 湖仓一体 paimon

AI应用行业落地100例 | 移民公司Envoy Global引入AI员工赋能,效率飙升80%,开启服务新篇章

硅纪元

一文了解MySQL索引机制

京东科技开发者

防御性编程:让系统坚不可摧

京东科技开发者

Apache Doris 2.1.5 版本正式发布

SelectDB

倒排索引 Doris 半结构化数据 湖仓一体 物化视图

缓存框架 Caffeine 的可视化探索与实践

vivo互联网技术

Caffeine 缓存可视化 动态下发

IT外包服务成功案例分享与优势解析

Ogcloud

IT外包 IT外包公司 IT外包服务 IT外包企业 IT外包服务商

Apache Doris + Apache Hudi 快速搭建指南|Lakehouse 使用手册(一)

SelectDB

数据湖 Doris Hudi LakeHouse 湖仓一体

强调数据价值,创建现代化全面预算管理系统

智达方通

企业管理 数据价值 数字化升级 全面预算管理系统

Java CompletableFuture 异步超时实现探索

京东科技开发者

技术前沿|ICML 2024 中稿快讯!解锁大模型密态推理场景下的“百变怪”?

隐语SecretFlow

在 Go 中如何让结构体不可比较?

伤感汤姆布利柏

人工智能|ReACT 推理提示

霍格沃兹测试开发学社

【论文速读】| MoRSE:利用检索增强生成技术填补网络安全专业知识的空白

云起无垠

TiDB Hackathon 2024丨用 TiDB 构建未来的 AI 创新应用, 瓜分超 ¥210,000 奖金池!

PingCAP

项目 hackathon TiDB 竞赛

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