5--高斯混合聚类、学习向量量化算法 降维与度量学习

聚类与降维算法详解:LVQ、GMM、DBSCAN与层次聚类
本文深入探讨了四种聚类算法——向量量化(LVQ)、高斯混合模型(GMM)、DBSCAN和层次聚类(AGNES),并介绍了它们在不同数据集上的应用和效果。同时,提到了降维方法,如k近邻(KNN)、主成分分析(PCA)以及流形学习中的Isomap和LLE。通过对半圆形数据集的实验,展示了不同聚类算法的性能差异,其中DBSCAN在发现任意形状聚类和异常点检测方面表现出优势。

本周学习内容:

  1. 继续学习高斯混合聚类、学习向量量化算法等聚类算法
  2. 学习降维与度量学习部分的内容

1 聚类算法

1.1学习向量量化算法(LVQ learning vectorquantization)

   该算法试图找到一组原型向量来刻画聚类结构,LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。该算法的学习流程如下:

  

  依旧使用西瓜数据集4.0,并假设第9-21号样本的类别标记为c2,其余数据类别标记为c1。这里是要找到q=5个原型向量来对数据进行聚类划分。具体代码如下所示:

for i in range(400):
    # 从样本集中随机选取一个样本
    j = random.randint(0, len(midu) - 1)
    dis = [np.linalg.norm(np.array([midu[j], hantanglv[j]]) - p[0]) for p in P]
    # 找出最近的原型向量
    minDis = dis.index(min(dis))
    # 更新原型向量
    if P[minDis][1] == mark[j]:
        p_ = P[minDis][0] + learningRate * (np.array([midu[j], hantanglv[j]]) - P[minDis][0])
    else:
        p_ = P[minDis][0] - learningRate * (np.array([midu[j], hantanglv[j]]) - P[minDis][0])
    P[minDis][0] = p_

  部分轮迭代后的结果如图1所示:

                                                          图1 LVQ算法迭代400轮后

1.2 高斯混合聚类(GMM Gaussian Mixture Model)

   从原型聚类的角度来看,高斯混合聚类时采用概率模型(高斯分布)对原型进行刻画,簇划分由原型对应后验概率确定。基本思想是用多个高斯分布函数去近似任意形状的概率分布,所以GMM就是由多个单高斯密度分布(Gaussi an)组成的,这些单高斯密度分布线性加和即为 GMM 的概率密度函数。

    该算法聚类过程:1)首先确定K值(模型的个数),并随机初始化每个簇的高斯分布参数。2)计算每个数据点属于每个高斯模型的概率。3)计算相应参数使得数据点的概率最大化,使用数据点概率的加权来计算新的参数,权重即为属于该簇的概率。4)重复迭代2和3直到收敛。

    依旧使用西瓜数据集4.0来进行k=3的聚类,其中通过EM算法对参数进行更新的代码如下:

# EM算法, 迭代更新 alpha
        for i in range(self.iter):
            gamma = computeGamma(data, miu, sigma, alpha, multiGaussian)
            alpha = np.sum(gamma, axis=0) / n_samples  # 纵向求和再除以样本数,即在每个聚类中,概率的平均值

            # 更新 miu
            for j in range(self.n_clusters):
                miu[j] = np.sum(data * gamma[:, j].reshape((n_samples, 1)), axis=0) / np.sum(gamma, axis=0)[j]
                sigma[j] = 0

                # 更新 sigma
                for k in range(n_samples):
                    sigma[j] += (data[k].reshape((1, n_features)) - miu[j]).T.dot(
                        (data[k] - miu[j]).reshape((1, n_features))) * gamma[k, j]
                sigma[j] = sigma[j] / np.sum(gamma, axis=0)[j]

    在迭代50轮后的聚类结果如图2所示,其中各高斯混合成分的均值向量用x来表示。

 

图2 高斯混合聚类50轮后的聚类结果

1.3 密度聚类(density-based clustering DBSCAN

从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。DBSCAN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值