聚类分析
无监督学习(Unsupervise Learning)着重于发现数据本身的分布特点。与监督学习(Supervised Learning)不同,无监督学习不需要对数据进行标记。从功能角度讲,无监督学习模型可以发现数据的“群落”,同时也可以寻找“离群”的样本。另外,对于特征维度非常高的数据样本,同样可以通过无监督学习进行数据降维,保留最具有区分性的低维度特征
聚类是一个将数据对象集划分为多个组或簇的过程,使得簇内的数据对象具有很高的相似性,但不同簇间的对象具有很高的相异性
聚类算法分类
随着聚类分析技术的蓬勃发展,目前已有很多类型的聚类算法。但很难对聚类方法进行简单的分类,因为这些类别的聚类可能重叠,从而使得一种方法具有一些交叉的特征。一般而言,聚类算法被划分为以下几类
1.划分方法
2.基于层次的方法
3.基于密度的方法
4.局域网格的方法
K-Means聚类
聚类分析中最广泛使用的算法为K-Means聚类算法
给定一个n个对象或元组的数据库,一个划分方法构建数据的k个划分,每个划分表示一个簇,k<=n,而且满足
(1)每个组至少包含一个对象;
(2)每个对象属于且仅属于一个组
划分时要求同一个聚类中的对象尽可能地接近或相关,不同聚类中的对象尽可能地远离或不同。K-Means算法是一个迭代的优化算法,最终使得下面均方误差最小。
算法流程图如下
用于划分的K-Means算法,其中每个簇的中心都用簇中所有对象的均值来表示。K-Means聚类模型所采用的迭代算法直观易懂且非常实用。但是具有容易收敛到局部最优解和需要预先设定簇的数量的缺陷
优点:
可扩展性较好,算法复杂度为O(nkt),其中n为对象总数,k是簇的个数,t是迭代次数
经常终止于局部最优解
缺点
只有当簇均值有定义的情况下,k均值方法才能使用。(某些分类属性的均值可能没有定义)
用户必须首先给定簇数目
不适合发现非凸形状的簇,
或者大小差别很大的簇 对噪声和离群点数据敏感
K-Means算法实现
下面对Iris数据集进行K-Means聚类
结果如下 显示每个预测对应的类别标签
代码如下
from sklearn.datasets import load_iris from sklearn.cluster import KMeans iris = load_iris() #加载数据集 X = iris.data estimator = KMeans(n_clusters = 3) #构造K-Means聚类模型 estimator.fit(X) #数据导入模型进行训练 label_pred = estimator.labels_ #获取聚类标签 print(label_pred) #显示各个样本所属的类别标签
k均值方法有些变种
他们的区别在于 不同的初始 k 个均值的选择
不同的相异度计算
不同的计算簇均值的策略
聚类分类数据的方法:k众数(mode)方法
用众数来替代簇的均值
采用新的相异性度量处理分类对象
采用基于频率的方法更新簇的众数 可以集成k均值和k众数方法,
对具有数值和分类值的数据进行聚类
K-Means算法改进
1. K-means++算法
K-means算法初始时随机选取数据集中K个点作为聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。K-means++算法初始的聚类中心之间的相互距离要尽可能的远
2. ISODATA算法
ISODATA的全称是迭代自组织数据分析法,是在K- means算法的基础上,增加对聚类结果的“合并”和“分裂”两个操作,当属于某个类别的样本数过少时则删除该类,当属于某个类别的样本数过多、分散程度较大时,把这个类分裂为两个子类别
创作不易 觉得有帮助请点赞关注收藏~~~