写点什么

在 FIFA 20 将技能相似球员进行分组(2):层次聚类

  • 2020-09-22
  • 本文字数:2195 字

    阅读完需:约 7 分钟

在 FIFA 20 将技能相似球员进行分组(2):层次聚类

理解层次聚类

  • 与 K-均值聚类算法(K-means)不同,不需要指定聚类的数量。

  • 结果汇总在树状图,树状图可以方便地解释数据和选择任何数量的聚类。

基本思路

  • 专注 :自下而上(又称凝聚聚类(Agglomerative clustering))

  • 从单个观察开始(又称 叶子 )开始,作为聚类。

  • 通过将叶子合并成 树枝 向上移动。

  • 将树枝与其他叶子或树枝合并。

  • 最终,当所有的东西都合并到一个聚类时,到达顶端。



树状图示例。

解释树状图

  • 在适当的高度上进行切割,以获得所需聚类的 #。

  • 垂直轴:相异度度量(或距离)——两个聚类合并的高度。

  • 高度表示聚类的相似性。

  • 较低的高度更相似

  • 水平轴并不表示相似性。

  • 交换左右分支并不影响树状图的意义。

它如何衡量聚类之间的差异?

  1. 基于度量(最常见的是曼哈顿距离(Manhattan distance)或欧几里得距离(Euclidean distance,亦称欧氏距离))。

  2. 最长距离法(Complete linkage)(即最远邻法(furthest-neighbor))

  3. 最短距离法(Single linkage)(即最近邻法(nearest-neighbor))

  4. 平均距离法(Average linkage)

  5. 质心距离法(Centroid linkage)

  6. 2, 基于相关性的距离

  7. 查找观测值之间的相关性。

层次聚类的缺点

  1. 计算成本高——不适用于大数据集。

  2. ,而表示 K-均值。

  3. 对噪声和离群值敏感。

使用层次聚类对 FIFA20 的球员进行分组

数据清理/预处理(第一部分中的代码)

import pandas as pdimport numpy as npdf = pd.read_csv("/content/players_20.csv")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']]df = df[df.overall > 86] # extracting players with overall above 86df = df.fillna(df.mean())names = df.short_name.tolist() # saving names for laterdf = df.drop(['short_name'], axis = 1) # drop the short_name columndf.head()
复制代码

标准化数据

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

基于平均距离法的层次聚类

import matplotlib.pyplot as pltimport scipy.cluster.hierarchy as sch# plot dendrogram using average linkageplt.figure(figsize=(10,14))plt.title('Hierarchical Clustering Dendrogram with Average Linkage')dendrogram = sch.dendrogram(sch.linkage(X_norm, method="average"), labels= names, leaf_font_size = 13, orientation='right')
复制代码



  • 分成两组:守门员和其他人

最短距离法

# plot dendrogram using single linkageplt.figure(figsize=(10,14))plt.title('Hierarchical Clustering Dendrogram with Single Linkage')dendrogram = sch.dendrogram(sch.linkage(X_norm, method="single"), labels= names, leaf_font_size = 13, orientation='right')
复制代码



分为守门员和其他人

质心距离法

# plot dendrogram using centroid linkageplt.figure(figsize=(10,14))plt.title('Hierarchical Clustering Dendrogram with Centroid Linkage')dendrogram = sch.dendrogram(sch.linkage(X_norm, method="centroid"), labels= names, leaf_font_size = 13, orientation='right')
复制代码



  • 再次分成守门员和其他人。

最长距离法

# plot dendrogram using complete linkageplt.figure(figsize=(10,14))plt.title('Hierarchical Clustering Dendrogram with Complete Linkage')dendrogram = sch.dendrogram(sch.linkage(X_norm, method="complete"), labels= names, leaf_font_size = 13, orientation='right')
复制代码


结论

最长距离法似乎是将球员进行最准确地分组的方法!


感谢阅读本文,希望对你有所启迪。


本文的 GitHub 仓库:https://github.com/importdata/Clustering-FIFA-20-Players


作者介绍


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


原文链接


https://towardsdatascience.com/grouping-soccer-players-with-similar-skillsets-in-fifa-20-part-2-hierarchical-clustering-839705f6d37d?source=---------0-----------------------


2020-09-22 10:031319

评论

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

MySQL 事务隔离级别,进阶和基础哪一个难

Java 程序员 后端

Mysql中,21个写SQL的好习惯,你值得拥有呀,jvm原理面试题

Java 程序员 后端

MySQL事务:ACID特性的实现原理知多少,java教学视频百度云

Java 程序员 后端

kubernetes部署metrics-server,linux服务器教程

Java 程序员 后端

linux常用命令(一),阿里java面试算法

Java 程序员 后端

markdown编辑器的使用教程,java面试笔试题程序题

Java 程序员 后端

MyCat配置文件详解(二),java自学视频谁讲的好

Java 程序员 后端

MyBatis 源码分析 - 插件机制,java容器面试题

Java 程序员 后端

Kafka性能调优实战:同等资源配置性能提升20几倍的秘诀

Java 程序员 后端

Contour-v1.19.1发布

远鹏

golang Kubernetes cncf envoy contour

Linux服务器端网络抓包和分析实战,中高级Java面试题目汇总解答

Java 程序员 后端

linux防火墙iptables常用操作笔记,java开发手册百度网盘

Java 程序员 后端

leetcode 数组练习,java入门书籍

Java 程序员 后端

Mac下vagrant从安装到体验,经典实战教程

Java 程序员 后端

MyEclipse优化、常用设置、快捷键,java视频教程百度云

Java 程序员 后端

Kotlin之DSL,java面试写代码

Java 程序员 后端

架构营模块二作业

GTiger

架构实战营

Kubernetes 常用命令大全,震撼来袭免费下载

Java 程序员 后端

Kurento实战之一:KMS部署和体验,应届毕业生java面试准备

Java 程序员 后端

MyBatis01:初识 MyBatis 与 第一个 MyBaits 程序

Java 程序员 后端

Kubernetes任务调用Job与CronJob及源码分析(1)

Java 程序员 后端

MyBatis官方文档-日志,java高级开发工程师职责

Java 程序员 后端

kubebuilder实战之三:基础知识速览,mybatis运行原理步骤

Java 程序员 后端

MongoDB入门操作汇总,网易架构师深入讲解Java开发

Java 程序员 后端

mybatis开发要点-insert主键ID获取和多参数传递

Java 程序员 后端

Mysql中,21个写SQL的好习惯,你值得拥有呀(1)

Java 程序员 后端

Mybatis常考面试题汇总(附答案),学习SpringBoot

Java 程序员 后端

Kubernetes官方java客户端之六:OpenAPI基本操作

Java 程序员 后端

MyBaitsPlus----知识盲点整理,mysql数据库项目式教程答案

Java 程序员 后端

MyBatis 自定义 SQL 拦截器,java数据可视化技术

Java 程序员 后端

Mybatis学习笔记--自定义Mybatis,java程序员面试笔试宝典百度云

Java 程序员 后端

在 FIFA 20 将技能相似球员进行分组(2):层次聚类_AI&大模型_Jaemin Lee_InfoQ精选文章