目录
1.概论
2.聚类问题
(1)聚类问题的定义
(2)聚类的依据(距离的定义)
3.基于原型的聚类方法(k-均值聚类)
(1)k-均值聚类的基本思想和基本步骤
(2)k-均值聚类的特点
4.基于密度的聚类方法DBSCAN
5.基于层次的聚类方法(AGNES聚类方法)
6.python代码
(1)k-均值聚类
(2)DBSCAN
(3)AGNES
之前几类数据挖掘的目的是挖掘出样本数据与标签之间的关系,因此这种学习模型被称为监督学习。
而聚类分析则是另一种学习模式,它处理的数据没有标签,因此也称之为无监督学习方法。
聚类分析是指根据数据内部的相互关系将数据样本划分为不同的集合。
聚类分析的结果是将相似的样本划分在同一个簇中,差别较大的样本划分到不同的簇。
对样本进行聚类的依据是样本之间的相似度,样本之间的相似度通常使用样本距离来衡量。
使用不同的距离定义对聚类结果有很大影响。常见的距离定义有:
1.闵可夫斯基距离
2.曼哈顿距离
3.欧几里得距离
4.加权闵可夫斯基距离
5.余弦距离
常见的聚类方法主要有三种:基于原型的聚类方法、基于密度的聚类方法和基于层次的聚类方法
基于原型的聚类方法:所谓原型一般是指簇的中心点,簇中所有的样本都与这个中心点具有相似的特征。
k-均值聚类:k-均值聚类是一种典型的基于原型的聚类方法,它假设所有的样本可以划分为k个簇,每个样本属于当中的某个簇。
k-均值聚类的基本思路是:给定一个样本集D={x1,x2,......,xn},寻找一个分为k个簇的簇划分C={C1,C2,......,Cn},使得所有样本点到它所在簇质心距离的误差平方和(sum of squared error,SSE)最小。
基本步骤:
1.初始化质心
2.样本分簇
3.计算簇的质心
4.判断结束条件
(如下图所示,即为k-均值聚类过程)
在进行k-均值聚类时要注意以下几点:
1.k的选取(使用不同的k值进行聚类,最后结果是不一样的)
2.随机产生的初始化质心(为避免初始化质心带来效果不好的聚类结果,可以多生成几组初始化质心,产生几组聚类结果)
3.计算过程中的空簇(在聚类过程中可能出现某些样本点不属于任何簇的情况,这种就叫做空簇,为避免空簇对聚类结果造成影响,我们需要为空簇指定一个质点,使其不为空)
4.离群点
5.异性数据
(面向噪声的基于密度的空间聚类)
聚类方法基于一组邻域参数(邻域半径,邻域密度阈值)来刻画样本分布的紧密程度,并以此作为分簇依据。
过程:
1.设置邻域半径和邻域密度阈值
2.计算样本点的种类(将数据集中的所有样本分别标记为核心点、边界点或噪声点)
3.聚类(首先将核心点各自成簇,然后将距离小于邻域半径的核心点合并为一个簇,将边界点合并到与之相关联的核心点的簇中,噪声点不聚集为任何簇)
特点:无需提前制定聚类问题簇的个数,与k-均值聚类方法相比,DBSCAN聚类方法得到的簇的形状不再限定于球形,可以是任意分布的形状。
基于层次的聚类方法是对数据集基于不同层次进行簇的划分。基于层次的聚类方法有两类,即自底向上的凝聚方法和自顶向下的分裂方法。
AGNES是一种采用自底向上凝聚策略的层次聚类方法。它首先将数据集中每个样本点作为一个个体簇,然后合并最接近的两个簇,直到达到预设的簇数目。
特点:适用于任意形状的聚类,相较于k-均值聚类,他受到离群点的影响较小。
from sklearn.cluster import KMeans
kmeans=KMeans(n_clusters=4)
# 对数据集X进行聚类
kmeans.fit(X)
# kmeans.labels_输出数据集X的每个样本的分簇结果
y=kmeans.labels_
# kmeans.cluster_centers_输出聚类后簇的中心点(质点)的位置
centers=kmeans.cluster_centers_
# labels是聚类模型对新数据X1中每个样本的预测分簇结果
labels=kmeans.predict(X1)
参数说明:
n_clusters为拟聚类
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.3,min_samples=5)
dbscan.fit(X)
y=dbscan.labels_
参数说明:
esp是邻域半径,min_samples是邻域密度阈值
from sklearn.cluster import AgglomerativeClustering
agg=AgglomerativeClustering(n_clusters=4,linkage='single')
agg.fit()
y=agg.labels_
参数说明:
n_clusters为拟聚类的簇数,linkage为基于哪种簇间距离进行聚类。(‘single’表示单链接,‘complete’表示全链接,‘average’表示均链接)