- 机器学习基础
- ML - 首页
- ML - 简介
- ML - 开始
- ML - 基本概念
- ML - 生态系统
- ML - Python 库
- ML - 应用
- ML - 生命周期
- ML - 所需技能
- ML - 实现
- ML - 挑战与常见问题
- ML - 限制
- ML - 真实案例
- ML - 数据结构
- ML - 数学基础
- ML - 人工智能
- ML - 神经网络
- ML - 深度学习
- ML - 获取数据集
- ML - 分类数据
- ML - 数据加载
- ML - 数据理解
- ML - 数据准备
- ML - 模型
- ML - 监督学习
- ML - 无监督学习
- ML - 半监督学习
- ML - 强化学习
- ML - 监督学习 vs. 无监督学习
- 机器学习数据可视化
- ML - 数据可视化
- ML - 直方图
- ML - 密度图
- ML - 箱线图
- ML - 相关矩阵图
- ML - 散点矩阵图
- 机器学习统计学
- ML - 统计学
- ML - 均值、中位数、众数
- ML - 标准差
- ML - 百分位数
- ML - 数据分布
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假设
- ML中的回归分析
- ML - 回归分析
- ML - 线性回归
- ML - 简单线性回归
- ML - 多元线性回归
- ML - 多项式回归
- ML中的分类算法
- ML - 分类算法
- ML - 逻辑回归
- ML - K近邻算法 (KNN)
- ML - 朴素贝叶斯算法
- ML - 决策树算法
- ML - 支持向量机
- ML - 随机森林
- ML - 混淆矩阵
- ML - 随机梯度下降
- ML中的聚类算法
- ML - 聚类算法
- ML - 基于质心的聚类
- ML - K均值聚类
- ML - K中心点聚类
- ML - 均值漂移聚类
- ML - 层次聚类
- ML - 基于密度的聚类
- ML - DBSCAN 聚类
- ML - OPTICS 聚类
- ML - HDBSCAN 聚类
- ML - BIRCH 聚类
- ML - 亲和传播
- ML - 基于分布的聚类
- ML - 凝聚聚类
- ML中的降维
- ML - 降维
- ML - 特征选择
- ML - 特征提取
- ML - 向后剔除法
- ML - 向前特征构造
- ML - 高相关性过滤器
- ML - 低方差过滤器
- ML - 缺失值比率
- ML - 主成分分析
- 强化学习
- ML - 强化学习算法
- ML - 利用与探索
- ML - Q学习
- ML - REINFORCE 算法
- ML - SARSA 强化学习
- ML - 演员-评论家方法
- 深度强化学习
- ML - 深度强化学习
- 量子机器学习
- ML - 量子机器学习
- ML - 使用 Python 的量子机器学习
- 机器学习杂项
- ML - 性能指标
- ML - 自动工作流
- ML - 提升模型性能
- ML - 梯度提升
- ML - 自举汇聚 (Bagging)
- ML - 交叉验证
- ML - AUC-ROC 曲线
- ML - 网格搜索
- ML - 数据缩放
- ML - 训练和测试
- ML - 关联规则
- ML - Apriori 算法
- ML - 高斯判别分析
- ML - 成本函数
- ML - 贝叶斯定理
- ML - 精确率和召回率
- ML - 对抗性
- ML - 堆叠
- ML - 纪元
- ML - 感知器
- ML - 正则化
- ML - 过拟合
- ML - P值
- ML - 熵
- ML - MLOps
- ML - 数据泄露
- ML - 机器学习的商业化
- ML - 数据类型
- 机器学习 - 资源
- ML - 快速指南
- ML - 速查表
- ML - 面试问题
- ML - 有用资源
- ML - 讨论
机器学习 - 层次聚类
层次聚类是另一种无监督学习算法,用于将具有相似特征的未标记数据点分组在一起。层次聚类算法分为以下两类:
凝聚层次算法 - 在凝聚层次算法中,每个数据点都被视为单个集群,然后依次合并或凝聚(自下而上方法)成对的集群。集群的层次结构表示为树状图或树结构。
分裂层次算法 - 另一方面,在分裂层次算法中,所有数据点都被视为一个大的集群,聚类过程涉及将一个大的集群划分为各种小的集群(自上而下方法)。
执行凝聚层次聚类的步骤
我们将解释最常用和最重要的层次聚类,即凝聚聚类。执行此操作的步骤如下:
步骤 1 - 将每个数据点视为单个集群。因此,我们开始时将有 K 个集群。数据点的数量开始时也为 K。
步骤 2 - 在此步骤中,我们需要通过连接两个最接近的数据点来形成一个大的集群。这将导致总共 K-1 个集群。
步骤 3 - 现在,为了形成更多集群,我们需要连接两个最接近的集群。这将导致总共 K-2 个集群。
步骤 4 - 现在,为了形成一个大的集群,重复上述三个步骤,直到 K 变为 0,即没有更多的数据点可以连接。
步骤 5 - 最后,在形成一个大的集群后,将使用树状图根据问题将其划分为多个集群。
树状图在凝聚层次聚类中的作用
正如我们在最后一步中讨论的那样,一旦形成大的集群,树状图的作用就开始了。树状图将用于根据我们的问题将集群分割成多个相关数据点的集群。这可以通过以下示例来理解:
示例 1
为了理解,让我们从导入所需的库开始:
%matplotlib inline import matplotlib.pyplot as plt import numpy as np
接下来,我们将绘制本例中使用的数点:
X = np.array([[7,8],[12,20],[17,19],[26,15],[32,37],[87,75],[73,85], [62,80],[73,60],[87,96],]) labels = range(1, 11) plt.figure(figsize=(10, 7)) plt.subplots_adjust(bottom=0.1) plt.scatter(X[:,0],X[:,1], label='True Position') for label, x, y in zip(labels, X[:, 0], X[:, 1]): plt.annotate(label,xy=(x, y), xytext=(-3, 3),textcoords='offset points', ha='right', va='bottom') plt.show()
输出
执行此代码时,它将生成以下绘图作为输出:
从上图可以很容易地看出,我们的数据点中有两个集群,但在现实世界的数据中,可能有数千个集群。
接下来,我们将使用 Scipy 库绘制数据点的树状图:
from scipy.cluster.hierarchy import dendrogram, linkage from matplotlib import pyplot as plt linked = linkage(X, 'single') labelList = range(1, 11) plt.figure(figsize=(10, 7)) dendrogram(linked, orientation='top',labels=labelList, distance_sort='descending',show_leaf_counts=True) plt.show()
它将生成以下绘图:
现在,一旦形成大的集群,就选择最长的垂直距离。然后绘制一条垂直线穿过它,如下图所示。由于水平线在两点与蓝线相交,因此集群数量将为两个。
接下来,我们需要导入用于聚类的类并调用其fit_predict方法来预测集群。我们正在导入sklearn.cluster库的AgglomerativeClustering类:
from sklearn.cluster import AgglomerativeClustering cluster = AgglomerativeClustering(n_clusters=2, affinity='euclidean', linkage='ward') cluster.fit_predict(X)
接下来,使用以下代码绘制集群:
plt.scatter(X[:,0],X[:,1], c=cluster.labels_, cmap='rainbow')
下图显示了我们数据点中的两个集群。
示例 2
正如我们在上面的简单示例中理解了树状图的概念一样,让我们转向另一个示例,在该示例中,我们使用层次聚类创建 Pima 印第安人糖尿病数据集中的数据点的集群:
import matplotlib.pyplot as plt import pandas as pd %matplotlib inline import numpy as np from pandas import read_csv path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8] patient_data = data.iloc[:, 3:5].values import scipy.cluster.hierarchy as shc plt.figure(figsize=(10, 7)) plt.title("Patient Dendograms") dend = shc.dendrogram(shc.linkage(data, method='ward')) from sklearn.cluster import AgglomerativeClustering cluster = AgglomerativeClustering(n_clusters=4, affinity='euclidean', linkage='ward') cluster.fit_predict(patient_data) plt.figure(figsize=(7.2, 5.5)) plt.scatter(patient_data[:,0], patient_data[:,1], c=cluster.labels_, cmap='rainbow')
输出
运行此代码时,它将生成以下两个绘图作为输出: