【PyTorch][chapter 16][李宏毅深度学习][Neighbor Embedding][t-SNE]

前言:

       前面LLE 讲了两个点在高维空间距离相近,通过降维后也要保持这种关系

但是如果两个点在高维空间距离很远(不属于K邻近),降维后有可能叠加在一起了.

   t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种降维技术,LLE在进行降维时,都强调了降维后的相似的数据要尽可能地保持相似,但并没有说对于那些不相似的数据,要有多不相似这个问题.

    这就导致了在进行降维时,可能导致数据的重叠问题,导致在低维空间中一样很难进行区分。

这时就需要另一种降维的方法——T-SNE。  


目录

  1.    高维重构
  2.    SNE
  3.    t-SNE
  4.    Python 代码

一  高维重构

      假设高维空间有m个点

      [x_1,x_2,...x_m]

      对于高维空间的两个点 x_i,x_j

      p_{j|i}=\frac{exp(-||x_i-x_j||^2)}{\sum_{k\neq i}exp(||x_i-x_k||^2)}

       p_{j|i}代表x_jx_i的“邻居”的概率,值越大,说明两者越“临近”;

       \sigma_ix_i最临近的N个点的方差值,其中N是一个超参数.


二  SNE

     2.1 低维重构

      假设 低维空间的两个点 a_i,a_j,对应高维空间的两个点x_i,x_j

     a_i,a_j 之间也符合上面分布

      q_{j|i}=\frac{exp(-||a_i-a_j||^2)}{\sum_{k \neq i}exp(-||a_i-a_k||^2)}

    设  z_{j} =-||a_i-a_j||^2     

    则  q_{ji}=\frac{exp(z_{j})}{\sum_{k=1}^{K}exp(z_k)}

     

    该模型中: 求解的是a_i,a_j

2.2 损失函数

         如何得到a_i,a_j,使用KL 散度,使得高维空间和低维空间的样本概率分布一致

        J=\sum_i\sum_j p_{j|i}log \frac{p_{j|i}}{q_{j|i}}

     求a_i,a_j 的微分可以简化为

     J=-\sum_i\sum_j p_{ji}log q_{ji}

   求导和原理和softmax一样, 其中p_{ji} 已知值

2.3  softmax 导数回顾

      \hat{y_i}=\frac{e^{z_i}}{\sum_{j=1}^{k}e^{z_j}}

    损失函数

   J=-\sum_{i}y_ilog\hat{y_i}

    梯度为(one-hot 编码)

    \bigtriangledown z_i=\hat{y_i}-y_i

2.4  微分方法

     根据softmax 求导我们先固定\sum_j

    \frac{\partial J}{\partial z_i}= \sum_j (q_{ij}-p_{ij})

   则

  \frac{\partial J}{\partial a_i}= \frac{\partial J}{\partial z_i} \frac{\partial z_i}{\partial a_i}

      =2\sum_j(q_{ij}-p_{ij})(a_i-a_j)

  同样固定\sum_i

\frac{\partial J}{\partial a_i}=\sum_i(p_{ij}-q_{ij})(a_i-a_j)

  两者相加

 \frac{\partial J}{\partial a_i}=\sum_i(p_{ij}-q_{ij}+p_{ji}-q_{ji})(a_i-a_j)


 三   T-SNE

     t-SNE中的“t-分布”是一种特殊的概率分布函数,它在低维空间中有利于保留局部结构,同时对于远离的数据点,它会赋予较大的权重。这有助于在低维空间中更好地展示数据的结构。

     t-SNE 概率分布改为用t 分布

        q_{ij}=\frac{1+||a_i-a_j||_2^{-1}}{\sum_{k}(1+||a_i-a_k||_2^{-1})}

    微分

        \frac{\partial J }{\partial a_i}=4 \sum_j (p_{ij}-q_{ij})(a_i-a_j)(1+||a_i-a_j||_2^{-1})^{-1}


四  Python 代码

# -*- coding: utf-8 -*-
"""
Created on Mon Feb 19 17:55:14 2024@author: chengxf2
"""from sklearn.manifold import TSNE
from sklearn.datasets import load_iris
from sklearn.datasets import load_digits
import matplotlib.pyplot as pltdef load_digit():# 导入一个手写数据集(比MNIST数据集小),每个数据点是0-9的一张8*8灰度图像print("\n --load data--")digits = load_digits()X = digits.dataY = digits.targetprint("\n X:", X.shape)print("\n Y",Y.shape)return X,Ydef load_iris():'''Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。Returns-------None.'''    iris = load_iris()X = iris.dataY = iris.targetprint("\n X:", X.shape)print("\n Y",Y.shape)return X,Ydef t_SNE(X,Y):'''n_components:  降维后的维度,默认为2perplexixity:   默认为30,较大值会使得随机选择的领域更大n_iter : 迭代次数,默认1000init: 默认随机初始化'''tsne = TSNE(n_components=2, n_iter=1000).fit_transform(X)plt.subplot(121)plt.scatter(tsne[:, 0], tsne[:, 1], c=Y)plt.colorbar()plt.show()if __name__ == "__main__":print("\n ---enter---")X,Y = load_digit()print("\n ---降维----")t_SNE(X,Y)

参考:

15: Unsupervised Learning - Neighbor Embedding_哔哩哔哩_bilibili

https://www.cnblogs.com/501731wyb/p/16014141.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2803496.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu20配置protobuf 2.5.0

python安装protobuf包 sudo pip2 install protobuf2.5.0github克隆获取安装包 wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz解压并进入该目录 tar -zxvf Protobuf-2.5.0.tar.gz cd protobuf-2.5.0配置安装环境 sudo …

3.测试教程 - 基础篇

文章目录 软件测试的生命周期软件测试&软件开发生命周期如何描述一个bug如何定义bug的级别bug的生命周期如何开始第一次测试测试的执行和BUG管理产生争执怎么办(处理人际关系) 大家好,我是晓星航。今天为大家带来的是 测试基础 相关的讲解…

rt-thread 目录结构

移植适配可能需要修改的部分用红色标记,蓝色表示还需继续调查,绿色会在bring up后修改

【PostgreSQL】Windows安装PostgreSQL数据库图文详细教程

Windows安装PostgreSQL数据库图文详细教程 一、前言二、PostgreSQL简介三、软件下载四、安装步骤4.1 安装向导4.2 选择安装目录4.3 选择组件4.4 选择数据存放目录4.5 选择密码4.6 选择端口号4.7 等待安装完成4.8 取消勾选,安装完成 五、启动教程5.1 搜索pgAdmin4&am…

我们有在线社区啦!快来加入一起玩儿~

🙌大噶好呀!春节假期转瞬即逝,小陈已经正式开工啦~虽然不知道大家啥时候收假,但是 RTE 开发者社区㊗️诸位: 🧧🐲🙇2024 开工大吉🙇🐲&#x1f9…

编译原理第一章概述,文法,语言学习总结

1.编译程序: 翻译程序,源语言翻译为目标语言 C语言 ——>汇编语言 2.逻辑过程 词法分析 语法分析 语义分析 中间代码生成优化 目标代码生成优化 词法分析: 最基本的单词分析出来 语法分析:看组成…

Gradle统一管理依赖

背景 随着项目越来越大,module 越来越多,依赖的库也越来越多,依赖管理也越来越混乱。 我们一般会有以下需求: 1. 项目依赖统一管理,在单独文件中配置 2. 不同 Module 中的依赖版本号统一 管理 Gradle 依赖 说明&a…

通过platform总线驱动框架编写LED灯的驱动,编写应用程序测试,发布到CSDN

效果图 设备树代码 myplatform{compatible "hqyj,myplatform";led1-gpio<&gpioe 10 0>;led2-gpio<&gpiof 10 0>;led3-gpio<&gpioe 8 0>; interrupt-parent <&gpiof>;interrupts<9 0>;reg<0X12345678 …

抖店商家想要抓住2024年第一波流量,你需要这样做!

大家好&#xff0c;我是电商小布。 春节假期结束了&#xff0c;我们的工作也开始走入正轨当中了。 对于停工一段时间的抖店商家来说&#xff0c;想要在年后抓住第一波流量&#xff0c;该怎么做呢&#xff1f; 简单一点说&#xff0c;还是在运营上。 一、检查店铺类目情况 …

数字电路 第一章—第三节(逻辑函数的化简方法)

一、逻辑函数的标准与或式和最简式 1、标准与或表达式 &#xff08;1&#xff09;下图给出了逻辑函数Y的标准与或表达式&#xff0c;在表达式中每一个乘积项都具有标准形式&#xff0c;这种标准形式的乘积项称为最小项。 &#xff08;2&#xff09;最小项是逻辑代数中的一个…

Windows 2008部署

创建虚拟机2008 创建之后实现远程连接 后端部署 然后解压jdk tomcat mysql jdk 配置环境变量 修改JAVA_HOME 变量名&#xff1a;JAVA_HOME 变量值&#xff1a;电脑上JDK安装的绝对路径 修改CLASSPATH 变量名&#xff1a;CLASSPATH 变量值&#xff1a;.;%JAVA…

vue2+element医院安全(不良)事件报告管理系统源代码

目录 安全不良事件类型 源码技术栈 医院安全&#xff08;不良&#xff09;事件报告管理系统采用无责的、自愿的填报不良事件方式&#xff0c;有效地减轻医护人员的思想压力&#xff0c;实现以事件为主要对象&#xff0c;可以自动、及时、实际地反应医院的安全、不良、近失事件…

力扣经典题目解析--旋转图像(字节二面)

题目 原题地址: . - 力扣&#xff08;LeetCode&#xff09; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1…

基础软件之道:企业级实践与开源创新【文末送书-22】

文章目录 前言-基础软件之路&#xff1a;企业级实践及开源之路企业级实践1. 高可用性和容错性2. 安全性和隐私保护3. 自动化和DevOps实践 开源之路1. 开源操作系统2. 容器化和编排工具3. 数据库系统4. 自动化工具 基于编译器的静态代码分析与软件开发效率、质量和性能1、静态分…

Sora还太远!国产AI创作恐怖电影:《生化危机:重生》上

Sora用不上&#xff01;国产AI创作恐怖电影&#xff1a;《生化危机&#xff1a;重生》上 丧尸围城&#xff0c;世界沦陷&#xff0c;爱丽丝是拯救这个世界的最后一剂解药&#xff0c;然而。。。 《生化危机&#xff1a;重生》&#xff08;上&#xff09;电影开始地球已经被丧尸…

最长的回文串

开始想的简单了&#xff0c;确实没想到奇数字母删去一个后也能用 解法&#xff1a; 桶排序 #include<iostream> #include<vector> #include<algorithm> using namespace std; #define endl \n #define int long long signed main() {int t;cin >> t…

前后端分离vscode保险业务管理系统vue+Nodejs

本设计主要应用于完成对保险业务进行计算机化的管理。系统前台展示各种种类的保险&#xff0c;顾客可以选择登陆后买入。公司员工为管理员&#xff0c;由公司统一分配账号&#xff0c;员工用工号密码登陆。可以修改密码&#xff0c;查看、修改自己的信息。员工可处理顾客信息。…

Qt 事件

1. 事件 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。在Qt中使用一个对象来表示一个事件&#xff0c;它继承自QEvent类。 2. 事件和信号 事件与信号并不相同&#xff0c;比如我们使用鼠标点击了一下界面上的按钮&#xff0c;那么就会产生…

DT DAY3 信号和槽

作业&#xff1a; 1> 思维导图 2> 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 btn3 new QPushButton("按钮3",this);btn3->resize(ui->btn2->width(),ui->b…

【Spring】Spring MVC

目 录 一.什么是 Spring MVC&#xff1f;1.MVC 定义2.MVC 和 Spring MVC 的关系 二.为什么要学 Spring MVC&#xff1f;三.怎么学 Spring MVC&#xff1f;1.Spring MVC 创建和连接综上连接方式&#xff1a; 2.获取参数1.传递单个参数2.获取多个参数3.获取对象4.获取表单参数5.接…