连载|机器学习|聚类算法(上)

简介: 连载|机器学习|聚类算法(上)

聚类任务

对于训练样本的标记信息是未知的情况下,我们的目标就会变成通过对无标记训练样本的学习来揭示数据的内在性质及规律,我们把这样的学习方法称之为“无监督学习”,而在此类学习任务中,研究最多应用最广的就是“聚类”。


在聚类算法中,我们试图将数据集中的样本划分为若干个不相交的子集,每个子集称为一个“簇”。而对于样本来说,我们并不知道其内部存在的类别,所以我们分出的这些“簇”就可能对应着一些潜在的概念(类别),与分类算法的区别就在于,这些潜在的概念在之前我们是完全未知的。


一般的聚类结果展示如下图所示:

image.jpeg

基于不同的学习策略,人们设计出多种类型的聚类算法,在学习算法之前,我们先来了解一下性能度量和距离运算。


性能度量

我们在之前的文章中了解过了分类算法的评估方式,对于聚类来说,我们有一些特殊的性能度量方式,让我们来了解一下。


对于聚类来说,我们把每个类别分成了相应的“簇”,直观上看我们希望“物以类聚”,而想要把很多“簇”聚的好,我们就希望“簇内的相似度”高且”簇间的相似度“低。


聚类的性能度量大致分类两类,一类是将聚类结果与某个”参考模型“进行比较,称为”外部指标“;另一类是直接考察聚类结果而不利用任何参考模型,称为”内部指标“。

image.png

根据上面的式子,我们可以得到下面这些常用的外部指标:


Jaccard系数

image.png

FM指数

image.png

Rand指数

image.png

很显然,对于上面的性能度量结果来说,结果值都在[0,1]之间,并且值越大越好。

image.png

根据上面的式子,我们可以得到下面这些常用的内部指标:


DB指数

image.png

Dunn指数

image.png

很显然,DBI的值越小越好,DI的值越大越好。


距离度量

对于函数d i s t ( ) dist()dist(),如果他表示一个距离的度量,我们就要满足一些基本性质:

image.png

image.png

注:当我们遇到的不同属性的重要性不同的时候,我们也可以对特征进行加权。


K-Means聚类

聚类算法中,最典型最常用的算法就是K-Means(K均值)算法,让我们来了解一下K-Means的原理及流程。


K-Means算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。K-Means算法的流程如下:

image.png

K-Means++(初始化优化)


K-Means++(初始化优化)

根据K-Means算法的原理我们不难发现,最初的质心选择对聚类的结果和运行时间有着很大的影响,因此我们需要选择合适的K个质心,K-Means++就使用了更优化的方法来初始化质心,让我们来看一下K-Means++的优化策略:

(1)从输入的数据点集合中随机选择一个点作为第一个聚类中心μ 1

(2)对于数据集中的每一个点image.png ,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x);

(3)选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大;

(4)重复(2)(3)步骤直到选择出k个聚类质心;

(5)利用这k个质心来作为初始化质心去运行标准的K-Means算法。


过程中提到的D(x)计算方法如下:

image.png

elkan K-Means(距离计算优化)

elkan K-Means(距离计算优化)


在传统的K-means算法中,我们每次迭代都需要计算所有样本到所有质心的距离,这样做会大大浪费我们的时间,elkan K-Means算法就是从距离的优化,去减少一些不必要的距离计算,来看一下它的原理。

elkan K-Means利用了两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,来减少距离的计算。

image.png

利用上边的两个规律,elkan K-Means比起传统的K-Means迭代速度有很大的提高。但是如果我们的样本的特征是稀疏的,有缺失值的话,这个方法就不使用了,此时某些距离无法计算,则不能使用该算法。


Mini Batch K-Means(大样本优化)

Mini Batch K-Means(大样本优化)

在传统的K-Means算法中,要计算所有的样本点到所有的质心的距离。如果样本量非常大,比如达到10万以上,特征有100以上,此时用传统的K-Means算法非常的耗时,就算加上elkan K-Means优化也依旧。在大数据时代,这样的场景越来越多。此时Mini Batch K-Means应运而生。


顾名思义,Mini Batch,也就是用样本集中的一部分的样本来做传统的K-Means,这样可以避免样本量太大时的计算难题,算法收敛速度大大加快。当然此时的代价就是我们的聚类的精确度也会有一些降低。一般来说这个降低的幅度在可以接受的范围之内。


在Mini Batch K-Means中,我们会选择一个合适的批样本大小batch size,我们仅仅用batch size个样本来做K-Means聚类。这batch size个样本般是通过无放回的随机采样得到的。


为了增加算法的准确性,我们一般会多跑几次Mini Batch K-Means算法,用得到不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。


K-means小结

K-Means的主要优点有:


  • 原理比较简单,实现也是很容易,收敛速度快;
  • 聚类效果较优;
  • 算法的可解释度比较强;
  • 主要需要调参的参数仅仅是簇数k。


K-Means的主要缺点有:


  • K值的选取不好把握;
  • 对于不是凸的数据集比较难收敛;
  • 如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳;
  • 采用迭代方法,得到的结果只是局部最优;
  • 对噪音和异常点比较的敏感。


相关文章
|
23天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
73 4
|
2天前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
16 2
|
20天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
39 1
|
29天前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络
|
29天前
|
机器学习/深度学习 算法
深入探索机器学习中的决策树算法
深入探索机器学习中的决策树算法
36 0
|
7月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
251 14
|
7月前
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
130 1
|
7月前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
7月前
|
机器学习/深度学习 数据采集 算法
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
346 0
|
7月前
|
机器学习/深度学习 数据采集 监控
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
984 0