当前位置: 首页 > news >正文

掌握特征提取:机器学习中的 PCA、t-SNE 和 LDA模型

文章目录

  • 一、说明
  • 二、既然有 PCA 技术降维,为什么还要学习 t-SNE?
    • 2.1 t-SNE的核心思想:
    • 2.2 保持点之间的局部关系有什么意义?
    • 2.3 t-SNE 的几何直觉:
  • 三、t-SNE 的数学公式:
  • 四、目标函数:
  • 五、梯度下降:
  • 六、t-SNE 代码示例:(MNIST 手写数据集示例)
  • 七、一些问题!
  • 八、t-SNE 中的超参数:
  • 九、一些要点:
  • 十、结论

一、说明

与 PCA(主成分分析)相比,这是一种更好的降维技术。t-SNE,即 t 分布随机邻域嵌入,是一种通过将高维数据降低到低维空间(通常是二维或三维)来实现可视化的统计方法。
这使得数据的可视化和解释变得更加容易,特别是在处理机器学习和数据科学等复杂数据集时。

二、既然有 PCA 技术降维,为什么还要学习 t-SNE?

PCA 在线性数据上效果更好,而 t-SNE 没有这样的限制。无论数据是线性的还是非线性的,t-SNE 都表现良好。下面是使用 PCA 和 t-SNE 技术对 MNIST 数据集的可视化。从图中可以看出,与 PCA 相比,t-SNE 对数字的划分更出色。这种改进可以归因于 MNIST 数据的非线性,t-SNE 可以有效捕捉到这种非线性,而 PCA 则很难做到。
在这里插入图片描述

2.1 t-SNE的核心思想:

t-SNE 背后的核心思想是将高维数据点映射到低维空间(通常是二维或三维),同时保留点之间的局部关系。它通过测量高维空间中数据点之间的相似性并将这种相似性表示为概率来实现这一点。然后,它在低维空间中构建类似的概率分布,并使用称为梯度下降的技术最小化两个分布之间的差异。此过程使 t-SNE 能够有效捕捉数据的局部结构,使其特别适用于可视化复杂数据集和发现有意义的模式。

2.2 保持点之间的局部关系有什么意义?

t-SNE 中的“保持点之间的局部关系”是指在将相邻数据点从高维空间映射到低维空间时,保持它们之间的相对距离和相似性。

假设您有一个数据集,其中相似的数据点在高维空间中彼此靠近。保留局部关系意味着在降维之后,这些相似的点应该在低维空间中仍然紧密相连。同样,如果两个数据点在原始空间中彼此不相似或相距较远,则它们在降维空间中应该保持相对较远的距离。

2.3 t-SNE 的几何直觉:

t-SNE 背后的概念涉及计算每个数据点与数据集中所有其他点之间的相似性。利用这些相似性分数,该算法将数据的维度降低到 2D 或 1D,同时保留点之间的局部关系(即查找最近的邻居)。
在这里插入图片描述
如何计算相似度?

第 1 阶段
一种方法是计算点之间的距离,但由于“维数灾难”,这种方法在高维空间中变得不那么可靠。t -SNE 不再仅仅依赖距离计算,而是采用概率方法。对于每个数据点(例如 x1),在其周围绘制一个均值为零的高斯分布,标准差则根据 x1 周围附近点的密度确定。
在这里插入图片描述
现在,在 x 轴上,我们考虑与参考点(例如 x1)的距离。对于数据集中的每个点,我们计算其与 x1 的距离,并沿 x 轴绘制这些距离。y 轴表示相应的概率密度,使我们能够确定每个数据点相对于 x1 的概率,这可作为该点的相似度得分。
在这里插入图片描述
类似地,该方法应用于数据集中的每个点,从而产生一个 n * n 矩阵,其中记录了每个数据点相对于其他每个数据点的相似性得分。由于每个点周围的分布独特,点 x1 到 x2 的概率 (P(x1 | x2)) 不一定等于 x2 到 x1 的概率 (P(x2 | x1))。两点之间的 P 值越高表示它们是彼此的邻居,而 P 值越低表示它们是不相似的点。

第 2 阶段
现在我们将高维降为低维,并且点随机分布在 x 轴上,如图所示:
在这里插入图片描述
在此阶段,我们重新计算每个点相对于其他点的相似度得分,从而得到另一个 n * n 矩阵。现在我们有两个矩阵:一个表示高维的相似度得分,另一个表示低维的相似度得分。
在这里插入图片描述
阶段 3
为了保留点之间的局部关系,确保相邻点在低维中保持接近,我们的目标是将低维矩阵与高维矩阵对齐。这种对齐涉及迭代调整点的位置,直到低维中的相似性矩阵尽可能接近高维中的相似性矩阵。

三、t-SNE 的数学公式:

计算相似性:
对于高维空间中的每个数据点,我们使用高斯分布计算其与其他每个点的相似性。这种相似性基于点之间的距离。
类似地,在低维空间中,我们使用 t 分布来计算点之间的相似性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、目标函数:

我们希望尽量减小高维空间中的点与低维空间中的点的相似性之间的差异。我们使用Kullback-Leibler (KL) 散度来测量这种差异。
KL 散度衡量一个概率分布与另一个概率分布的差异。在我们的例子中,它量化了高维空间和低维空间之间成对相似度的差异。
在这里插入图片描述

五、梯度下降:

为了最小化 KL 散度,我们使用梯度下降。这种迭代优化技术可以调整低维空间中点的位置。
在每次迭代中,我们计算成本函数相对于低维空间中点的位置的梯度。
这个梯度指示了我们应该移动每个点的方向,以减少高维和低维相似性之间的差异。
通过根据该梯度更新点的位置,我们逐渐收敛到低维相似性与高维空间的相似性紧密匹配的配置。
在这里插入图片描述
在这里插入图片描述
该公式抓住了 t-SNE 数学工作原理的本质,旨在保留原始高维空间中数据点之间的局部相似性,同时将它们嵌入到低维空间中以实现可视化。

六、t-SNE 代码示例:(MNIST 手写数据集示例)

import numpy as np
from sklearn.manifold import TSNE
from sklearn.datasets import fetch_openml
import matplotlib.pyplot as plt
import plotly.express as px
import pandas as pd
from sklearn.decomposition import PCA
# Load MNIST dataset
mnist = fetch_openml('mnist_784', version=1)
X = mnist.data / 255.0
y = mnist.target
# Select 10000 random points
np.random.seed(42)  # For reproducibility
indices = np.random.choice(range(X.shape[0]), size=10000, replace=False)
X_subset = X.iloc[indices]
y_subset = y.iloc[indices]
# Apply PCA for initial dimensionality reduction
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_subset)
# Plotting with Matplotlib
plt.figure(figsize=(12, 8))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_subset.astype(int), cmap='tab10', s=1)
plt.colorbar(scatter)
plt.title('PCA of MNIST')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()

在这里插入图片描述

# Apply t-SNE
tsne = TSNE(n_components=2, perplexity=30, n_iter=1000, random_state=42)
X_tsne = tsne.fit_transform(X_subset)
# Plot the result
plt.figure(figsize=(12, 8))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y_subset.astype(int), cmap='tab10', s=1)
plt.legend(*scatter.legend_elements(), title="Digits")
plt.title('t-SNE of MNIST')
plt.show()

在这里插入图片描述
借助上述代码示例和图表,您将了解 t-SNE 的工作原理以及为什么在非线性数据出现时它比 PCA 更好。

七、一些问题!

为什么使用高斯分布来计算高
维的相似度?

a. 可微分
b. 距离概率输出

在这里插入图片描述
高斯分布函数

这意味着,在上面的公式中,我们用两点之间的距离代替 x,这样我们就得到了概率输出的距离。

在这里插入图片描述
看黄色部分,我们在高斯分布公式中用距离代替 x

c. 优雅地处理距离
这意味着高斯分布可以平滑地反映点之间的距离。当点靠近时,它们被视为邻居的概率较高,而当它们相距较远时,这个概率逐渐降低。此属性确保分布能够准确地捕捉点之间基于距离的不同相似度。

d. 用方差参数控制密度

“使用方差参数控制密度”是指使用方差参数调整高斯分布的扩展或宽度的能力。

简单来说,方差决定了数据点围绕其平均值(或中心)的分布情况。方差越小,数据点之间的距离越近,密度也就越大;方差越大,数据点之间的距离越远,密度也就越小。

因此,在 t-SNE 中,调整方差参数可以控制高斯分布围绕每个数据点的紧密程度。此调整会影响邻域大小,并影响根据点与点之间的距离将哪些点视为邻居。

我想你已经得到了这个问题的答案,而且它也是一个著名的、众所周知的分布,并且所有的信息对于这个分布来说已经是可用的,所以这也是为什么高斯分布用于计算高维中两点之间的相似性的原因之一。

八、t-SNE 中的超参数:

  1. 困惑度:
    • 困惑度可能是 t-SNE 中最重要的超参数。它可以
    被认为是每个点的有效邻居数量的度量

• 困惑度的值会影响数据的局部和全局方面的平衡。较小的困惑度会强调局部结构,而
较大的困惑度会更多地发挥全局结构的作用。

• 困惑度的典型值介于 5 到 50 之间,但这可能会
因数据集而异。通常建议尝试
不同的值以查看它们如何影响结果。

2.学习率:

• 学习率决定了在
向成本函数最小值移动的过程中每次迭代的步长。

•学习率过高可能导致算法震荡并错过
全局最小值,而学习率过低可能导致
训练过程过长,并可能陷入局部最小值。

•学习率的常见值在 10 到 1000 之间。同样,
尝试不同的值是找到给定数据集的最佳设置的关键

3.迭代次数:

•该超参数控制算法在终止之前运行的迭代次数。

•如果数字太低,算法可能无法完全收敛。如果数字太高
,您可能会浪费计算资源,而
嵌入质量却没有太大提高。

•默认迭代次数通常设置为 1000 这样的值,但
对于较大的数据集,可能需要增加该次数。

九、一些要点:

解释聚类: t-SNE 可以非常有效地揭示聚类和局部结构。但是,聚类之间的距离或图中聚类的相对位置可能没有有意义的解释。避免过度解释全局关系。
轴没有意义: t-SNE 中的轴没有可解释的含义,这就是为什么 t-SNE 仅用于可视化而不是用于预测。
困惑度很重要:困惑度是 t-SNE 中的一个关键超参数。它大致对应于有效最近邻的数量。没有一个放之四海而皆准的值;不同的值可以揭示不同的结构,因此请尝试使用一系列值。常见值介于 5 到 50 之间。
可重复性: t-SNE 从随机初始化开始,每次运行都会产生不同的结果。如果可重复性很重要,请设置随机种子。此外,使用不同的初始化进行多次运行可以更全面地了解数据的结构。
缩放数据:缩放或规范化数据等预处理步骤(尤其是当特征处于不同尺度时)会对 t-SNE 的结果产生重大影响。
维数灾难: t-SNE 可以缓解但不能完全克服维数灾难。在应用 t-SNE 之前,极高维数据可能需要其他步骤,例如使用 PCA 进行初始降维。
学习率和迭代次数:除了困惑度之外,其他参数(如学习率和迭代次数)也会影响结果。学习率过高或过低都会导致嵌入效果不佳,而迭代次数不足可能意味着算法无法完全收敛。
它不是灵丹妙药:虽然 t-SNE 是一种强大的工具,但它并不适合每种数据集或分析。有时其他降维技术(如 PCA、UMAP 或 MDS)可能更合适。
t-SNE 的优点和缺点:
优点
• 如果操作正确,可以提供非常直观的可视化,因为它保留了较低维度中数据的局部结构

缺点
• 计算成本高
• 不太擅长保留全局结构
• 对超参数敏感
• 可能陷入局部最小值
• 解释具有挑战性

十、结论

我希望这篇博客能增强您对 t-SNE 概念的理解。如果您从此内容中获得了价值,请考虑关注我以获取更多有见地的帖子。感谢您花时间阅读本文。谢谢!

相关文章:

掌握特征提取:机器学习中的 PCA、t-SNE 和 LDA模型

文章目录 一、说明二、既然有 PCA 技术降维,为什么还要学习 t-SNE?2.1 t-SNE的核心思想:2.2 保持点之间的局部关系有什么意义?2.3 t-SNE 的几何直觉: 三、t-SNE 的数学公式:四、目标函数:五、梯…...

JAVA基础:注释

JAVA基础:注释 作用 使得代码中的一段文本不被执行,起到解释说明的作用。 分类 JAVA中的注释有三种: 单行注释 //单行注释多行注释 /* 多 行 注 释 */文档注释 /***@deprecated comments* @author lhy*/文档注释可以添加一些参数作为说明。 有趣的代码注释 卡车/* * *…...

从源码构建安装Landoop kafka-connect-ui

背景 部署Landoop kafka-connect-ui最简单的办法还是通过docker来部署,我们之前的kafka-connect-ui就是通过docker部署的,但是,最近发现个问题:当使用docker部署且防火墙使用的是firewalld的情况下,就会出现端口冲突。…...

【自动驾驶】Ubuntu22.04源码安装Autoware Core/Universe

【自动驾驶】Ubuntu22.04源码安装Autoware Core/Universe 官方源码安装教程前置条件安装ROS2 Humble安装Autoware Core/Universe配置开发环境配置工作空间设置控制台 官方源码安装教程 链接:https://autowarefoundation.github.io/autoware-documentation/main/ins…...

使用Nexus3搭建npm私有仓库

一、npm介绍 npm的全称是Node Package Manager,它是一个开放源代码的命令行工具,用于安装、更新和管理Node.js模块。npm是Node.js的官方模块管理器,它允许用户从一个集中的仓库中下载和安装公共的Node.js模块,并将这些模块集成到…...

OpenHarmony和OpenVela的技术创新以及两者对比

两款有名的国内开源操作系统,OpenHarmony,OpenVela都非常的优秀。本文对二者的创新进行一个简要的介绍和对比。 一、OpenHarmony OpenHarmony具有诸多有特点的技术突破和重要贡献,以下是一些主要方面: 架构设计创新 分层架构…...

【LeetCode每日一题】Leetcode 1071.字符串的最大公因子

Leetcode 1071.字符串的最大公因子 题目描述: 对于字符串 s 和 t,只有在 s t t t … t t(t 自身连接 1 次或多次)时,我们才认定 t 能除尽 s。 给定两个字符串 str1 和 str2 。返回 最长字符串 x,要…...

《C++:计算机视觉图像识别与目标检测算法优化的利器》

在当今科技飞速发展的时代,计算机视觉领域正经历着前所未有的变革与突破。图像识别和目标检测作为其中的核心技术,广泛应用于安防监控、自动驾驶、智能医疗等众多领域,其重要性不言而喻。而 C语言,凭借其卓越的性能、高效的资源控…...

大模型的构建与部署(2)——数据清洗

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. 数据清洗的必要性与影响 1.1 数据清洗对模型性能的影响 数据清洗是数据预处理的关键步骤,对于模型训练的性能和准确性有着直接的影响。原始数据中的缺失值、重复值、异常值以及数据格式不一致…...

试题转excel;word转excel;大风车excel

一、问题描述 一名教师朋友,偶尔会需要整理一些高质量的题目到excel中 以往都是手动复制搬运,几百道题几乎需要一个下午的时间 关键这些事,枯燥无聊费眼睛,实在是看起来就很蠢的工作 就想着做一个工具,可以自动处理…...

微信小程序webview和小程序通讯

1.背景介绍 1.1需要在小程序嵌入vr页面,同时在vr页面添加操作按钮与小程序进行通信交互 1.2开发工具:uniapp开发小程序 1.3原型图 功能:.点击体验官带看跳转小程序的体验官带看页面 功能:点击立即咨询唤起小程序弹窗打电话 2.…...

ChatGPT大模型 创作高质量文案的使用教程和案例

引言 随着人工智能技术的飞速发展,大语言模型如 ChatGPT 在创作文案、生成内容方面展现出了强大的能力。无论是个人用户还是企业用户,都可以利用 ChatGPT 提高工作效率、激发创意、甚至解决实际问题。本文将详细介绍 ChatGPT 如何帮助创作各类高质量文案,并通过具体案例展示…...

Vue Web开发(八)

1. VueWeb面包屑和tag的布局 本章节完成VueWeb面包屑和tag的布局,并且与左侧菜单联系,涉及组件间通信。 1.1. 页面创建 (1)首先我们先完成每个页面的路由,之前已经有home页面和user页面,缺少mail页面和其…...

element-ui实现table表格的嵌套(table表格嵌套)功能实现

最近在做电商类型的官网,希望实现的布局如下:有表头和表身,所以我首先想到的就是table表格组件。 表格组件中常见的就是:标题和内容一一对应: 像效果图中的效果,只用基础的表格布局是不行的,因…...

【考前预习】4.计算机网络—网络层

往期推荐 【考前预习】3.计算机网络—数据链路层-CSDN博客 【考前预习】2.计算机网络—物理层-CSDN博客 【考前预习】1.计算机网络概述-CSDN博客 目录 1.网络层概述 2.网络层提供的两种服务 3.分类编址的IPV4 4.无分类编址的IPV4—CIDR 5.IPV4地址应用规划 5.1使用定长子…...

【java】MDC

目录 1. 说明2. 作用3. 使用4. 与TraceID的关系5. 注意事项 1. 说明 1.MDC(Mapped Diagnostic Context)是一个用于在多线程环境中追踪和传递日志上下文信息的机制。2.映射诊断环境。3.MDC是一个线程本地的、可维护的、可传递的上下文环境。4.它允许开发…...

Android 好的开源库

1. 权限请求框架 GitHub - getActivity/XXPermissions: Android 权限请求框架,已适配 Android 14 2. 下载框架 GitHub - lingochamp/okdownload: A Reliable, Flexible, Fast and Powerful download engine....

Go 语言结构

Go 语言结构 Go 语言,也称为 Golang,是一种由 Google 开发和支持的静态类型、编译型编程语言。它于 2009 年首次发布,旨在提高多核处理器、网络资源和大型代码库的性能。Go 语言以其简洁的语法、并发支持和强大的标准库而闻名,特别适合构建高性能的网络服务和分布式系统。…...

【漆学军】MT5几个重要类库的使用例子

MT5编程&#xff0c;有两种方式&#xff0c;一种是函数式编程&#xff0c;一种是面向对象编程。 面向对象编程&#xff0c;会让我们编写代码变得非常简单。 面向对象编程&#xff0c;主要是要熟悉4个类库。 #include <Trade\PositionInfo.mqh> #include <Trade\Tra…...

在 Ubuntu 24.04.1 LTS (WSL) 中使用 openssl 生成 keybox.xml

看到“生成 keybox.xml”&#xff0c;大概率都会联想到 PIF 和 Tricky Store。这里就不多解释它们的用途了。最近在网上看到生成非 AOSP keybox 的教程&#xff0c;在这里做一些补充&#xff0c;并将代码打包成一个 Python 脚本。 参考自&#xff1a; Idea 提供者&#xff1a…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

计算机系统结构复习-名词解释2

1.定向&#xff1a;在某条指令产生计算结果之前&#xff0c;其他指令并不真正立即需要该计算结果&#xff0c;如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方&#xff0c;那么就可以避免停顿。 2.多级存储层次&#xff1a;由若干个采用不同实现技术的存储…...