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

news2024/9/25 13:22:58

前言:

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

流形学习(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_state


def 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,colors


def LLE():
    
    x,y,z,colors= generateData()
    
    train_data = np.array([x,y,z]).T
    print("\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)*100
    fig = 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

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

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

相关文章

书生·浦语大模型全链路开源体系

1&#xff0c;简述大模型的定义与特点&#xff1a; 大模型是指参数数量大于10亿的模型&#xff0c;它的特点包括&#xff1a;模型规模大&#xff0c;数据规模大&#xff0c;计算规模大和任务数量 2. 分析大模型成为通用人工智能的重要途径的原因&#xff1a; 大模型能够从大…

2023年的技术变革,我不是破坏大环境的人

文章目录 前言2023年的技术变革人工智能的崛起元宇宙的跌落物联网的渗入 技术变革的背后技术变革的影响积极的影响负面的影响 技术变革带来的思考 前言 2023无疑是一个充满变革和创新的一年&#xff0c;这背后离不开技术的发展和进步。不论是人工智能的崛起&#xff0c;还是元…

[word] word表格内容自动编号 #经验分享#微信#其他

word表格内容自动编号 在表格中的内容怎么样自动编号&#xff1f;我们都知道Word表格和Excel表格有所不同&#xff0c;Excel表格可以轻松自动编号&#xff0c;那么在Word表格中如何自动编号呢&#xff1f; 1、选中内容后&#xff0c;点击段落-自动编号&#xff0c;选择其中一…

数据结构——C/栈和队列

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特…

计算机缺失concrt140.dll怎么修复?分享5种有效的修复方法

在计算机系统运行过程中&#xff0c;如果发现无法找到“concrt140.dll”这个特定的动态链接库文件&#xff0c;可能会引发一系列问题和故障。首先&#xff0c;我们需要了解“concrt140.dll”是Microsoft Visual Studio中用于实现并行计算框架的重要组件&#xff0c;它的缺失会导…

HarmonyOS 鸿蒙应用开发(十、第三方开源js库移植适配指南)

在前端和nodejs的世界里&#xff0c;有很多开源的js库&#xff0c;通过npm(NodeJS包管理和分发工具)可以安装使用众多的开源软件包。但是由于OpenHarmony开发框架中的API不完全兼容V8运行时的Build-In API&#xff0c;因此三方js库大都需要适配下才能用。 移植前准备 建议在适…

RabbitMQ的延迟队列实现[死信队列](笔记二)

上一篇已经讲述了实现死信队列的rabbitMQ服务配置&#xff0c;可以点击: RabbitMQ的延迟队列实现(笔记一) 目录 搭建一个新的springboot项目模仿订单延迟支付过期操作启动项目进行测试 搭建一个新的springboot项目 1.相关核心依赖如下 <dependency><groupId>org.…

Linux | 进度条 | Linux简单小程序 | 超级简单 | 这一篇就够了

进度条—实例示范 在学习了基本的Linux指令&#xff0c;Linux上vim编译器等等之后&#xff0c;我们就来学习写代码喽~ 今天就给大家详细讲解一下进度条的编写&#xff0c;需要的效果如下图&#xff1a; 进度条—必备知识 回车和换行 在我们学习编程语言中&#xff0c;经常…

【力扣 - 回文链表】

题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 提示&#xff1a; 链表中节点数目在范围[1, 100000] 内 0 < Node.val < 9 方法一&#xff1a;将值复制到数…

jsp教材管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教材管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

网工内推 | 高级网工,IE认证优先,最高15K,五险一金

01 丰沃创新(北京)科技有限公司 招聘岗位&#xff1a;高级网络工程师 职责描述&#xff1a; 1. 主要负责移动营运商数据中心机房网络的维护工作&#xff1b; 2. 负责防火墙策略调整&#xff0c;负责交换机路由器等网络设备的配置&#xff1b; 3. 负责云专线的入网配置&#…

07:Kubectl 命令详解|K8S资源对象管理|K8S集群管理(重难点)

Kubectl 命令详解&#xff5c;K8S资源对象管理&#xff5c;K8S集群管理 kubectl管理命令kubectl get 查询资源常用的排错命令kubectl run 创建容器 POD原理pod的生命周期 k8s资源对象管理资源文件使用资源文件管理对象Pod资源文件deploy资源文件 集群调度的规则扩容与缩减集群更…

解析spritf和sscanf与模拟常用字符串函数strchr,strtok(二)

今天又来继续我们的字符串函数的文章&#xff0c;这也是最后一篇了。希望这两篇文章能让各位理解透字符串函数。 目录 strchr strtok sprintf和sscanf strchr strchr 是一个用于在字符串中查找特定字符首次出现位置的函数。以下是解析和模拟实现 strchr 函数的示例&…

缓存和分布式锁 笔记

概念 缓存的作用是减低对数据源的访问频率。从而提高我们系统的性能。缓存的流程图 缓存分类 本地缓存 把缓存数据存储在内存中(Map <String,Object>)&#xff0c;其实就是强引用&#xff0c;不会轻易被删除。 分布式缓存 数据冗余&#xff0c;效率不高 整合Redis &l…

计算机设计大赛 深度学习 YOLO 实现车牌识别算法

文章目录 0 前言1 课题介绍2 算法简介2.1网络架构 3 数据准备4 模型训练5 实现效果5.1 图片识别效果5.2视频识别效果 6 部分关键代码7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度学习车牌识别系统实现 该项目较…

新型RedAlert勒索病毒针对VMWare ESXi服务器

前言 RedAlert勒索病毒又称为N13V勒索病毒&#xff0c;是一款2022年新型的勒索病毒&#xff0c;最早于2022年7月被首次曝光&#xff0c;主要针对Windows和Linux VMWare ESXi服务器进行加密攻击&#xff0c;到目前为止该勒索病毒黑客组织在其暗网网站上公布了一名受害者&#x…

【芯片设计- RTL 数字逻辑设计入门 11.2 -- 状态机实现 移位运算与乘法 2】

文章目录 移位运算与乘法parameterparameter 特点parameter 基本语法parameter 示例局部参数局部参数示例 状态机代码实现VCS 仿真结果 文章 【芯片设计- RTL 数字逻辑设计入门 11.1 – 状态机实现 移位运算与乘法 1】 介绍了状态机&#xff0c;本篇文章主要就是使用状态机的方…

Vision Pro 5 月将在中国区发售;全球科技大厂 1 月已裁员 32000 人丨RTE 开发者日报 Vol.145

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

Stable Diffusion 模型下载:Disney Pixar Cartoon Type A(迪士尼皮克斯动画片A类)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 目前还没有一个好的皮克斯迪士尼风格的卡通模型&#xff0c;所以我决定自己制作一个。这是将皮克斯风格模型与我自己的Loras合并在一起&#xff0c;创建一个通用的…