当前位置: 首页 > news >正文

帝国cms仿站工具优化营商环境心得体会1000字

帝国cms仿站工具,优化营商环境心得体会1000字,wordpress调用图文列表,企业平台网站建设方案EM算法(Expectation-Maximization Algorithm)是一种基于迭代优化的聚类算法,用于在无监督的情况下将数据集分成几个不同的组或簇。EM算法是一种迭代算法,包含两个主要步骤:期望步骤(E-step)和最…

EM算法(Expectation-Maximization Algorithm)是一种基于迭代优化的聚类算法,用于在无监督的情况下将数据集分成几个不同的组或簇。EM算法是一种迭代算法,包含两个主要步骤:期望步骤(E-step)和最大化步骤(M-step)。

 

在EM算法中,假设我们有一个数据集,但是我们不知道数据集中的数据是如何分布的。我们希望将这个数据集分成K个不同的簇,其中每个簇代表一种不同的数据分布。每个簇都由其均值和协方差矩阵表示。EM算法的主要思想是:在开始时随机地初始化这些簇,然后通过E-step和M-step交替迭代来优化簇的均值和协方差矩阵,直到收敛。

具体来说,EM算法的工作原理如下:

  1. 初始化:随机选择K个中心点作为初始的簇中心,并计算它们的均值和协方差矩阵。

  2. E-step:对于每个数据点,计算其属于每个簇的概率(即责任因子),根据这些概率对每个点进行分组。

  3. M-step:对于每个簇,使用加权最小二乘法计算其新的均值和协方差矩阵。

  4. 重复E-step和M-step,直到收敛(即责任因子和中心点的变化小于预定义的阈值)。

  5. 输出最终的簇中心和它们对应的均值和协方差矩阵,以及每个数据点所属的簇。

使用EM算法完成王者荣耀英雄聚类任务

上面介绍了EM 算法的概念,接下来看个简单的Demo代码,下面的Demo代码是读取原始的csv文件数据,然后使用EM算法进行聚类处理。该文件中记录了不同的hero在最大生命、生命长度等特征上的值。可以看到Demo代码中主要是三个步骤,步骤一:通过热力图选取部分特性,实际就是降纬处理,步骤二:对数据进行归一化处理,步骤三:创建GaussianMixture,传入数据进行无监督训练,然后输出分类结果。

# -*- 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('./em/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秒回蓝'
]
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秒回蓝'
]
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('./hero_out.csv', index=False, sep=',')from sklearn.metrics import calinski_harabaz_scoreprint(calinski_harabaz_score(data, prediction))

下图是分类后的结果,详细信息如下所示:

 在上面的Demo代码中使用到了GaussianMixture方法,该方法是一个用于拟合高斯混合模型(GMM)的类,Demo代码中传入了分类的数量和协方差类型。该方法实际包含很多输入参数,各个参数含义如下所示:

  • n_components:GMM中的分类数量,默认为1。
  • covariance_type:GMM中各个分量的协方差类型。可选的值为"full"(完全协方差矩阵)、"tied"(相同的协方差矩阵)、"diag"(对角协方差矩阵)和"spherical"(各向同性的协方差矩阵)。默认为"full"
  • tol:EM算法的收敛容差,默认为1e-3。
  • reg_covar:协方差矩阵对角线上的正则化参数。该参数用于确保协方差矩阵是半正定的,以避免数值计算的问题。默认为0。
  • max_iter:EM算法的最大迭代次数,默认为100。
  • n_init:使用不同的初始化策略进行训练的次数。模型将选择具有最佳性能的初始化策略。默认为1。
  • init_params:用于控制初始化策略的参数。默认为"kmeans",表示使用K-Means算法初始化GMM的均值和协方差矩阵,也可以设置为一个元组,例如("random", {"means": means_init, "covars": covars_init}),表示使用随机值初始化GMM的均值和协方差矩阵。
  • weights_init:GMM各个分量的权重初始化值。默认为None,表示使用初始化策略(即init_params)来初始化权重。
  • means_init:GMM各个分量的均值初始化值。默认为None,表示使用初始化策略(即init_params)来初始化均值。
  • precisions_init:GMM各个分量的协方差矩阵的逆矩阵初始化值。默认为None,表示使用初始化策略(即init_params)来初始化协方差矩阵。
  • random_state:控制随机数生成器的种子,以便在多次运行中得到相同的结果。默认为None
  • warm_start:如果为True,则使用上一次拟合的结果作为初始化值,并继续从上一次停止的地方训练。默认为False
  • verbose:控制训练过程中的详细程度。默认为0,表示不输出任何信息。
  • verbose_interval:控制训练过程中输出信息的频率。默认为10,表示每迭代10次输出一次信息。

上面的init_params参数控制初始化策略,默认是kmeans,即用K-Means算法初始化GMM的均值和协方差矩阵,前面介绍过K-Means算法,该算法也可以完成聚类任务,那么EM算法和K-means算法有什么区别呢?

EM算法与K-Means算法区别

  1. 簇形状:K-means算法假定每个簇都是由一个中心点和周围的数据点组成的球形簇,而EM算法则假定每个簇可以由任意形状的高斯分布表示。

  2. 簇数量:在K-means算法中,需要预先指定要划分的簇数量K,而在EM算法中则不需要预先指定,可以自动确定最佳的簇数。

  3. 算法原理:K-means算法通过计算每个数据点到簇中心的距离,将数据点分配到最近的簇中。而EM算法则是基于最大似然估计,利用期望最大化算法(Expectation-Maximization Algorithm)来优化簇的均值和协方差矩阵。

  4. 鲁棒性:K-means算法对离群点非常敏感,因为它使用平方误差和来计算距离,而EM算法则对离群点的影响较小,因为它使用高斯分布模型来建模每个簇。

  5. 数据类型:K-means算法适用于数值型数据,而EM算法也适用于混合数据类型,比如文本和图像数据。

  6. 算法复杂度:K-means算法的时间复杂度为O(nki),其中n是数据点的数量,k是簇的数量,i是迭代次数。而EM算法的时间复杂度通常比K-means算法更高,因为它需要估计每个簇的均值和协方差矩阵,这通常需要更多的计算量。

总的来说,EM算法和K-means算法都是用于无监督的聚类问题的算法。但K-means算法更简单,更快速,对于非球形簇和离群点的处理不如EM算法。EM算法更灵活,能够处理更多的数据类型和簇形状,但是通常需要更多的计算时间。

http://www.ds6.com.cn/news/87764.html

相关文章:

  • 请人制作一个网站需要多少钱武汉排名seo公司
  • 百度禁止seo推广网店seo关键词
  • 网页设计实验报告步骤seo优化内容
  • 网站建设gzzctyi安卓系统优化大师
  • 域名不变修改网站怎么做新的营销模式有哪些
  • 公司网站建设ppt建站服务
  • 网站经营跟备案不符网站关键词推广
  • asp.net做报名网站东莞今天发生的重大新闻
  • 自已建网站微信登录推广赚佣金的平台
  • 沈阳网站优化哪家好高端网站建设公司排行
  • 做内贸b2b的网站什么是网络营销推广
  • 能自己做网站吗建网站费用
  • 有哪些官方网站做的比较好自己可以做网站推广吗
  • 企业网站制作深圳广告投放都有哪些平台
  • 网站建设应具备的技能长沙网站seo方法
  • 做网站的生产方式网站品牌推广策略
  • 网站 提交入口网站加速
  • 石家庄做网站公司哪家好友情链接检测方法
  • 做网站违法seo网站权重
  • 网站开发设计方案书关键词你们都搜什么
  • 网站建设佰首选金手指七网推怎么做最有效
  • 淮安市建设局网站推广公司品牌
  • 电子商务网站开发实训总结报告蜜雪冰城推广软文
  • 做会员卡的网站在线制作廊坊网络推广优化公司
  • 帮别人做违法网站会怎么样如何快速搭建一个网站
  • 华为荣耀商城免费的seo
  • soho怎么做网站百度关键词推广费用
  • 建设网站需要哪些编程设计网站接单
  • 西安网站制作设计找哪家性能优化工具
  • 做网站用什么语言最新军事头条