用k-means对亚洲足球队做聚类
背景知识
亚足联AFC:
1954年成立,总部马来西亚吉隆坡。
负责管理亚洲区足球事务,举办各项国家级及俱乐部级赛事,协助国际足联举行世界杯预选赛及4年一度的亚洲杯。
47个成员协会,包括阿富汗、缅甸、中国台北、中国香港、印度尼西亚、日本、韩国、巴基斯坦、菲律宾、新加坡、越南等。
分为两大势力——东亚及西亚,东亚包括有日本、韩国、中国、澳大利亚(来自大洋洲的澳大利亚于2006年加入亚足联),西亚有伊拉克、沙特阿拉伯、阿联酋等。
2018俄罗斯世界杯:
5大洲足联的32支球队参赛
东道主俄罗斯自动获得参赛资格
其余31支通过各大洲足联举办的预选赛事获得参赛资格(如,亚足联举办的亚洲区预选赛)
2018世界杯亚洲区预选赛:
预选赛12强赛,分两组,两组前两名直接晋级世界杯决赛,两组第3名之间的胜者获得附加赛资格。
数据
2019年国际足联的世界排名+2015年亚洲杯排名+2018俄罗斯世界杯排名(只有进入决赛的亚足联国家才有实际排名)
我这里选了20支球队
import pandas as pd
data= pd.read_csv(r"G:\case\data\footballRank.csv")
data.head()
国家 | 2019国际排名 | 2018世界杯 | 2015亚洲杯 | |
---|---|---|---|---|
0 | 中国 | 73 | 40 | 7 |
1 | 日本 | 60 | 15 | 5 |
2 | 韩国 | 61 | 19 | 2 |
3 | 伊朗 | 34 | 18 | 6 |
4 | 沙特 | 67 | 26 | 10 |
思路
要用k-means模型,k-means是用距离做相似性度量的,先要做数据标准化,消除不同量纲级别带来的影响,使各维度上的量纲等价。
1、数据标准化
2、建模,用k-means做聚类
创建k-means模型:
KMeans(n_clusters=8, init=‘k-means++’, n_init= 10, max_iter=300, tol=0.0001, precompute_distances=‘auto’, verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm=‘auto’)
n_clusters: 即k值,一般需要多试一些k值。可以随机设置一些k值,选聚类效果最好的。
init: 初始值(初始中心点)选择的方式,默认是采用优化过的k-means++方式。也可以自己指定中心点,或者采用random完全随机的方式,一般推荐用优化过的k-means++方式。自己设置一般是对于个性化的数据进行设置,很少采用。
n_init: 初始化中心点的运算次数,默认是10。模型是否能快速收敛和中心点的选择关系非常大,所以在选中心点上多花一些时间,来争取整体时间上的快速收敛是值得的。每一次中心点是随机生成的,所以要多运行几次,选择最好的做初始中心点。k值比较大,可以适当增大n_init值。
max_iter: 最大迭代次数。如果聚类很难收敛的话,设置max_iter可以确保结束长时间运行。
algorithm: k-means的实现算法,三种取值:“auto”、“full”、“elkan”。推荐采用默认的“auto”。'full’采用传统的K-Means算法,‘auto会根据数据的特点自动选择full还是elkan。
fit(data)可以对data做聚类,predict(data)可以对每一个样本,计算最近的类
实验
1、Z-score标准化
k-means用距离度量相似度,需要做数据规范化,我采用了其中的标准化方法:Z-score。用来消除不同量纲级别带来的误差。
import numpy as np
from sklearn import preprocessing
train_x=data[['2019国际排名','2018世界杯', '2015亚洲杯']]
scaled_x= preprocessing.scale(train_x)
d:\python27\lib\site-packages\ipykernel_launcher.py:1: DataConversionWarning: Data with input dtype int64 were all converted to float64 by the scale function."""Entry point for launching an IPython kernel.
scaled_x
array([[-0.5842676 , 0.05223517, -0.64677721],[-0.97679881, -2.12423024, -1.03291285],[-0.9466041 , -1.77599577, -1.61211632],[-1.76186121, -1.86305439, -0.83984503],[-0.76543585, -1.16658546, -0.06757374],[-0.04076286, 0.05223517, -1.22598067],[ 0.26118422, 0.05223517, 0.51162973],[-0.34270994, 0.05223517, -0.83984503],[-0.13134698, 0.05223517, -0.45370938],[ 0.89527309, 0.05223517, 1.28390102],[ 0.29137893, 0.92282133, 1.28390102],[-0.16154169, 0.92282133, 0.31856191],[ 0.71410485, 0.92282133, 0.12549408],[ 0.5329366 , 0.92282133, 0.70469755],[ 2.16345083, 0.92282133, 1.28390102],[-1.58069297, -0.81835099, -1.80518414],[-0.49368348, 0.05223517, 1.28390102],[ 0.77449426, 0.92282133, -0.26064156],[ 2.042672 , 0.92282133, 0.89776537],[ 0.11021068, 0.92282133, 1.0908332 ]])
2、k-means做聚类
from sklearn.cluster import KMeans
K值选几呢?
选3,将亚洲足球划分为3个梯队
k=3
model= KMeans(n_clusters= k, init='k-means++', n_init=10, max_iter= 300)
clf= model.fit(scaled_x)
pre_y= clf.predict(scaled_x)
#concat合并
result= pd.concat([data, pd.DataFrame(pre_y)], axis=1)
result
国家 | 2019国际排名 | 2018世界杯 | 2015亚洲杯 | 0 | |
---|---|---|---|---|---|
0 | 中国 | 73 | 40 | 7 | 1 |
1 | 日本 | 60 | 15 | 5 | 2 |
2 | 韩国 | 61 | 19 | 2 | 2 |
3 | 伊朗 | 34 | 18 | 6 | 2 |
4 | 沙特 | 67 | 26 | 10 | 2 |
5 | 伊拉克 | 91 | 40 | 4 | 1 |
6 | 卡塔尔 | 101 | 40 | 13 | 0 |
7 | 阿联酋 | 81 | 40 | 6 | 1 |
8 | 乌兹别克斯坦 | 88 | 40 | 8 | 1 |
9 | 泰国 | 122 | 40 | 17 | 0 |
10 | 越南 | 102 | 50 | 17 | 0 |
11 | 阿曼 | 87 | 50 | 12 | 0 |
12 | 巴林 | 116 | 50 | 11 | 0 |
13 | 朝鲜 | 110 | 50 | 14 | 0 |
14 | 印尼 | 164 | 50 | 17 | 0 |
15 | 澳洲 | 40 | 30 | 1 | 2 |
16 | 叙利亚 | 76 | 40 | 17 | 0 |
17 | 约旦 | 118 | 50 | 9 | 0 |
18 | 科威特 | 160 | 50 | 15 | 0 |
19 | 巴勒斯坦 | 96 | 50 | 16 | 0 |
根据聚类结果可以看到:
日本、韩国、伊朗、沙特、澳洲为一梯队
中国、伊拉克、阿联酋、乌兹别克斯坦为一梯队
卡塔尔、泰国、越南、阿曼、巴林、朝鲜、印尼、叙利亚、约旦、科威特、巴勒斯坦为一梯队
用k-means对亚洲足球队做聚类相关推荐
- k均值聚类算法(K Means)及其实战案例
算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...
- OpenCV的k - means聚类 -对图片进行颜色量化
OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...
- OpenCV官方文档 理解k - means聚类
理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...
- 为了联盟还是为了部落 | K means
1. 问题 人类有个很有趣的现象,一群人在一起,过一段时间就会自发的形成一个个的小团体.好像我们很擅长寻找和自己气质接近的同类.其实不只是人类,数据也有类似情况,这就是聚类(Clustering)的意 ...
- kmeans改进 matlab,基于距离函数的改进k―means 算法
摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...
- 文献记录(part89)--I-k-means-+:An iterative clustering algorithm based on an enhanced k -means
学习笔记,仅供参考,有错必究 关键词:k均值:解决方案改进:准确的k均值:迭代改进 I-k-means-+:An iterative clustering algorithm based on an ...
- K means 图片压缩
k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...
- R语言Kmeans聚类、抽取聚类簇:fpc包的kmeansruns函数通过Calinski-Harabasz准则和平均轮廓系数(ASW)为Kmeans选择最优的聚类K值、并与层次聚类的最优K值进行比较
R语言Kmeans聚类.抽取Kmeans聚类找到的聚类簇:fpc包的kmeansruns函数通过Calinski-Harabasz准则和平均轮廓系数(Average average silhouett ...
- k means聚类算法_一文读懂K-means聚类算法
1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...
最新文章
- 6.Java集成开发环境
- 从方法到实践!深度解读:企业数据治理到底治什么?怎么治?
- 【Linux】一步一步学Linux——atrm命令(140)
- 随记:Linux中一个修改活动卷组名所引发的血案
- 【性能测试】性能测试基础:性能测试的概念、分类、场景和设计要点
- python的起源和发展_Python入门第一课——Python的起源、发展与前景!
- IAP-应用内购买流程
- 在XML文件中定义动画(1)
- [USACO11DEC] 牧草种植Grass Planting
- Qt 字符编码转换(UTF-8 转换为 GBK)
- 程序员前景一片灰暗?网友:不行找个班上吧
- 自学笔记----三极管
- 各种浏览器的cache文件夹
- 计算机机房的消防验收,机房消防标准方案.doc
- Android Banner图片轮播第三方框架
- 通过 xinput 禁用/启用输入设备
- The server encountered an internal error () that prevented it from fulfilling this request.
- Quartile收购Sidecar,打造首屈一指的跨渠道电商广告平台
- 10个流行常用的Django第三方包-大江狗推荐
- 电子邮件发送服务器怎么看钱,验证电子邮件的验证码是发到哪里
热门文章
- 摸鱼大闯关(1-10)
- E. Anonymity Is Important
- 【教程】咕嘎批量文件清单快速查找搜索文件,批量移动复制或批量剪切至新文件夹(批量删除指定文件也可以)
- JavaWeb学习笔记(一)---Web相关知识和HTTP协议
- 华农java实验7_华南农业大学java实验
- C#微信网页授权登录(NET MVC)
- php tp5什么是多模块,TP5单入口多域名多模块设置(各端分离)
- Python爬虫实战之二 - 基于Scrapy框架抓取Boss直聘的招聘信息
- <2021SC@SDUSC>【Overload游戏引擎】代码下载及安装配置
- kubernetes 中 calico 组件的 calicoctl 工具的使用示例及 BGP 相关配置