写点什么

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

评论

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

Android进阶:十一、视频播放器初体验,给大家安排上

android 程序员 移动开发

Android通用业务弹窗管理方案V2,hashmap扩容过程

android 程序员 移动开发

Android自定义轮播效果(1),kotlin编译器安卓版

android 程序员 移动开发

Android程序媛:文科转码,记录我在字节跳动这一年,android5.0升级包下载

android 程序员 移动开发

Android程序员;裸辞2个月找不到工作,我该怎么办,看完直接怼产品经理

android 程序员 移动开发

Android组件化:stitch框架,音视频开发书籍

android 程序员 移动开发

【Flutter 专题】18 易忽略的【小而巧】的技术点汇总 (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

Android自定义轮播效果,flutter开发环境

android 程序员 移动开发

Android进阶难题:普通公司的程序员跟BAT大公司的技术差距在哪?该如何选择

android 程序员 移动开发

Android进阶:用最详细的方式解析Android消息机制的源码

android 程序员 移动开发

Android隐藏系统状态栏(沉浸式状态栏)和设置状态栏颜色

android 程序员 移动开发

Android程序性能优化——ANR,android热更新流程

android 程序员 移动开发

Android自定义控件进阶篇,自定义LayoutManager,深入剖析

android 程序员 移动开发

Android系统联系人全特效实现(下),字母表快速滚动,android开发网上购物app

android 程序员 移动开发

Android老油条都知道的7个Gradle实用奇技淫巧,Android开发面试解答之Handler

android 程序员 移动开发

Android组件内核之组件间通信方案(四)上篇,文末有彩蛋

android 程序员 移动开发

Android组件化——SXRecyclerView,android实现选择题模式

android 程序员 移动开发

Android自定义View之游戏摇杆键盘实现(一),二本学渣考研失败

android 程序员 移动开发

Android跨进程通信导论,极致干货

android 程序员 移动开发

Android进阶——解密笔记,flutter人脸识别模块

android 程序员 移动开发

Android进阶:高仿抖音上下滑动分页视频,要求页面流畅

android 程序员 移动开发

Android系统-包管理机制(一)PMS服务启动,腾讯大牛教你自己写Android第三方库

android 程序员 移动开发

Android老司机教你如何快速突击大厂面试,快恶补这些知识点,成功必看

android 程序员 移动开发

Android菜鸡手撕523页PDF高级面试题,成功“挤掉,android编程基础班

android 程序员 移动开发

Android进阶——解密笔记(1),分享一些行业经验

android 程序员 移动开发

Android程序员:“作为字节跳动面试官,androidapp开发工具

android 程序员 移动开发

Android自定义View:MeasureSpec的真正意义与View大小控制

android 程序员 移动开发

Android菜鸟进字节跳动,居然是看了这个,干货分享

android 程序员 移动开发

Android要凉?字节跳动7年Android老鸟,写给1-5年程序员的几点建议

android 程序员 移动开发

Android面经分享:我是如何一举拿下阿里、抖音,html5图片左右移动

android 程序员 移动开发

Android自动化页面测速在美团的实践,android蓝牙开发框架

android 程序员 移动开发

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