赞
踩
本文以iris鸢尾花数据为例,实现各种聚类算法。
文章里理论部分很简略,主要是python实践。
没想到疫情期间度过了研一下学期,全在上网课,仍然是获益匪浅。
正好在上机器学习的课程做了结课报告,感谢华中师大张雄军老师,疯狂鞭笞我们去实践,小白上了一学期机器学习学到很多,终于入门了呜呜呜~~~
聚类算法即分类算法。分类的输入项是数据的特征,输出项是分类标签,它是无监督的。
为什么要聚类?对大量数据简化表示,寻找对数据结构的新见解。
聚类算法的重要概念:
不相似性:
类间距离:
聚类算法希望类间距离越小越好。
聚类算法簇类数量K的确定:
(1)CH index; (2)Gap statistic
常见的聚类规则包括:
1)基于原型的,例如有通过质心或中心点聚类,
常见算法:KMeans、kmediods;
2)基于图的,也就是通过节点和边的概念,形成连通分支的分类,
常见算法:hierarchical clustering;
3)基于密度的,根据数据密度的大小进行聚类,
常见算法:DBSCAN密度聚类;
4)基于统计的聚类,数据一般符合一种或几种概率分布,根据概率分布情况进行聚类。
常见算法:高斯混合模型;
1. KMeans、Kmediods
原理比较简单,网上都有
2. 凝聚层次聚类Agglomerative hierarchical
又可以分为 linkage=single、complete、average、centroid
凝聚层次聚类中重要概念linkage:衡量两个group之间的不相似性
其中 ,主要有single、complete、average、centroid类型:
3. DBSCAN
以DBSCAN聚类为例,核心思想就是先发现密度较高的点,然后把相近的高密度点逐步都连成一片,进而生成各种簇。如下图
算法实现:对每个数据点为圆心,以eps为半径画个圈,然后数有多少个点在这个圈内,这个数就是该点密度值。然后我们可以选取一个密度阈值MinPts,如圈内点数小于MinPts的圆心点为低密度的点,而大于或等于MinPts的圆心点高密度的点。如果有一个高密度的点在另一个高密度的点的圈内,我们就把这两个点连接起来,这样我们可以把好多点不断地串联出来。之后,如果有低密度的点也在高密度的点的圈内,把它也连到最近的高密度点上,称之为边界点。这样所有能连到一起的点就成一了个簇,而不在任何高密度点的圈内的低密度点就是异常点。
4. 高斯混合模型GMM
使用多个高斯分布的组合来刻画数据分布,如下图
高斯混合模型的概率分布为
参数
,也就是每个子模型的期望、方差(或协方差)、在混合模型中发生的概率。
聚类的思想即是数据属于哪一个单高斯模型。
经典EM算法求解GMM的参数,这个算法理论过程较复杂,可以网上找找看。
以经典iris数据为例,经典数据集iris内包含 3 类共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,可以通过这4个特征预测鸢尾花卉属于(iris-setosa, iris-versicolour, iris-virginica)中的哪一品种。
初始条件设置:
考虑到已知真实分类为3类,初始设置超参数:簇类数量K=3;
DBSCAN密度聚类半径设为0.5,高密度阈值设为2。
以下为python代码
###Clustering###
为了实现高维数据可视化,应用TSNE模块
from
原分类可视化
#原分类
###kmeans预测
model
###kmediods预测
from
###凝聚层次聚类Agglomerative
#linkage='single'
Agglomerative_single_model
#linkage='complete'
Agglomerative_complete_model
#linkage='average'
Agglomerative_average_model
#Centroid linkage
import
###密度聚类
#DBSCAN
DBSCAN_model
###高斯混合模型聚类GMM
#基于EM算法
from
最终聚类图像为
聚类算法作为一个无监督学习算法,是无法像监督学习那样计算精确度的。不过本题中已知iris的真实分类,笔者还是做了一个准确度的比较。(这部分代码没有放上来了,实践中用不到准确度。)
评价指标:purity(纯度),正确分类数据量占总数据量的比例。
准确率排序:
可看出GMM最适用于此模型,准确率最高。
由于聚类是无监督学习方法,不同的聚类方法基于不同的假设和数据类型。由于数据通常可以以不同的角度进行归类,因此没有万能的通用聚类算法,并且每一种聚类算法都有其局限性和偏见性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。