KMeans算法与GMM混合高斯聚类

这篇具有很好参考价值的文章主要介绍了KMeans算法与GMM混合高斯聚类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、K-Means

K-Means是GMM的特例(硬聚类,基于原型的聚类)。假设多元高斯分布的协方差为0,方差相同。
 
K-Means算法思想
对于给定的样本集,按照样本间的距离,将样本集划分为K个簇。
簇内的点尽量紧密连接,而簇间的距离尽量的大。
KMeans算法与GMM混合高斯聚类
本质上是个组合优化问题, 类似于将N个球分配到K个箱子。
启发式求解(局部最优解)
  1. 初始K个类(簇心)
  2. E步:对每个样本,计算到K个类的欧式距离,并分配类标签 O(kNd)
  3. M步:基于类内的样本,以样本均值更新类(均值最小化,类到类内样本的误差) O(Nd)
  4. 重复2-3步,直到聚类结果不变化或收敛
迭代次数为L,N个d维样本,时间复杂度 O(kLNd)
 
聚类前置处理:
特征归一化,剔除缺失值,异常值
 
K-Means的优点:
  1)基于原型的聚类,实现简单收敛速度快。
  2)聚类效果较优。
  3)算法的可解释度比较强。
  4)主要需要调参的参数仅仅是簇数k。
K-Means的缺点:
  1)K值的选取不好把握(需要多次运行看轮廓系数, 肘部法;用层次聚类确定K值)
  2)对于不是凸的数据集比较难收敛
  3)如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。
  4) 采用迭代方法,得到的结果只是局部最优(本身是个NP-hard问题,多项式系数; 聚类结果受初始簇心影响)
  5) 对噪音和异常点比较的敏感。
 
# 基于Cursor生成的代码
import numpy as np

def k_means(X, k, max_iters=100):
    # randomly initialize centroids
    centroids = X[np.random.choice(range(len(X)), k, replace=False)]
    
    for i in range(max_iters):
        # calculate distances between each point and each centroid
        distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
        
        # assign each point to the closest centroid
        labels = np.argmin(distances, axis=0)
        
        # update centroids to be the mean of the points assigned to them
        for j in range(k):
            centroids[j] = X[labels == j].mean(axis=0)
    
    return centroids, labels

d = 3
k = 3
X = np.random.rand(100, 3)
centroids, labels = k_means(X, k, max_iters=100)

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')

ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=labels, cmap='viridis')
ax.scatter(centroids[:, 0], centroids[:, 1], centroids[:, 2], marker='*', s=300, c='r')

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()

 

二、GMM

⾼斯分布的线性组合可以给出相当复杂的概率密度形式。
通过使⽤⾜够多的⾼斯分布,并且调节它们的均值和⽅差以及线性组合的系数,⼏乎所有的连续概率密度都能够以任意的精度近似。
KMeans算法与GMM混合高斯聚类
对3个高斯分布的概率密度函数进行加权。考
 
虑K个⾼斯概率密度的叠加,形式为:
KMeans算法与GMM混合高斯聚类
KMeans算法与GMM混合高斯聚类
参数πk被称为混合系数。
 
混合⾼斯(mixture of Gaussians),每⼀个⾼斯概率密度N (x | µk, Σk)被称为混合分布的⼀个成分(component),并且有⾃⼰的均值µk和协⽅差Σk。
KMeans算法与GMM混合高斯聚类
具有3个成分的混合⾼斯分布的轮廓线。
 
可把πk = p(k)看成选择第k个成分的先验概率, 把密度N (x | µk, Σk) = p(x | k)看成以k为条件的x的概率。
⾼斯混合分布的形式由参数π, µ和Σ控制,其中令π ≡ {π1, . . . , πK}, µ ≡{µ1, . . . , µK}且Σ ≡ {Σ1, . . . , Σk}。
 
⼀种确定这些参数值的⽅法是使⽤最⼤似然法。根据公式),对数似然函数为:
KMeans算法与GMM混合高斯聚类
因为对数中存在⼀个求和式,导致参数的最⼤似然解不再有⼀个封闭形式的解析解:
  • ⼀种最⼤化这个似然函数的⽅法是使⽤迭代数值优化⽅法。
  • 另⼀种是使⽤EM期望最⼤化算法(对包含隐变量的似然进行迭代优化)。
 
样本x为观测数据,混合系数为隐变量,高斯分布的参数。
当成分为多元高斯分布时(d维),相当于从混合多元高斯分布中生成了样本,通过EM算法迭代地学习模型参数(均值和方差以及混合系数)。
  1. 期望:根据参数,更新样本关于类的响应度(隶属度,相当于分别和K个类计算距离并归一化)。确定响应度,就可以确定EM算法的Q函数(完全数据的对数似然关于 分布的期望),原始似然的下界。
  2. 最大化:根据响应度,计算均值、方差。
EM算法收敛后,直接求每个样本关于成分的响应度即可得到聚类结果(可软,可硬argmax)
 
当多元高斯分布的方差相同时,且每个样本只能指定给一个类时(one-hot响应度,argmax),GMM退化成K-means算法。
KMeans算法与GMM混合高斯聚类
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture
from sklearn.cluster import KMeans

# 创建数据,并可视化
X, y = datasets.make_blobs(n_samples=1500,
                             cluster_std=[1.0, 2.5, 0.5],
                             random_state=170)
plt.figure(figsize=(12,4))
plt.rcParams['font.family'] = 'STKaiti'
plt.rcParams['font.size'] = 20
plt.subplot(1,3,1)
plt.scatter(X[:,0],X[:,1],c = y)
plt.title('原始数据',pad = 20)

 

Kmeans聚类
kmeans = KMeans(3)
kmeans.fit(X)
y_ = kmeans.predict(X)
plt.subplot(1,3,2)
plt.scatter(X[:,0],X[:,1],c = y_)
plt.title('KMeans聚类效果',pad = 20)

 

GMM高斯混合模型聚类
gmm = GaussianMixture(n_components=3)
y_ = gmm.fit_predict(X)
plt.subplot(1,3,3)
plt.scatter(X[:,0],X[:,1],c = y_)
plt.title('GMM聚类效果',pad = 20)
 
plt.figtext(x = 0.51,y = 1.1,s = 'KMeans VS GMM',ha = 'center',fontsize = 30)
plt.savefig('./GMM高斯混合模型.png',dpi = 200)

 文章来源地址https://www.toymoban.com/news/detail-415692.html

KMeans算法与GMM混合高斯聚类
优点:
  • 可以完成大部分形状的聚类
  • 大数据集时,对噪声数据不敏感
  • 对于距离或密度聚类,更适合高维特征
缺点:
  • 计算复杂高,速度较慢
  • 难以对圆形数据聚类
  • 需要在测试前知道类别的个数(成分个数,超参数)
  • 初始化参数会对聚类结果产生影响
参考
1.https://www.jianshu.com/p/2c42c567e893
2. PRML
3. 刘建平博客

到了这里,关于KMeans算法与GMM混合高斯聚类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 无涯教程-聚类算法 - K-Means

    K-均值聚类算法计算质心并进行迭代,直到找到最佳质心为止,它假定群集的数目是已知的,它也称为扁平聚类算法。通过算法从数据中识别出的簇数以K均值中的\\\" K\\\"表示。 在该算法中,将数据点分配给群集,以使数据点和质心之间的平方距离之和最小。应当理解,簇内的较

    2024年02月10日
    浏览(48)
  • 【g】聚类算法之K-means算法

    聚类算法是一种无监督学习方法,它将相似的数据样本划分为一组,同时将不相似的数据样本划分为另一组。这个过程由计算机自动完成,不需要任何人为的干预。 K-means算法是一种经典的聚类算法,它的主要思想是把数据集分成k个簇,每个簇包括距离其它各簇最近的若干个

    2024年02月08日
    浏览(43)
  • K-means++聚类算法(matlab实现)

    K-means++算法:K-means++算法是K-means算法的改进版,其在选择初始质心时采用了一种更加聪明的方法,能够有效地避免局部最优解。具体来说,K-means++算法的初始质心是根据距离数据点最远的原则来选择的,这样可以保证初始质心的分布更加广泛,从而使得算法更容易找到全局最

    2024年02月07日
    浏览(100)
  • K-means聚类算法原理及实现

    1.1概念 聚类分析,也称为分割分析或分类分析,可将样本数据分成一个个组(即簇)。同一簇中的对象是相似的,不同簇中的对象则明显不同。 Statistics and Machine Learning Toolbox™ 提供了几种聚类方法和相似性度量(也称为距离度量)来创建簇。此外,簇计算可以按照不同的计

    2024年03月18日
    浏览(45)
  • 机器学习之K-means聚类算法

    目录 K-means聚类算法 算法流程 优点 缺点 随机点聚类 人脸聚类 旋转物体聚类 K-means聚类算法是一种无监督的学习方法,通过对样本数据进行分组来发现数据内在的结构。K-means的基本思想是将n个实例分成k个簇,使得同一簇内数据相似度高而不同簇之间数据相似度低。 K-means的

    2024年02月11日
    浏览(45)
  • K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比

      目录  一、概述 二、经典K-means算法 三、K-means++算法 四、ISODATA算法 六、数据集测试       在本篇文章中将对四种聚类算法(K-means,K-means++,ISODATA和Kernel K-means)进行详细介绍,并利用数据集来真实地反映这四种算法之间的区别。       首先需要明确的是上述四种算法都属

    2024年01月23日
    浏览(51)
  • K-means聚类算法(附Python实现代码)

    本文的代码与数据地址已上传至github:https://github.com/helloWorldchn/MachineLearning 1、基于划分的聚类 划分算法的思想是,将给定待挖掘数据集中的数据对象划分成K组(k≤N,N代表数据集中对象数目),每一组表示一个聚类的簇。并且要满足任何一个数据对象仅可以属于一个聚类,

    2024年02月07日
    浏览(47)
  • 传统机器学习(三)聚类算法K-means(一)

    K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。K-Means基于欧式距离认为两个目标距离越近,相似度越大。 1.1.1 算法流程 (1)图a表达了初始的数据集, 假设k=2; (2)在图b中,随机选择两个k类的对应的类别质心,即图中的红色质

    2023年04月15日
    浏览(43)
  • K-means聚类算法及Python代码实现

    K-means聚类算法(事先数据并没有类别之分!所有的数据都是一样的) 1、概述 K-means算法是集简单和经典于一身的 基于距离的聚类算法 采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。 该算法认为类簇是由距离靠近的对象组成的,因此把得到

    2023年04月24日
    浏览(48)
  • 【机器学习】K-means聚类算法:原理、应用与优化

    一、引言 1、简述聚类分析的重要性及其在机器学习中的应用   聚类分析,作为机器学习领域中的一种无监督学习方法,在数据探索与知识发现过程中扮演着举足轻重的角色。它能够在没有先验知识或标签信息的情况下,通过挖掘数据中的内在结构和规律,将数据对象自动

    2024年04月13日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包