如何用 EM 算法对王者荣耀数据进行聚类

您所在的位置:网站首页 王者荣耀数据可视化怎么设置的 如何用 EM 算法对王者荣耀数据进行聚类

如何用 EM 算法对王者荣耀数据进行聚类

2024-07-15 18:19| 来源: 网络整理| 查看: 265

EM 的英文是 Expectation Maximization,所以 EM 算法也叫最大期望算法。 在这里插入图片描述 举个栗子🙌:

将一份炒菜等分给两个人,实际上最终我们想要的是碟子 A 和碟子 B 中菜的份量,你可以把它们理解为想要求得的模型参数。然后我们通过 EM 算法中的 E 步来进行观察,然后通过 M 步来进行调整 A 和 B 的参数,最后让碟子 A 和碟子 B 的参数不再发生变化为止。

EM 算法可以理解成为是一个框架,在这个框架中可以采用不同的模型来用 EM 进行求解。常用的 EM 聚类有 GMM 高斯混合模型和 HMM 隐马尔科夫模型。

K-Means和EM算法比较 相比于 K-Means 算法,EM 聚类更加灵活,因为 K-Means 是通过距离来区分样本之间的差别的,且每个样本在计算的时候只能属于一个分类,称之为是硬聚类算法。而 EM 聚类在求解的过程中,实际上每个样本都有一定的概率和每个聚类相关,叫做软聚类算法。

EM聚类的工作原理 将潜在类别当做隐藏变量,样本看做观察值,把聚类问题转化为参数估计问题,最终把样本进行聚类。

实战 流程:数据探索->数据清理->特征选择->模型训练->模型评估

# -*- coding: utf-8 -*- 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('C:/Users/1/Downloads/EM_data-master/EM_data-master/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 #用来正常显示负号 # 用热力图呈现features_mean字段之间的相关性 corr = data[features].corr() plt.figure(figsize=(14,14)) # annot=True显示每个方格的数据 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) # 将分组结果输出到CSV文件中 data_ori.insert(0, '分组', prediction) data_ori.to_csv('C:/Users/1/Downloads/EM_data-master/EM_data-master/hero_out.csv', index=False, sep=',') #聚类结果的评估 from sklearn.metrics import calinski_harabaz_score print(calinski_harabaz_score(data, prediction))

运行结果:得到hero_out.csv文件(部分如下) 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3