以nba球员数据学习聚类算法

本内容所有代码都在我的github上,喜欢的朋友可以点个赞
https://github.com/zxhjames/NBA_DataAnalysis

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:8794732c-e51e-41d3-baba-0749254b998e

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:5d8a6cc4-99b9-44b9-955b-00550af49f30

以nba球员数据学习聚类算法

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:0edd76cc-8f6f-4fbb-8731-0e17f6a7aa2a

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:1cf94a8f-64b2-490b-9ea3-2c6e76e21c50

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:1bfa7b0d-b94b-489c-a823-9a93b3669127

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:498b9d44-85a1-4642-aac8-2864f5bbe9fa

物以类聚,人以群分,世间万物都有相似的特征,人格特征,情感特征,形象特征等等,一张图片有很多个像素,我想要保持图片清晰度良好的情况下尽量减小图片的size,从而减少存储与通信消耗,便可以通过聚类去缩减像素,这就是图片压缩

以nba球员数据学习聚类算法

我喜欢看nba,今天就集合nba2013-2014赛季中部分球员的数据,来用聚类算法进行研究学习,数据在文末可下载

我们还是使用pandas对数据进行一些预处理

import pandas as pd
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
nba = pd.read_csv("nba_2013.csv",encoding='utf-8')
nba.head(3)

以nba球员数据学习聚类算法

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:ef720fdf-7b25-49a8-b45c-5b7c694d3b22

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:8c2dd5c0-5613-40f5-8344-b91c2b1d6372

以nba球员数据学习聚类算法

由于聚类是一种无监督的机器学习算法,也就是说,算法的初始化并不是人为控制的,这会对结果产生影响,这也是其与分类最大的区别,分类的输入是认为可控的,我们只需要定义好分类的类别,然后输入数据得出算法计算出的结果即可,而聚类则需要在不断学习重复的过程中发掘最优解的,他并没有先验知识的输入。主流的基于划分的方法,简单理解就是,想象你有一堆散点需要聚类,想要的聚类效果就是”类内的点都足够近,类间的点都足够远”。首先你要确定这堆散点最后聚成几类,然后挑选几个点作为初始中心点,再然后依据预先定好的启发式算法给数据点做迭代重置,直到最后到达”类内的点都足够近,类间的点都足够远”的目标效果。也正是根据所谓的”启发式算法”,形成了k-means算法及其变体包括kmedoids、kmodes、kmedians、kmeans等算法。先来看下最简单的一个划分类算法, KMeans

KMeans算法理解起来非常简单,算法步骤主要分为以下几步

  • 随机地选择k个对象,每个对象初始地代表了一个簇的中心
    [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:afa7beb9-709a-4d40-bc04-3670cba71911
    [En]

    [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:c051499f-2aee-4f76-9143-7314efc5393d

    [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:778d80cd-e032-4e0b-9185-f2cda9ad1bd7

    [En]

    [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:dde74d29-cbe3-45f2-aac2-231478609c2c

  • 不断重复2、3,直到准则函数收敛

由于数据集的特征较多,如果全部都拿来用,必然是维度爆炸,喜欢看球的朋友都知道,评估一个nba球员的综合能力,大多数是看场均得分,细分之外,如果是控卫,会看重他的助攻失误比,如果是后卫和前锋,还会看重投篮命中率等综合素质,如果是中锋,那不用说,肯定是篮板球,其实打过2k系列游戏的朋友都知道,一些模式下,比赛还会计算球员的正负效率值,这些计算方式都比较专业,再次不再赘述

以nba球员数据学习聚类算法

添加主特征

提取出所有控卫的信息
nba['场均得分'] = nba['赛季总得分'] / nba['出场数']
nba['场均出场时间'] = nba['出场时间'] / nba['出场数']
nba['场均失误'] = nba['总失误'] / nba['出场数']

拷贝出主要特征数据集,并检测一下有没有异常值

拷贝一份原始数据
dataset = nba[['姓名','位置','年龄','场均得分','场均出场时间','场均失误']]
print(dataset)

以nba球员数据学习聚类算法
dataset.shape
显示数据的规格
dataset.info()
去除空值
dataset.isnull().sum()

以nba球员数据学习聚类算法

在这里不需要用出场数和首发数的原因是,nba球员往往会因为伤病,违规,或者是篮协原因而影响出场数目,这个指标我们不能考虑

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:a4f599df-bd14-4291-8c40-45e75b9e82d4

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:4ae2fcb7-bb52-40d1-bcf3-d76a2f8dc671

newdataset = dataset[['场均得分','场均出场时间','场均失误']]
newdataset
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler_df = scaler.fit_transform(newdataset)

以nba球员数据学习聚类算法

看一下立体的分布图

ax = plt.subplot(111,projection='3d')
plt.scatter(X[:,0], X[:,1],X[:,2] ,c='y')
ax.set_zlabel('error/g')
ax.set_ylabel('time/g')
ax.set_xlabel('score/g')
plt.show()

以nba球员数据学习聚类算法

现在大致还不好区分,使用KMeans分别查看簇群数从1到10之间的聚类情况,循环迭代出每一个簇群数下的三维图,经过实验发现,簇群数为3或4时效果最好

KMeans聚类
from sklearn.cluster import KMeans
wcss=[]
定义簇群为10
for i in range(1,11):
    y_pred = KMeans(n_clusters=i, random_state=9).fit_predict(X)
    wcss.append(kmeans.inertia_)
    ax = plt.subplot(1,1,1,projection='3d')
    plt.scatter(X[:,0], X[:,1],X[:,2] ,c=y_pred)
    ax.set_zlabel('error/g')
    ax.set_ylabel('time/g')
    ax.set_xlabel('score/g')
    ax.set_title(i)
    plt.show()

以nba球员数据学习聚类算法

总结下kmeans实现的整个过程,理解起来就是基于各个簇群结点之间对于距离的度量,通过可视化簇群数值的收敛过程,下面是算法的过程

以nba球员数据学习聚类算法

这里k值就代表着最优簇群数,选择最优k值看的是sse(误差平方和)这个指标

以nba球员数据学习聚类算法其中,Ci是第i个簇,p是Ci中的样本点,mi是Ci的质心(Ci中所有样本的均值),SSE是所有样本的聚类误差,代表了聚类效果的好坏,手肘法的核心思想是:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。并且,当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。当然,这也是该方法被称为手肘法的原因。
可视化最优的k值
print([i for i in  wcss])
plt.plot(range(1,11),wcss)
plt.title('The Elbow Method')
plt.xlabel('no of clusters')
plt.ylabel('wcss')
plt.show()

以nba球员数据学习聚类算法

模型的建立的代码如下

kmeansmodel = KMeans(n_clusters= 4, init='k-means++', random_state=0)
y_kmeans= kmeansmodel.fit_predict(X)
print(y_kmeans)

以nba球员数据学习聚类算法
ax = plt.figure().add_subplot(111, projection = '3d')
ax.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], X[y_kmeans == 0, 2], c = 'r', marker = 'o') #点为红色三角形
ax.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], X[y_kmeans == 1, 2], c = 'y', marker = 'o') #点为红色三角形
ax.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], X[y_kmeans == 2, 2], c = 'b', marker = 'o') #点为红色三角形
ax.scatter(X[y_kmeans == 3, 0], X[y_kmeans == 3, 1], X[y_kmeans == 3, 2], c = 'g', marker = 'o') #点为红色三角形
#设置坐标轴
ax.set_xlabel('score/g')
ax.set_ylabel('time/g')
ax.set_zlabel('error/g')
#显示图像
plt.show()

以nba球员数据学习聚类算法

聚类出的效果还是可以的,接下来将y_kmeans(聚类出的结果)代入到原数据集中,看下算法的效果如何

将类别合并到原数据集合中
cluster_result = pd.DataFrame(y_kmeans)
result = pd.concat([dataset,cluster_result],axis=1)
result.head(10)

以nba球员数据学习聚类算法

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:ab4d0c5a-1720-47f8-847c-09b2427e99ad

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:ad7ef300-3456-45c3-aba2-671078249efe

result.sort_values(0,inplace=True)

1号簇群(当年的明星球员) 当时老科还在~

以nba球员数据学习聚类算法

0号簇群(板凳球员)

以nba球员数据学习聚类算法

2号簇群(强势替补+第六人)

以nba球员数据学习聚类算法

3号簇群(饮水机管理员)

以nba球员数据学习聚类算法

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:2684ea76-1794-4623-9c17-8f313b25e128

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:b55cb557-d251-4f14-99ad-193039f0a1ed

以nba球员数据学习聚类算法

参考资料

  • https://baike.baidu.com/item/K均值聚类算法
  • https://lab.datafountain.cn
  • https://blog.csdn.net/u010062386/article/details/82499777
  • 吴恩达机器学习 https://www.bilibili.com/video/BV164411S78V?p=77

数据集

  • 数据集在我的csdn上,直接进链接下载即可 https://download.csdn.net/download/qq_37756310/18470150

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:a906a4da-02e8-496f-8a36-aaa35d8f66bc

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:77e92b24-df23-4874-b53c-516472cb417c

以nba球员数据学习聚类算法

点个

在看

你最好看

Original: https://blog.csdn.net/qq_37756310/article/details/116531227
Author: x.h.z
Title: 以nba球员数据学习聚类算法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/560710/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球