首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 为何选择机器学习
1.1.1 机器学习能够解决的问题
1.1.2 熟悉任务和数据
1.2 为何选择Python
1.3 scikit-learn
1.4 必要的库和工具
1.4.1 Jupyter Notebook
1.4.2 NumPy
1.4.3 SciPy
1.4.4 matplotlib
1.4.5 pandas
1.4.6 mglearn
1.5 Python 2 与Python 3 的对比
1.7 第 一个应用:鸢尾花分类
1.7.1 初识数据
1.7.2 衡量模型是否成功:训练数据与测试数据
1.7.3 要事第 一:观察数据
1.7.4 构建第 一个模型:k 近邻算法
1.7.5 做出预测
1.7.6 评估模型
2.1 分类与回归
2.2 泛化、过拟合与欠拟合
2.3 监督学习算法
2.3.1 一些样本数据集
2.3.2 k 近邻
2.3.3 线性模型
2.3.4 朴素贝叶斯分类器
2.3.5 决策树
2.3.6 决策树集成
2.3.7 核支持向量机
2.3.8 神经网络(深度学习)
2.4 分类器的不确定度估计
2.4.1 决策函数
2.4.2 预测概率
2.4.3 多分类问题的不确定度
3.1 无监督学习的类型
3.2 无监督学习的挑战
3.3 预处理与缩放
3.3.1 不同类型的预处理
3.3.2 应用数据变换
3.3.3 对训练数据和测试数据进行相同的缩放
3.3.4 预处理对监督学习的作用
3.4 降维、特征提取与流形学习
3.4.1 主成分分析
3.4.2 非负矩阵分解
3.4.3 用t-SNE 进行流形学习
3.5 聚类
3.5.1 k 均值聚类
3.5.2 凝聚聚类
3.5.3 DBSCAN
3.5.4 聚类算法的对比与评估
3.5.5 聚类方法小结
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(上)
小册名称:Python机器学习基础教程(上)
### 3.4.3 用t-SNE 进行流形学习 在机器学习领域,特别是在处理高维数据时,数据可视化是一个极具挑战性的任务。高维数据空间中的点难以直接在二维或三维空间中直观表示,这使得我们难以理解和解释数据的内在结构和分布。幸运的是,流形学习(Manifold Learning)技术为我们提供了一种有效的解决方案,能够将高维数据映射到低维空间,同时尽量保留数据的本质特征和结构。其中,t-Distributed Stochastic Neighbor Embedding(t-SNE)是一种非常流行且效果显著的流形学习算法,尤其适用于探索性数据分析和可视化。 #### 3.4.3.1 t-SNE算法概述 t-SNE由Laurens van der Maaten和Geoffrey Hinton在2008年提出,它结合了局部线性嵌入(LLE)和随机邻域嵌入(SNE)的思想,并通过引入t分布(而非高斯分布)作为相似度的度量,解决了SNE在高维空间中的“拥挤问题”,使得在低维空间中的聚类更加自然且易于解释。 t-SNE算法的核心在于两个关键步骤: 1. **构建高维空间中的相似度矩阵**:对于高维空间中的每一点,计算它与其它所有点之间的相似度(通常使用高斯核函数)。这一步骤旨在捕捉局部结构信息,即相近的点在高维空间中应保持相近。 2. **优化低维空间中的表示**:在低维空间中(通常是二维或三维),通过最小化一个基于KL散度(Kullback-Leibler divergence)的成本函数,来优化每个点的位置,使得低维空间中点与点之间的相似度尽可能与高维空间中的相似度相匹配。这里,t-SNE使用t分布来度量低维空间中的相似度,这有助于缓解在高维空间中常见的“拥挤问题”,使得在低维空间中,不同的聚类能够更容易地区分开来。 #### 3.4.3.2 t-SNE参数详解 t-SNE算法的效果高度依赖于其参数设置,主要参数包括: - **困惑度(Perplexity)**:这是t-SNE中最关键的参数之一,它大致对应于高维空间中每个点周围的有效邻居数。困惑度越高,意味着考虑的邻居越多,算法会尝试保留更大范围的全局结构;反之,困惑度较低时,算法会更注重局部结构的保留。选择合适的困惑度对于获得有意义的低维表示至关重要。 - **学习率(Learning Rate)**和**迭代次数(Iterations)**:这两个参数控制优化过程的速度和收敛性。学习率决定了每次迭代中点的位置更新幅度,而迭代次数则决定了算法运行的总时长。 - **初始解(Initial Solution)**:t-SNE的初始解可以随机生成,也可以基于PCA等降维方法得到。一个较好的初始解可以加速收敛过程。 - **早期放大系数(Early Exaggeration)**:在算法的早期阶段,通过增加点对间的相似度差异(即放大相似度矩阵中的值),可以帮助算法更好地捕捉到局部结构。随着迭代的进行,该系数会逐渐减小至1。 #### 3.4.3.3 t-SNE应用实例 为了更好地理解t-SNE的应用,我们通过一个具体的例子来展示其效果。假设我们有一组手写数字图像(如MNIST数据集),每个图像被转换为一个784维(28x28像素)的向量。我们的目标是使用t-SNE将这些高维数据降维到二维空间,以便于可视化。 **步骤1:准备数据** 加载MNIST数据集,并预处理数据(如归一化),以便t-SNE能够更有效地处理。 **步骤2:选择t-SNE参数** 通过实验或经验选择适当的困惑度、学习率、迭代次数等参数。通常,困惑度需要根据数据集的大小和复杂度进行调整。 **步骤3:运行t-SNE** 应用t-SNE算法到预处理后的数据上,得到降维后的二维坐标。 **步骤4:可视化结果** 使用散点图或其他可视化工具展示降维后的结果。在理想情况下,我们可以看到数字按照其类别自然地聚集成不同的簇,即使在高维空间中这些类别可能非常复杂且难以区分。 #### 3.4.3.4 注意事项与局限性 尽管t-SNE在数据可视化方面表现出色,但它也存在一些局限性和需要注意的地方: - **计算成本高**:t-SNE的计算复杂度较高,特别是对于大规模数据集,可能需要较长的运行时间。 - **参数敏感**:t-SNE的效果高度依赖于参数设置,不同的参数组合可能导致截然不同的可视化结果。 - **全局结构保留有限**:t-SNE主要关注于局部结构的保留,对于全局结构的保持能力相对较弱。因此,在需要同时考虑全局和局部结构的场景中,可能需要结合其他方法。 - **解释性挑战**:虽然t-SNE能够生成易于理解的可视化结果,但解释这些结果背后的具体含义和决策过程可能具有挑战性。 综上所述,t-SNE是一种强大的流形学习算法,尤其适用于高维数据的可视化分析。通过精心选择参数和调整优化过程,t-SNE能够帮助我们揭示数据的内在结构和分布模式,为后续的机器学习任务提供有价值的洞察。然而,我们也应认识到其局限性和挑战,并在实际应用中结合具体需求和数据特性来合理使用。
上一篇:
3.4.2 非负矩阵分解
下一篇:
3.5 聚类
该分类下的相关小册推荐:
剑指Python(磨刀不误砍柴工)
Python编程轻松进阶(二)
Python编程轻松进阶(五)
Python合辑3-字符串用法深度总结
Python与办公-玩转Word
Python3网络爬虫开发实战(上)
Python编程轻松进阶(四)
Python面试指南
Python合辑12-面向对象
实战Python网络爬虫
Python高并发编程与实战
Python合辑9-判断和循环