retrival and clustering : week 4 GMM & EM 笔记

华盛顿大学 机器学习 笔记。

k-means的局限性

  k-means 是一种硬分类(hard assignment)方法,例如对于文档分类问题,k-means会精确地指定某一文档归类到某一个主题,但很多时候硬分类并不能完全描述这个文档的性质,这个文档的主题是混合的,这时候需要软分类(soft assignment)模型。

  k-means 缺陷:(1)只关注聚类中心的表现。(2)聚类区域形状必须为对称圆形/球形,轴平行。

  对于聚类区域大小不一、轴不平行、聚类空间重叠等情况,k-means 缺陷显著。

        

混合模型的优点:

  1.软分类(例如,主题 54%“世界新闻”,45% “科学”, 1% “体育”)

  2.关注聚类区域形状而不只是中心

  3.每个聚类的权重(weights)可学习

高斯混合模型(GMM)

(1) 高斯函数描述聚类分布

  高斯混合模型假定每个聚类可以用一个高斯分布函数N(x|μ ,Σ)描述,如图

        

  描述聚类的参数有三个, { π, μ , Σ },其中,π 为聚类 的权重(weight),μ为 聚类的平均值(mean),Σ 为聚类的协方差(covariance.

  高斯混合模型概率分布:

      

  如何理这个解概率分布模型,以计算点xi属于聚类k的概率为例。

(2)如何计算xi 属于聚类k 的概率

   贝叶斯公式

         

    假设从数据集中随机抽取一个数据点,考虑以下几种情况:

        A  = 抽到的点属于聚类k

        B  = 抽到点xi

        B|A = 已知抽取的点属于聚类k 中, 抽到点xi

        A|B = 已知抽到点xi, 抽取的点属于聚类k

     P(A|B)其实等价于”点xi属于聚类k”的概率。

    接下来求P(A)、P(B)、P(B|A),通过贝叶斯公式可求P(A|B)。

    

  A  = 抽到的点属于聚类k

  P(A):从数据集中随机抽取一个点,恰好抽到聚类k中的点的概率。

      (其中,所有聚类权重之和为1,即 ,m为聚类数量)

   即

            

 

  B|A = 已知抽取的点属于聚类k,中, 抽到点xi

    P(B|A):转换为从聚类k中随机抽一个点,恰好抽到点xi的概率。

  GMM模型假设每个聚类中数据点服从高斯分布:

      

  即

      

     B  = 抽到点xi

  P(B):从数据集中随机抽取一个点,恰好抽到点xi的概率。

  这种情况下,抽到的点归属于哪个/些聚类未知,考虑到:

     如果已知抽到的点属于哪些聚类,这个概率可以按照P(B|A)的公式算。

     从数据集中随机抽点,抽到的点属于某个聚类的概率,可以按照P(A)的公式计算。

   使用用条件概率公式计算:

    

  这就是就是GMM模型的概率分布模型。

  点xi属于聚类k的概率,即后验概率为:

    

  即

   

(3)评估GMM模型优劣的方法——似然性

  首先明确隐变量:

  假设整个数据集是从符合这个GMM模型的大样本中随机抽取点构成的,每次抽取的数据记为 xi(i = 1,2,…,N, 数据集中一共N个点),对于第i次抽取的点,此时xi是已知的,而 xi属于哪个聚类未知,以隐变量γ表示,其中

      

  γ为随机变量。则变量的完全数据为

     

  

  似然函数表示的是,在当前GMM模型的参数下,以上述方法形成的数据集,恰好构成了原本的数据集的概率。

  似然函数计算式:

      

  其中多维高斯分布函数(维数为dim):

    

  实际应用中常常使用对数似然函数:

    

EM算法

  EM算法(expectation maximization, 期望最大化),计算GMM模型分两步:

      1. E- step: 根据当前GMM模型的参数,计算(estimate)对数似然性的期望值

      2. M-step: 求使似然性(likelihood)期望最大的新的模型参数

E-step:

  对数似然性表达式:

   

  求期望要先明确一件事,随机变量是什么?

        隐变量γ

  

  

隐变量的期望称为聚类k对xi的响应度(responsibility)。记为

          

考虑到表示的意义是,xi是否属于聚类k。因此的期望就是在当前模型参数下,xi属于聚类k的概率,即

       

带入原式得:

  

def log_sum_exp(Z):
    """ Compute log(\sum_i exp(Z_i)) for some array Z."""
    return np.max(Z) + np.log(np.sum(np.exp(Z - np.max(Z))))

def loglikelihood(data, weights, means, covs):
    """ Compute the loglikelihood of the data for a Gaussian mixture model. """
    num_clusters = len(means)
    num_dim = len(data[0])
    num_data = len(data)
    resp = compute_responsibilities(data, weights, means, covs)

    log_likelihood = 0
    for k in range(num_clusters):

        Z = np.zeros(num_clusters)
        for i in range(num_data):

            # Compute (x-mu)^T * Sigma^{-1} * (x-mu)
            delta = np.array(data[i]) - means[k]
            exponent_term = np.dot(delta.T, np.dot(np.linalg.inv(covs[k]), delta))

            Z[k] += np.log(weights[k])
            Z[k] -= 1/2. * (num_dim * np.log(2*np.pi) + np.log(np.linalg.det(covs[k])) + exponent_term)
            Z[k] = resp[i][k]* Z[k]

        log_likelihood += log_sum_exp(Z)

    return log_likelihood

M-step:

求使似然性期望最大的新的模型参数。似然性期望的公式:

  

用这个式子分别对 { π, μ , Σ }这几个参数求偏导数,并令偏导数为0,即可得到新的模型参数。

聚类k的新参数计算:

         

EM是一种 坐标上升(coordinate-ascent)算法,多次迭代直到对数似然函数的值不再有明显变化,得到局部最优解。

def EM(data, init_means, init_covariances, init_weights, maxiter=1000, thresh=1e-4):
    # Initialize
    means = init_means[:]
    covariances = init_covariances[:]
    weights = init_weights[:]
    num_data = len(data)
    num_dim = len(data[0])
    num_clusters = len(means)
    resp = np.zeros((num_data, num_clusters))
    log_likelihood = loglikelihood(data, weights, means, covariances)
    ll_trace = [log_likelihood]

    for it in range(maxiter):
        # E-step:
        resp = compute_responsibilities(data, weights, means, covariances)

        # M-step:
        # 更新 n(k),weight(k),mean(k),covariances(k)
        counts = compute_counts(resp)
        weights = compute_weights(counts)
        means = compute_means(data, resp, counts)
        covariances = compute_covariances(data, resp, counts, means)

        # 计算此次迭代之后的log likelihood
        ll_latest = loglikelihood(data, weights, means, covariances)
        ll_trace.append(ll_latest)

        # 收敛?
        if (ll_latest - log_likelihood) < thresh and ll_latest > -np.inf:
            break
        log_likelihood = ll_latest

    model = {‘weights‘: weights, ‘means‘: means, ‘covs‘: covariances, ‘loglik‘: ll_trace, ‘resp‘: resp}

    return model

原文地址:https://www.cnblogs.com/smartweed/p/8877854.html

时间: 2024-11-02 12:24:30

retrival and clustering : week 4 GMM & EM 笔记的相关文章

GMM学习笔记(EM算法求解)

提出混合模型主要是为了能更好地近似一些较复杂的样本分布,通过不断增加component个数,可以任意地逼近任何连续的概率分布,所以我们认为任何样本分布都可以用混合模型来建模.因为高斯函数具有一些很实用的性质,所以高斯混合模型被广泛地使用. GMM与kmeans类似,也是属于clustering,不同的是,kmeans是把每个样本点聚到其中一个cluster,而GMM是给出这些样本点到每个cluster的概率,每个component就是一个聚类中心. GMM(Gaussian Mixture Mo

关于”机器学习:概念与理解“系列

"机器学习:概念到理解"系列,我本着开放与共享(open and share)的精神撰写,目的是让更多的人了解机器学习的概念,理解其原理,学会应用.现在网上各种技术类文章很多,不乏大牛的精辟见解,但也有很多滥竽充数.误导读者的.这个系列对教课书籍和网络资源进行汇总.理解与整理,力求一击中的,通俗易懂.机器学习很难,是因为她有很扎实的理论基础,复杂的公式推导:机器学习也很简单,是因为对她不甚了解的人也可以轻易使用.我希望好好地梳理一些基础方法模型,输出一些真正有长期参考价值的内容,让更多

机器学习方法(一):线性回归Linear regression

开一个机器学习方法科普系列,也做基础回顾之用.学而时习之. content: linear regression, Ridge, Lasso Logistic Regression, Softmax Kmeans, GMM, EM, Spectral Clustering Dimensionality Reduction: PCA.LDA.Laplacian Eigenmap. LLE. Isomap(修改前面的blog) SVM C3.C4.5 Apriori,FP PageRank minH

机器学习方法:回归(一):线性回归Linear regression

开一个机器学习方法科普系列:做基础回想之用.学而时习之:也拿出来与大家分享.数学水平有限,仅仅求易懂,学习与工作够用.周期会比較长.由于我还想写一些其它的,呵呵. content: linear regression, Ridge, Lasso Logistic Regression, Softmax Kmeans, GMM, EM, Spectral Clustering Dimensionality Reduction: PCA.LDA.Laplacian Eigenmap. LLE. Is

Spark 1.5新特性介绍

一.DataFrame执行后端优化(Tungsten第一阶段) DataFrame可以说是整个Spark项目最核心的部分,在1.5这个开发周期内最大的变化就是Tungsten项目的第一阶段已经完成.主要的变化是由Spark自己来管理内存而不是使用JVM,这样可以避免JVM GC带来的性能损失.内存中的Java对象被存储成Spark自己的二进制格式,计算直接发生在二进制格式上,省去了序列化和反序列化时间.同时这种格式也更加紧凑,节省内存空间,而且能更好的估计数据量大小和内存使用情况.如果大家对这部

(转)Awesome Courses

Awesome Courses  Introduction There is a lot of hidden treasure lying within university pages scattered across the internet. This list is an attempt to bring to light those awesome courses which make their high-quality material i.e. assignments, lect

机器学习基础大纲

数学基础(2节课) 微积分 极限,e,导数,微分,积分 偏导数,方向导数,梯度 极值,多元函数极值,多元函数泰勒展开 无约束优化,约束优化 拉格朗日乘子,对偶问题 线性代数 矩阵,行列式,初等变换 线性相关,线性无关 秩,特征值,特征向量 正交向量.正交矩阵 矩阵分解 概率 随机变量,概率密度函数,分布函数 条件概率,全概率公式,贝叶斯公式 期望,方差 大数定理,中心极限定理 协方差,相关系数 常见概率分布,泊松分布 指数族分布,多元高斯分布 参数估计,矩估计,极大似然估计MLE 机器学习基本概

机器学习笔记(十)EM算法及实践(以混合高斯模型(GMM)为例来次完整的EM)

今天要来讨论的是EM算法.第一眼看到EM我就想到了我大枫哥,EM Master,千里马,RUA!!!不知道看这个博客的人有没有懂这个梗的.好的,言归正传,今天要讲的EM算法,全称是Expectation maximization,期望最大化.怎么个意思呢,就是给你一堆观测样本,让你给出这个模型的参数估计.我靠,这套路我们前面讨论各种回归的时候不是已经用烂了吗?求期望,求对数期望,求导为0,得到参数估计值,这套路我懂啊,MLE!但问题在于,如果这个问题存在中间的隐变量呢?会不会把我们的套路给带崩呢

GMM的EM算法实现

在聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut一文中我们给出了GMM算法的基本模型与似然函数,在EM算法原理中对EM算法的实现与收敛性证明进行了具体说明.本文主要针对怎样用EM算法在混合高斯模型下进行聚类进行代码上的分析说明. 1. GMM模型: 每一个 GMM 由 K 个 Gaussian 分布组成,每一个 Gaussian 称为一个"Component",这些 Component 线性加成在一起就组成了 GMM 的概率密