数据挖掘——EM聚类(王者英雄聚类)

聚类思维导图整理:
在这里插入图片描述
实战:对王者英雄进行聚类

import pandas as pd 
import csv 
import matplotlib.pyplot as plt 
import seaborn as sns
from sklearn.mixture import GaussianMixture
from sklearn.preprocessing import  StandardScaler

#数据加载,避免中文乱码问题:
data_ori=pd.read_csv("./heros.csv",encoding="gb18030")
features = [u'最大生命',u'生命成长',u'初始生命',u'最大法力', 
            u'法力成长',u'初始法力',u'最高物攻',u'物攻成长',
            u'初始物攻',u'最大物防',u'物防成长',u'初始物防', 
            u'最大每5秒回血', u'每5秒回血成长', u'初始每5秒回血',
            u'最大每5秒回蓝', u'每5秒回蓝成长', u'初始每5秒回蓝', 
            u'最大攻速', u'攻击范围']
data=data_ori[features]

#对英雄属性之间的关系进行可视化分析:
# 设置 plt 正确显示中文
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False

#用热力图呈现英雄之间的关系:
corr=data[features].corr()
plt.figure(figsize=(14,14))
sns.heatmap(corr,annot=True)
plt.show()

#相关性大的属性保留一个,因此可以对属性进行降维:
features_remain=[u'最大生命', u'初始生命', u'最大法力', u'最高物攻',
                 u'初始物攻', u'最大物防', u'初始物防', u'最大每5秒回血',
                 u'最大每5秒回蓝', u'初始每5秒回蓝', u'最大攻速', u'攻击范围']

data = data_ori[features_remain]
data[u'最大攻速'] = data[u'最大攻速'].apply(lambda x: float(x.strip('%'))/100)
data[u'攻击范围']=data[u'攻击范围'].map({'远程':1,'近战':0})

                   
#采用Z-Score规范化数据,保证每个特征维度的数据均值为0,方差为1:
ss=StandardScaler()
data=ss.fit_transform(data)
#构造聚类GMM:
gmm=GaussianMixture(n_components=30,covariance_type="full")
gmm.fit(data)
#训练数据:
prediction=gmm.predict(data)
print(prediction)
data_ori.insert(0,"分组",prediction)
data_ori.to_csv("./hero_out.csv",index=False,sep=",")

输出:
在这里插入图片描述
[ 7 22 12 5 2 2 9 12 24 22 10 22 5 25 4 10 23 5 18 28 8 3 28 3
3 3 28 19 26 20 25 20 29 26 20 20 26 27 11 17 29 26 26 20 1 29 22 11
22 1 6 14 18 15 15 7 7 22 21 2 7 18 13 7 16 14 14 0 19]
在这里插入图片描述

#聚类结果的评估方式:指数分数越高,聚类效果越好;
from sklearn.metrics import calinski_harabaz_score
print(calinski_harabaz_score(data,prediction))

输出:21.37393133378639
结果分析:聚类的特点是同组类别之间属性相近,不同类别属性值差异大;因此擅长使用张飞角色的,可以尝试程咬金这个英雄 ,这样就可以在自己喜欢的英雄被别人选中的时候,有备选的英雄。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值