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

【PyTorch][chapter 15][李宏毅深度学习][Neighbor Embedding-LLE]

前言:

     前面讲的都是线性降维,本篇主要讨论一下非线性降维.

流形学习(mainfold learning)是一类借鉴了拓扑流行概念的降维方法.

      如上图,欧式距离上面 A 点跟C点更近,距离B 点较远

     但是从图形拓扑结构来看, B 点跟A点更近


目录:

  1.    LLE 简介
  2.    高维线性重构
  3.    低维投影
  4.     Python 例子


一  局部线性嵌入(LLE Locally Linear Embedding )

           局部线性嵌入(Locally Linear Embedding,以下简称LLE)也是非常重要的降维方法。和传统的PCA,LDA等关注样本方差的降维方法相比,LLE关注于降维时保持样本局部的线性特征,由于LLE在降维时保持了样本的局部特征,它广泛的用于图像图像识别,高维数据可视化等领域。下面我们就对LLE的原理做一个总结。

   1.1  LLE 思想

          比如我们有一个样本 x_1,我们在它的原始高维邻域里用K-近邻算法(k=3)找到和它最近的三个样本 x_2,x_3,x_4    然后我们假设x_1,  可以由 x_2,x_3,x_4  线性表示,即:     

            x_1=w_{12}x_2+w_{13}x_3+w_{14}x_4w_{12},w_{13},w_{14}为权重系数。

   在我们通过LLE降维后,我们希望 x_1 在低维空间对应的投影z_1  ′和  x_2,x_3,x_4  对应的投影 z_2,z_3,z_4  也尽量保持同样的线性关系,即

              z_1=w_{12}z_2+w_{13}z_3+w_{14}z_4

 LLE算法的主要优点有:

    1)可以学习任意维的局部线性的低维流形

    2)算法归结为稀疏矩阵特征分解,计算复杂度相对较小,实现容易。

    LLE算法的主要缺点有:

    1)算法所学习的流形只能是不闭合的,且样本集是稠密均匀的。

    2)算法对最近邻样本数的选择敏感,不同的最近邻数对最后的降维结果有很大影响。


二  高维线性重构

         设有m个n维的样本

                        \begin{bmatrix} x_1\\ x_2 \\ .. \\ x_m \end{bmatrix}

        使用均方差作为损失函数

           J(W)=\sum_{i=1}^{m}||x_i-\sum_{j\in Q(i)}w_{ij}x_j||_2^2

        其中:

             Q(i): 按照欧式距离作为度量, 计算和样本点 x_i最近的的k个最近邻

               w_{ij}: 权重系数为标量,\sum_{j \in Q(i)} w_{ij}=1

       则

         J(W)=\sum_{i=1}^{m}||x_i\sum_{j\in Q(i)}w_{ij}-\sum_{j\in Q(i)}w_{ij}x_j||_2^2

                     =\sum_{i=1}^{m}||\sum_{j\in Q(i)}w_{ij }x_i-\sum_{j\in Q(i)}w_{ij}x_j||_2^2

                     =\sum_i \sum_j ||w_{ij}(x_i-x_j)||_2^2

                    =\sum_i W_i^T(x_i-x_j)(x_i-x_j)^TW_i

          例:

              

         设

                   S_i=(x_i-x_j)(x_i-x_j)^T(对称矩阵)

          则:

                   J(w)=\sum_{i}W_i^TS_iW_i

                加上约束条件

                  W_i^T1_K=1 其中

                      1_k=\begin{bmatrix} 1\\ 1 \\ .. \\ 1 \end{bmatrix} k行全1的列向量

             现在我们将矩阵化的两个式子用拉格朗日子乘法合为一个优化目标:

             L(W_i)=\sum_{j}W_i^TS_iW_i+\lambda(W_i^T1_k-1)

             对W_i求导并令其值为0,我们得到

             2S_iW_i+\lambda 1_k=0(前半部分 利用了S_i的对称性简化了)

            W_i=\frac{-\lambda}{2}(S_i)^{-1}1_k(公式1)

                   =\frac{S_i^{-1}1_k}{1_k^TS_i^{-1}1_k}(公式2)

公式2的解原理 

由约束条件:   W_i^T1_K=1  ,1_k^TW_i=1

已知:            W_i=\frac{-\lambda}{2}(S_i)^{-1}1_k

        则       

       1_k^TW_i=1

        1_k^T\frac{-\lambda}{2}S_i^{-1}1_k=1

         \frac{-\lambda}{2}=1/(1_k^TS_i^{-1}1_k)

     重新带入公式1 ,即得到公式2

          W_i=\frac{S_i^{-1}1_k}{1_k^TS_i^{-1}1_k}


三  低维投影

          我们得到了高维的权重系数W,那么我们希望这些权重系数对应的线性关系在降维后的低维一样得到保持。假设我们的n维样本集{x_1,x_2,...x_m}在低维的d维度对应投影为{z_1,z_2,...z_m}, 则我们希望保持线性关系,也就是希望对应的均方差损失函数最小,即最小化损失函数J(Y)如下:

                 J(z)=\sum_{i=1}^{m}||z_i-\sum_j^{m}w_{ij}z_j||_2^2

  注意:

       低维的损失函数中: 权重系数W已知,目标是求最小值对应的数据z

        W:   是[m,m]矩阵,我们将那些不在邻域位置的W_i的位置取值为0,将W扩充到m×m维度。

一般我们也会加入约束条件如下:

     \sum_{i=1}^{m}z_i=0

     \frac{1}{m}\sum_{i=1}^{m}z_iz_i^T=E: 单位矩阵

3.1 原理推导  

Z\sim R^{d*m}

损失函数为

 J(Z)=\sum_{i=1}^{m}||z_i-\sum_{j}^{m}W_{ij}z_j||_2^2

            =\sum_{i=1}^{m}||ZE_i-ZW_i||_2^2(步骤一)

            =\sum_{i=1}^{m}||Z(E_i-W_i)||_2^2

              =tr(Z(E-W)(E-W)^TZ^T)

备注: 步骤一原理

其中I_i, W_i 为m 行一列的列向量

下面一步推导用到了该知识:

tr(aa^T)=\sum_{i=1}^{m}a_i^2

a=\begin{bmatrix} a_1\\ a_2 \\ .... \\ a_m \end{bmatrix}

设 

M=(E-W)(E-W)^T

J(Z)=tr(ZMZ^T)

加上约束条件,得到拉格朗日函数

L(Z)=tr(ZMZ^T+\lambda(ZZ^T-mE))

对Z 求微分

2MZ^T+2\lambda Z^T=0

MZ^T=\lambda^{'} Z^T

要得到最小的d维数据集,我们需要求出矩阵M最小的d个特征值所对应的d个特征向量组成的矩阵Z=(z_1,z_2,..z_d)

由于M的最小特征值为0不能反应数据特征,此时对应的特征向量为全1。我们通常选择M的第2个到第d+1个最小的特征值对应的特征向量

2.2 为什么M的最小特征值为0呢?

前面知道约束条件: W^Te=1*e,

                                (W^T-E)e=0(注意大E和小e 不一样,前面是单位矩阵,后面是全1的列向量)

                              (E-W^T)e=0

                              (E-W)(E-W^T)e=0*(E-W)=0

                               (E-W)(E-W^T)e=0*e

                            所以最小的特征值为0,对应的特征向量为全1的列向量。

把该最小特征值丢弃

W^T=\begin{bmatrix} W_1^T\\ .... \\ W_i^T\\ ....\\ W_m^T\end{bmatrix}e=\begin{bmatrix} 1\\ 1 \\ ... \\ 1 \end{bmatrix}   W_1^Te=1,W_2^Te=1,..W_i^T=e


四 Python 例子

# -*- coding: utf-8 -*-
"""
Created on Wed Feb  7 17:02:55 2024@author: chengxf2
"""import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import manifold, datasets
from sklearn.utils import check_random_statedef generateData(m = 500):random_state = check_random_state(0)p = random_state.rand(m) * (2 * np.pi - 0.55)t = random_state.rand(m) * np.pi# 让球体不闭合,符合流形定义indices = ((t < (np.pi - (np.pi / 8))) & (t > ((np.pi / 8))))colors = p[indices]x, y, z = np.sin(t[indices]) * np.cos(p[indices]), \np.sin(t[indices]) * np.sin(p[indices]), \np.cos(t[indices])fig = plt.figure()ax = Axes3D(fig, elev=30, azim=-20,auto_add_to_figure=False)fig.add_axes(ax)ax.scatter(x, y, z, c=p[indices], marker='o', cmap=plt.cm.rainbow)plt.show()return x,y,z,colorsdef LLE():x,y,z,colors= generateData()train_data = np.array([x,y,z]).Tprint("\n 高维空间shape",np.shape(train_data))#n_neighbors: 高维空间K邻近选择的点个数#n_components:低维空间的维度#[362,2]trans_data = manifold.LocallyLinearEmbedding(n_neighbors =10, n_components = 2,method='standard').fit_transform(train_data)print("\n 低维空间shape",np.shape(trans_data))size = np.random.rand(363)*100fig = plt.figure()plt.scatter(trans_data[:, 0], trans_data[:, 1],s=size, marker='o',c=colors)LLE()

参考:

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

https://www.cnblogs.com/pinard/p/6266408.html

相关文章:

【PyTorch][chapter 15][李宏毅深度学习][Neighbor Embedding-LLE]

前言&#xff1a; 前面讲的都是线性降维&#xff0c;本篇主要讨论一下非线性降维. 流形学习&#xff08;mainfold learning&#xff09;是一类借鉴了拓扑流行概念的降维方法. 如上图,欧式距离上面 A 点跟C点更近&#xff0c;距离B 点较远 但是从图形拓扑结构来看&#xff0c; …...

在JSP中实现JAVABEAN

在JSP中实现JAVABEAN 问题陈述 创建Web应用程序以连接数据库并检索作者名、地址、城市、州及邮政编码等与作者的详细信息。JavaBean组件应接受作者ID、驱动程序名及URL作为参数。信息要从authors表中检索。 解决方案 要解决上述问题,需要执行以下任务: 创建Web应用程序。创…...

智能优化算法 | Matlab实现飞蛾扑火(MFO)(内含完整源码)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现飞蛾扑火(MFO)(内含完整源码) 源码设计 %%%% clear all clc SearchAgents_no=100; % Number of search ag...

LSF 主机状态 unreach 分析

在LSF集群运行过程中&#xff0c;有主机状态变为 unreach。熟悉LSF的朋友都知道主机状态为 unreach 表示主机上的 SBD 服务中断服务了&#xff0c;但其它服务 LIM 和 RES 还在正常运行。 影响分析 那么主机上的 SBD 服务中断的影响是什么呢&#xff1f; 我们需要先明白 SBD …...

SpringBoot日志

自定义日志 导入的是slf4j的Logger类 package app.controller;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.GetMapping;RestController pu…...

006集——where语句进行属性筛选——arcgis

在arcgis中&#xff0c; dBASE 文件除了 WHERE 语句以外&#xff0c;不支持 其它 SQL 命令。选择窗口如下&#xff1a; 首先&#xff0c;我们了解下什么是where语句。 WHERE语句是SQL语言中使用频率很高的一种语句。它的作用是从数据库表中选择一些特定的记录行来进行操作。WHE…...

《动手学深度学习(PyTorch版)》笔记8.3

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…...

静态时序分析:建立时间分析

静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 在静态时序分析中&#xff0c;建立时间检查约束了触发器时钟引脚&#xff08;时钟路径&#xff09;和输入数据引脚&#xff08;数据路径&#xff09;之间的时序关系&#x…...

深入探究 HTTP 简化:httplib 库介绍

✏️心若有所向往&#xff0c;何惧道阻且长 文章目录 简介特性主要类介绍httplib::Server类httplib::Client类httplib::Request类httplib::Response类 示例服务器客户端 总结 简介 在当今的软件开发中&#xff0c;与网络通信相关的任务变得日益普遍。HTTP&#xff08;Hypertext…...

ARP欺骗攻击利用之抓取https协议的用户名与密码

1.首先安装sslstrip 命令执行&#xff1a;apt-get install sslstrip 2.启动arp欺骗 arpspoof -i ech0 -t 192.168.159.148 192.168.159.2 arpspoof -i ech0(网卡) -t 目标机ip 本地局域网关 3.命令行输入: vim /etc/ettercap/etter.conf进入配置文件 找到下红框的内容&a…...

<s-table>、<a-table>接收后端数据

对于 中的 <template #bodyCell“{ column, record }”> &#xff1a; <s-tableref"table":columns"columns":data"loadData":alert"options.alert.show"bordered:row-key"(record) > record.id":tool-config&…...

[数学]高斯消元

介绍 用处&#xff1a;求解线性方程组 加减消元法和代入消元法 这里引用了高斯消元解线性方程组----C实现_c用高斯消元法解线性方程组-CSDN博客 改成了自己常用的形式&#xff1a; int gauss() {int c, r; // column, rowfor (c 1, r 1; c < n; c ){int maxx r; //…...

【Linux】gdb调试与make/makefile工具

目录 导读 1. make/Makefile 1.1 引入 1.2 概念 1.3 语法规则 1.4 示例 2. Linux调试器-gdb 2.1 引入 2.2 概念 2.3 使用 导读 我们在上次讲了Linux编辑器gcc\g的使用&#xff0c;今天我们就来进一步的学习如何调试&#xff0c;以及makefile这个强大的工具。 1. mak…...

使用Arcgis裁剪

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、掩膜提取二、随意裁剪三、裁剪 前言 因为从网站下载的是全球气候数据&#xff0c;而我们需要截取成中国部分&#xff0c;需要用到Arcgis的裁剪工具 一、掩…...

sheng的学习笔记-网络爬虫scrapy框架

基础知识&#xff1a; scrapy介绍 何为框架&#xff0c;就相当于一个封装了很多功能的结构体&#xff0c;它帮我们把主要的结构给搭建好了&#xff0c;我们只需往骨架里添加内容就行。scrapy框架是一个为了爬取网站数据&#xff0c;提取数据的框架&#xff0c;我们熟知爬虫总…...

Qt PCL学习(三):点云滤波

注意事项 版本一览&#xff1a;Qt 5.15.2 PCL 1.12.1 VTK 9.1.0前置内容&#xff1a;Qt PCL学习&#xff08;一&#xff09;&#xff1a;环境搭建、Qt PCL学习&#xff08;二&#xff09;&#xff1a;点云读取与保存、PCL学习六&#xff1a;Filtering-滤波 0. 效果演示 1. vo…...

Ainx-V0.2-简单的连接封装与业务绑定

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于Ainx系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列…...

《杨绛传:生活不易,保持优雅》读书摘录

目录 书简介 作者成就 书中内容摘录 良好的家世背景&#xff0c;书香门第为求学打基础 求学相关 念大学 清华研究生 自费英国留学 法国留学自学文学 战乱时期回国 当校长 当小学老师 创造话剧 支持钱锺书写《围城》 出任震旦女子文理学院的教授 接受清华大学的…...

ChatGPT在肾脏病学领域的专业准确性评估

ChatGPT在肾脏病学领域的专业表现评估 随着人工智能技术的飞速发展&#xff0c;ChatGPT作为一个先进的机器学习模型&#xff0c;在多个领域显示出了其对话和信息处理能力的潜力。近期发表在《美国肾脏病学会临床杂志》&#xff08;影响因子&#xff1a;9.8&#xff09;上的一项…...

Centos7.9安装SQLserver2017数据库

Centos7.9安装SQLserver2017数据库 一、安装前准备 挂载系统盘 安装依赖 yum install libatomic* -y 二、yum方式安装 # 配置 yum 源 wget -O /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repoyum clean all yum…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...