机器学习聚类算法

简介: 聚类算法是无监督学习技术,用于发现数据集中的自然群体,如用户画像、广告推荐等。常见的聚类算法包括K-Means,它基于距离分配样本至簇,适合球形分布;层次聚类则通过合并或分裂形成簇,能发现任意形状的簇;DBSCAN依据密度来聚类,对噪声鲁棒。KMeans API中`sklearn.cluster.KMeans(n_clusters=8)`用于指定簇的数量。评估聚类效果可使用轮廓系数、SSE等指标,Elbow方法帮助选择合适的K值。

聚类算法是一种无监督学习方法,用于将数据集中的样本划分为多个簇,使得同一簇内的样本相似度较高,而不同簇之间的样本相似度较低。在数据分析中,聚类算法可以帮助我们发现数据的内在结构和规律,从而为进一步的数据分析和挖掘提供有价值的信息。


聚类算法在现实中的应用:用户画像,广告推荐,搜索引擎的流量推荐,恶意流量识别,新闻聚类,筛选排序;图像分割,降维,识别;离群点检测;


在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算方法,会得到不同的聚类结果。


K-Means算法


K-means是一种基于划分的聚类算法,其基本原理是通过迭代计算,将数据集划分为K个簇,使得每个簇内的数据点到该簇中心的距离之和最小。


K-means算法的主要步骤:


  • 初始化:选择K个初始质心;
  • 分配:将每个数据点分配到距离最近的质心所在的簇;
  • 更新:重新计算每个簇的质心;
  • 迭代:重复分配和更新步骤,直到质心不再发生变化或达到最大迭代次数。


K-means算法适用于球形簇分布的数据,对噪声和异常值较为敏感,需要预先指定簇的数量K。


层次聚类算法 


层次聚类是一种基于树形结构的聚类方法,通过计算数据点之间的距离,逐步将数据点合并为更大的簇。层次聚类可以分为凝聚型(自下而上)和分裂型(自上而下)两种方法。


  • 初始化:将每个数据点视为一个簇;
  • 合并:计算簇之间的距离,将距离最近的两个簇合并为一个新的簇;
  • 迭代:重复合并步骤,直到所有数据点合并为一个簇或达到预设的簇数量。


层次聚类不需要预先指定簇的数量,可以发现任意形状的簇,但计算复杂度较高,不适合处理大规模数据集。


DBSCAN算法


DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,其基本原理是通过定义数据点的邻域半径和邻域密度阈值,将相互靠近且密度相近的数据点划分为一个簇。


  • 初始化:选择一个尚未访问的数据点;
  • 扩展:如果该数据点的邻域内有足够多的数据点,则将其纳入当前簇,并继续扩展邻域;
  • 迭代:重复扩展步骤,直到所有数据点被访问。


DBSCAN算法可以发现任意形状的簇,对噪声和异常值具有较好的鲁棒性,需要预先设定邻域半径和密度阈值。



KMeans Api


sklearn.cluster.KMeans(n_clusters=8)


  • 参数:n_clusters:开始的聚类中心数量


estimator.fit(x)
estimator.predict(x)
estimator.fit_predict(x)


案例


随机创建不同二维数据集作为训练集,并结合k-means算法将其聚类 。


聚类参数n_cluster传值不同,得到的聚类结果不同。


make_blobs函数是用于生成模拟数据的函数,它返回一个包含样本数据和对应标签的元组


  • n_samples:表示要生成的样本数量,默认为100。
  • n_features:表示每个样本的特征数量,默认为2。
  • centers:表示类别的中心点坐标,可以是一个列表或数组,其中每个元素代表一个类别的中心点坐标。在给定的示例中,有4个类别,分别位于(-1, -1)、(0, 0)、(1, 1)和(2, 2)。
  • cluster_std:表示每个类别的标准差,可以是一个列表或数组,其中每个元素代表一个类别的标准差。在给定的示例中,有4个类别,它们的标准差分别为0.4、0.2、0.2和0.2。
  • random_state:表示随机数生成器的种子,用于控制随机性。在给定的示例中,随机数生成器的种子设置为9。


import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
 
# 簇中心在[-1,-1], [0,0],[1,1], [2,2], 簇方差分别为[0.4, 0.2, 0.2, 0.2]
X, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1, -1], [0, 0], [1, 1], [2, 2]],
                  cluster_std=[0.4, 0.2, 0.2, 0.2],
                  random_state=9)
 
# 数据集可视化
plt.scatter(X[:, 0], X[:, 1]')
plt.show()



使用k-means进行聚类,并使用silhouette_score评估


y_pred = KMeans(n_clusters=2, random_state=9).fit_predict(X)
 
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
 
print(silhouette_score(X, y_pred))
 
# 0.6634549555891298




K-Means聚类步骤


  • K表示初始中心点个数(计划聚类数)


  • means求中心点到其他数据点距离的平均值


  1. 随机设置K个特征空间内的点作为初始的聚类中心


  1. 对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别


  1. 接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点。


  1. 如果计算得出的新中心点与原中心点一样那么结束,否则重新进行第二步过程。


模型评估


聚类算法模型评估通常涉及多种指标,这些指标可以帮助我们了解聚类的效果和质量。


  1. SSE(Sum of Squared Errors):SSE计算的是聚类中心与各个样本点之间误差的平方和。它衡量的是簇内紧密程度,即簇内样本与聚类中心的相似度。SSE越小,表示簇内样本越紧密,聚类效果越好。
  2. 轮廓系数(Silhouette Coefficient):轮廓系数结合了簇内的凝聚力和簇间的分离力,是一种基于样本之间距离的评估指标。它的值域在-1到1之间,值越大表示聚类效果越好。
  3. Calinski-Harabaz指数(CH指数):CH指数基于簇内和簇间的协方差计算,值越大表示聚类效果越好。它适用于簇大小差不多的情况。
  4. Davies-Bouldin指数(DB指数):DB指数是基于样本之间距离的评估指标,它评估的是簇之间的分离度。DB指数越小,表示簇之间的分离度越好,聚类效果越佳。


Elbow method — K值确定


方法的基本思想是:


  1. 对于不同的K值,计算每个K值对应的总内平方和(Within-Cluster-Sum of Squared Errors),即每个样本点到其所属簇质心的距离的平方和。
  2. 随着K值的增加,WCSS会逐渐减小,因为更多的簇意味着样本点与其质心的平均距离更小。
  3. 绘制WCSS随K值变化的折线图,通常会出现一个“肘点”(elbow point),即WCSS下降速度明显变慢的地方。
  4. “肘点”对应的K值被认为是较优的簇数量,因为它在减少误差的同时,并没有大幅增加簇的数量。


                     


下降率突然变缓时即认为是最佳的k值。


轮廓系数法


结合聚类的凝聚度和分离度,用于评估聚类的效果,使其内部距离最小化,外部距离最大化


计算样本到同簇其他样本的平均距离 ,距离越小样本的簇内不相似度越小,说明样本越应该被聚类到该簇。


求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数。平均轮廓系数的取值范围为[-1,1],系数越大,聚类效果越好。


每次聚类后,每个样本都会得到一个轮廓系数,为1时,说明这个点与周围簇距离较远,结果非常好,为0,说明这个点可能处在两个簇的边界上,当值为负时,该点可能被误分了。


相关文章
|
9天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
4天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
16 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
阿里云人工智能平台 PAI 团队发表的图像编辑算法论文在 MM2024 上正式亮相发表。ACM MM(ACM国际多媒体会议)是国际多媒体领域的顶级会议,旨在为研究人员、工程师和行业专家提供一个交流平台,以展示在多媒体领域的最新研究成果、技术进展和应用案例。其主题涵盖了图像处理、视频分析、音频处理、社交媒体和多媒体系统等广泛领域。此次入选标志着阿里云人工智能平台 PAI 在图像编辑算法方面的研究获得了学术界的充分认可。
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
|
25天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
54 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
1月前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。
|
13天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
30天前
|
机器学习/深度学习 算法 数据可视化
机器学习的核心功能:分类、回归、聚类与降维
机器学习领域的基本功能类型通常按照学习模式、预测目标和算法适用性来分类。这些类型包括监督学习、无监督学习、半监督学习和强化学习。
24 0
|
1月前
|
机器学习/深度学习 算法 数据处理
EM算法对人脸数据降维(机器学习作业06)
本文介绍了使用EM算法对人脸数据进行降维的机器学习作业。首先通过加载ORL人脸数据库,然后分别应用SVD_PCA、MLE_PCA及EM_PCA三种方法实现数据降维,并输出降维后的数据形状。此作业展示了不同PCA变种在人脸数据处理中的应用效果。
32 0
|
24天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。