文章目录
EM聚类(上):如何将一份菜等分给两个人?
EM算法的工作原理
最大似然估计,就是利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值。
EM 算法是一种求解最大似然估计的方法,通过观测样本,来找出样本的模型参数
我们举一个投掷硬币的例子,假设我们有A和B枚硬币,我们每波投掷10次,一共投5波,统计正面的次数
- 硬币A正面几率是0.45
- 硬币B正面概率是0.8
但是如果我们不知道投掷的是哪个硬币呢,我们如何算出A和B的概率?
这里我们就需要先假设A是0.5 B是0.9,然后我们看看正面次数是5次,硬币A和硬币B的概率是啥?
A正面5次的几率是:
B正面5次的几率是:
所以实验1可能是硬币A,同理,整个实验是A,A,B,B,A
EM 聚类的工作原理
EM 就好像炒菜,做汤,盐多了放水,味淡了再放盐,直到合适为止。然后,就能得出放盐和水的比例(参数)
因为 K-Means 是通过距离来区分样本之间的差别的,且每个样本在计算的时候只能属于一个分类,称之为是硬聚类算法。而 EM 聚类在求解的过程中,实际上每个样本都有一定的概率和每个聚类相关,叫做软聚类算法
在 EM 这个框架中,E 步骤相当于是通过初始化的参数来估计隐含变量。M 步骤就是通过隐含变量反推来优化参数。最后通过 EM 步骤的迭代得到模型参数。
EM,聚类的个数是已知的
EM聚类(下):用EM算法对王者荣耀英雄进行划分
如何使用EM工具包
在 Python 中有第三方的 EM 算法工具包。由于 EM 算法是一个聚类框架,所以你需要明确你要用的具体算法,比如是采用 GMM 高斯混合模型,还是 HMM 隐马尔科夫模型
from sklearn.mixture import GaussianMixture
创建 GMM 聚类
gmm = GaussianMixture(n_components=1, covariance_type=‘full’, max_iter=100)
- n_components 即高斯混合模型的个数,也就是我们要聚类的个数
- covariance_type 代表协方差类型
- max_iter 代表最大迭代次数 默认是100
然后我们训练和预测,这是因为聚类是无监督学习,你不需要事先指定聚类的结果,也无法基于先验的结果经验来进行学习。只要在训练过程中传入特征值矩阵,机器就会按照特征值矩阵生成聚类器,然后就可以使用这个聚类器进行聚类了
如何用 EM 算法对王者荣耀数据进行聚类
我们先看看数据:
从上图中,一个英雄有很多属性,我们可以把相关性特别强的属性只保留一个(比如“最大生命”“生命成长”和“初始生命”),然后用 Z-Score进行规范化(比如“最大攻速”这个属性值是百分数,不适合做矩阵运算),最后用sklearn 中的 GaussianMixture 类进行聚类
我们采用了 GMM 高斯混合模型,并将结果输出到 CSV 文件中:
关联规则挖掘(上):如何用Apriori发现用户购物规则
搞懂关联规则中的几个概念
可以从消费者交易记录中发掘商品与商品之间的关联关系
我举一个超市购物的例子,下面是几名客户购买的商品列表:
什么是支持度:
它指的是某个商品组合出现的次数与总次数之间的比例。支持度越高,代表这个组合出现的频率越大
“牛奶 + 面包”出现了 3 次,那么这 5 笔订单中“牛奶 + 面包”的支持度就是 3/5=0.6
什么是置信度:
就是说在 A 发生的情况下,B 发生的概率是多少
在 4 次购买了牛奶的情况下,有 2 次购买了啤酒,所以置信度 (牛奶→啤酒)=0.5
什么是提升度呢:
我们在做商品推荐的时候,重点考虑的是提升度,因为提升度代表的是“商品 A 的出现,对商品 B 的出现概率提升的”程度
提升度 (A→B)= 置信度 (A→B)/ 支持度 (B)
这个公式是用来衡量 A 出现的情况下,是否会对 B 出现的概率有所提升
- 提升度 (A→B)>1:代表有提升;
- 提升度 (A→B)=1:代表有没有提升,也没有下降;
- 提升度 (A→B)<1:代表有下降。
Apriori 的工作原理
商品用 ID 来代表,牛奶、面包、尿布、可乐、啤酒、鸡蛋的商品 ID 分别设置为 1-6
我们首先要