【机器学习笔记】3种聚类模型

简介

  1. 常见的、经典的聚类模型主要有:KMeans、层次聚类、DBSCAN、谱聚类等;
  2. 聚类模型支持无监督学习任务;
  3. KMeans已单独写过博客,本文不在赘述;

层次聚类

简介

  1. 层次聚类法,是无监督学习模型,有自下而上的凝聚的层次聚类和自上而下分裂的层次聚类两种方式;
  2. 通过定义簇与簇之间的距离,决策簇的合并或分拆;

簇间距

  1. 两簇最近的样本的距离;
  2. 两簇最远的样本的距离;
  3. 两簇所有样本的平均距离;

算法步骤——自底而上凝聚的层次聚类

step1:将每个样本点视为一个独立的簇,计算所有簇的两两间距;
step2:将簇间距最小的两簇合并为一个簇;
step3:重复1、2步骤,直至聚类至预设类别数;

DBSCAN

简介

  1. 基于密度的聚类方式,既适用于凸样本集,也适用与非凸样本集;
  2. 该算法将具有足够密度的区域划分为簇,在具有噪声的空间数据库中发现任意形状的簇;
  3. 将簇定义为密度连接的点的集合;

密度相关概念

  1. 密度直达:样本x在其邻域r半径内的样本个数大于minSamples,样本x到其r邻域内的样本y称为密度直达,密度直达不具备对称性;
  2. 密度可达:样本x通过多个中间样本的密度直达,与样本y连接,称样本x与样本y密度可达,密度可达不具备对称性;
  3. 密度连接:样本点x与样本点y可以通过同一个核心样本密度可达,则称x和y密度连接,密度连接具备对称性;
  4. 密度连接的点定义为1簇密度联通簇;

算法步骤

step1:从数据集中随机取一个待聚类的样本点p,并对于参数Eps和minPts判断该样本点是否为核心样本;
step2:若样本点p是核心样本点,则找出所有样本点p的密度连接点;若样本点p是边缘点,则重新进行step1;
step3:重复step1、step2,直至所有待聚类样本点均被处理。

谱聚类

简介

以一种图论的视角去看待样本,将样本点进行图矩阵化,并找到一种切割方式,使得切割后的各组之间相似性小,组内样本相似度大,在计算中通常对图相关矩阵采用先降维后聚类的方式实现。

图相关矩阵

  1. 邻接矩阵:所有点之间的权重wij(如欧式距离),构成的一个n x n的邻接矩阵W,W是对称矩阵,类似于相关系数矩阵。
  2. 度矩阵:对于顶点vi,它的度记为di = sum(wij),度矩阵D = diag([d1, d2, d3…dn])
  3. 拉普拉斯矩阵:L = D - W

算法步骤

step1:计算拉普拉斯矩阵;
step2:对拉普拉斯矩阵进行特征分解,求解k个最小的特征向量,排列成n * k的特征向量矩阵Q;
step3:用Q矩阵的行代替原样本,进行kmeans聚类,得到类别。

sklearn实战

重要参数

# 层次聚类
class sklearn.cluster.AgglomerativeClustering(
    n_clusters=2, 
    affinity='deprecated', 
    metric=None, 
    memory=None, 
    connectivity=None, 
    compute_full_tree='auto', 
    linkage='ward', 
    distance_threshold=None, 
    compute_distances=False)
    # n_clusters	聚类数,与distance_threshold有一个为None;
    # distance_threshold	最小合并距离,当簇间距大于该阈值则不再合并;
    # linkage	簇间距计算方式 {‘ward’, ‘complete’, ‘average’, ‘single’}, default=’ward’。

# dbscan聚类
class sklearn.cluster.DBSCAN(
	eps=0.5, 
	min_samples=5, 
	metric='euclidean', 
	metric_params=None, 
	algorithm='auto', 
	leaf_size=30, 
	p=None, 
	n_jobs=None
)
    # eps					邻域的距离阈值;
    # min_samples			核心数据对象所需邻域内最少样本阈值;
    # metric				顶点权重度量方式;

# 谱聚类
sklearn.cluster.SpectralClustering(
	affinity=‘nearest_neighbors’,
	assign_labels=‘kmeans’,
	coef0=1, 
	degree=3, 
	eigen_solver=‘arpack’, 
	eigen_tol=0.0,
	gamma=1.0, 
	kernel_params=None, 
	n_clusters=2, 
	n_init=10, 
	n_jobs=1,
	n_neighbors=10, 
	random_state=None)
    # affinity	邻接矩阵的点相似度计算方式;
    # assign_labels	降维后的聚类方式选择;
    # n_clusters	最终形成聚类的类别数。

聚类任务

from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.cluster import AgglomerativeClustering, DBSCAN, SpectralClustering

# 鸢尾花数据集
data = load_iris()
X, y = data["data"], data["target"]

# 层次聚类
model1 = AgglomerativeClustering(n_clusters=3)
y_pred1 = model1.fit_predict(X)

# 基于密度的聚类
model2 = DBSCAN()
y_pred2 = model2.fit_predict(X)

# 谱聚类
model3 = SpectralClustering(random_state=41, n_clusters=3)
y_pred3 = model3.fit_predict(X)

参考

https://blog.csdn.net/qq_40206371/article/details/129868310
https://zhuanlan.zhihu.com/p/77043965
https://blog.csdn.net/qq_45448654/article/details/120850612
https://www.ngui.cc/el/3126694.html?action=onClick

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值