当前位置:   article > 正文

dbscan算法_Clustering聚类算法总结+python实践

dbscan clustering

3b695aa53f2ee85c952eb47229ae80aa.png

本文以iris鸢尾花数据为例,实现各种聚类算法。

文章里理论部分很简略,主要是python实践。

没想到疫情期间度过了研一下学期,全在上网课,仍然是获益匪浅。

正好在上机器学习的课程做了结课报告,感谢华中师大张雄军老师,疯狂鞭笞我们去实践,小白上了一学期机器学习学到很多,终于入门了呜呜呜~~~

一、聚类算法

聚类算法即分类算法。分类的输入项是数据的特征,输出项是分类标签,它是无监督的。

为什么要聚类?对大量数据简化表示,寻找对数据结构的新见解。

聚类算法的重要概念:

不相似性:

7d8560c77c14ca882a0f01c2b6ba0891.png

类间距离:

c5a9dc45e10deb3753e5a6ca828b14a5.png

聚类算法希望类间距离越小越好。

聚类算法簇类数量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之间的不相似性

e2b155ba415fddaecbb677a9e64096df.png

其中 ,主要有single、complete、average、centroid类型:

37c575772a3c4f3481a8e2081e3c6210.png

66bc34c98684b06fa9352be17189305c.png

6d3e7bd1e90f7de454076fb3a068586c.png

3. DBSCAN

以DBSCAN聚类为例,核心思想就是先发现密度较高的点,然后把相近的高密度点逐步都连成一片,进而生成各种簇。如下图

算法实现:对每个数据点为圆心,以eps为半径画个圈,然后数有多少个点在这个圈内,这个数就是该点密度值。然后我们可以选取一个密度阈值MinPts,如圈内点数小于MinPts的圆心点为低密度的点,而大于或等于MinPts的圆心点高密度的点。如果有一个高密度的点在另一个高密度的点的圈内,我们就把这两个点连接起来,这样我们可以把好多点不断地串联出来。之后,如果有低密度的点也在高密度的点的圈内,把它也连到最近的高密度点上,称之为边界点。这样所有能连到一起的点就成一了个簇,而不在任何高密度点的圈内的低密度点就是异常点。

4. 高斯混合模型GMM

使用多个高斯分布的组合来刻画数据分布,如下图

0842f2ffd86d9d7dfaa5bf97de6211e6.png

高斯混合模型的概率分布为

13e0efce4d4d469549ee64477998b5bc.png

参数

94c9f95a732090451c4b28ecf45a3b1c.png

,也就是每个子模型的期望、方差(或协方差)、在混合模型中发生的概率。

聚类的思想即是数据属于哪一个单高斯模型。

经典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 

最终聚类图像为

21b73b4c3b5135a326d3ab2dc80a8554.png

366ac5ff3bf1d65ee50408a616d255c6.png

bd66fc32f33d54ec699eaabe8c69f748.png

ee0f21939b845051ddebfd7551556c08.png

77c2e8934e86cc899e83cd852dd59e0b.png

75964ca221d5acc1e78fd95cb0a09172.png

97126896afa23ec14101e0258172ec1b.png

55dcaa1e86b850b8a99071bc9cc6cfc5.png

39b44ae48dbf99a1fdfe716115f12214.png

聚类算法作为一个无监督学习算法,是无法像监督学习那样计算精确度的。不过本题中已知iris的真实分类,笔者还是做了一个准确度的比较。(这部分代码没有放上来了,实践中用不到准确度。)

评价指标:purity(纯度),正确分类数据量占总数据量的比例。

50d27709585dd95e5d31da139407287d.png

dd48b47847680730dd589c9ab5144a0f.png

10d4353f93c56ec58cc6226f83e7971f.png

2b9362200735dd3f464ce7e6b80348c5.png

190330aa676f7922850a49c018e98801.png

6ca45aaa01dcf56f788de6d64fff0690.png

a112b263b51efa6217c9de7aa2c29977.png

90e12decf9301e86e5fe63f26ff460ac.png

准确率排序:

0bb22086e4b6eb4841e4a723b5edc437.png

可看出GMM最适用于此模型,准确率最高。

由于聚类是无监督学习方法,不同的聚类方法基于不同的假设和数据类型。由于数据通常可以以不同的角度进行归类,因此没有万能的通用聚类算法,并且每一种聚类算法都有其局限性和偏见性。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/774571
推荐阅读
相关标签
  

闽ICP备14008679号