局部线性嵌入(LLE)的代码示例以及详细数学解释

文章目录

  • 局部线性嵌入(LLE)的数学原理
  • LLE中的重建权重计算
    • 示例
  • LLE降维映射的详细解释
    • LLE降维映射的示例
      • 示例数据集
        • 降维映射
  • 从LLE的特征值和特征向量到低维数据(低维嵌入)
    • 特征值和特征向量的计算
    • 选择特征向量以获得低维表示
    • 构建低维数据表示
  • 代码
    • 结果

局部线性嵌入(LLE)的数学原理

局部线性嵌入(LLE)是一种非线性降维方法,它的目标是在较低维度空间中保持高维数据的局部特征。LLE的步骤可以概括如下:

  1. 邻域选择:对于每个数据点 x i x_i xi,找出其 k k k 个最近邻。

  2. 重建权重计算:对每个点 x i x_i xi,使用其邻域中的点来线性重建它,并找到重建误差最小的权重系数。这可以通过最小化下列代价函数实现:
    min ⁡ ∑ i ∣ x i − ∑ j ∈ N ( i ) W i j x j ∣ 2 \min \sum_i \left| x_i - \sum_{j \in N(i)} W_{ij} x_j \right|^2 mini xijN(i)Wijxj 2
    其中, N ( i ) N(i) N(i) 表示 x i x_i xi 的邻域中的点的集合, W i j W_{ij} Wij 是重建权重。

  3. 降维映射:在低维空间中寻找点 y i y_i yi 的集合,使得这些点保持原始重建权重所表示的局部几何结构。这涉及到最小化以下代价函数:
    min ⁡ ∑ i ∣ y i − ∑ j ∈ N ( i ) W i j y j ∣ 2 \min \sum_i \left| y_i - \sum_{j \in N(i)} W_{ij} y_j \right|^2 mini yijN(i)Wijyj 2

LLE的核心目标是在保留高维空间中局部结构的同时,找到数据点的低维表示 y i y_i yi

LLE中的重建权重计算

在LLE算法中,重建权重计算是一个关键步骤,目的是在高维空间中使用每个数据点的邻域来线性重建该点。这一步骤可以分解为以下几个部分:

  1. 选择邻域:对于每个数据点 x i x_i xi,根据某种准则(如欧几里得距离)找出其 k k k 个最近邻。

  2. 计算重建权重:对于每个点 x i x_i xi,找出一组权重 W i j W_{ij} Wij,使得使用这些权重线性组合邻域中的点所得到的重建点 x ^ i = ∑ j ∈ N ( i ) W i j x j \hat{x}_i = \sum_{j \in N(i)} W_{ij} x_j x^i=jN(i)Wijxj 与原始点 x i x_i xi 尽可能接近。这通过最小化下列代价函数实现:
    min ⁡ W i j ∑ i ∥ x i − ∑ j ∈ N ( i ) W i j x j ∥ 2 \min_{W_{ij}} \sum_i \| x_i - \sum_{j \in N(i)} W_{ij} x_j \|^2 WijminixijN(i)Wijxj2
    其中,约束条件是对于每个 i i i ∑ j ∈ N ( i ) W i j = 1 \sum_{j \in N(i)} W_{ij} = 1 jN(i)Wij=1

示例

假设我们的数据集包含三个点:A ( 0 , 0 ) (0, 0) (0,0),B ( 1 , 0 ) (1, 0) (1,0) 和 C ( 1 , 1 ) (1, 1) (1,1)。我们的目标是为点 A 计算重建权重,假设它的最近邻是点 B 和点 C。

  1. 定义重建误差:重建误差是原始点和基于其邻居的线性组合之间的差异。对于点 A,这个误差可以表示为:
    E = ∥ A − ( W A B ⋅ B + W A C ⋅ C ) ∥ 2 E = \| A - (W_{AB} \cdot B + W_{AC} \cdot C) \|^2 E=A(WABB+WACC)2
    其中, W A B W_{AB} WAB W A C W_{AC} WAC 是我们要找的重建权重。

  2. 应用约束条件:在LLE中,每个点的重建权重之和应该等于1,即 W A B + W A C = 1 W_{AB} + W_{AC} = 1 WAB+WAC=1。这保证了重建过程的稳定性。

  3. 构建并求解优化问题:我们需要最小化重建误差 E E E,同时满足权重的约束条件。将点 A, B, C 的坐标代入,并利用约束条件简化表达式,得到一个可以求解的优化问题。

考虑点 A ( 0 , 0 ) (0, 0) (0,0),点 B ( 1 , 0 ) (1, 0) (1,0) 和点 C ( 1 , 1 ) (1, 1) (1,1),我们可以将重建误差 E E E 表达为:
E = [ ( 0 − W A B ⋅ 1 − W A C ⋅ 1 ) 2 + ( 0 − W A B ⋅ 0 − W A C ⋅ 1 ) 2 ] E = \left[ (0 - W_{AB} \cdot 1 - W_{AC} \cdot 1)^2 + (0 - W_{AB} \cdot 0 - W_{AC} \cdot 1)^2 \right] E=[(0WAB1WAC1)2+(0WAB0WAC1)2]
根据约束条件 W A B + W A C = 1 W_{AB} + W_{AC} = 1 WAB+WAC=1,我们可以替换其中一个权重,比如用 W A B = 1 − W A C W_{AB} = 1 - W_{AC} WAB=1WAC
W A B = 1 − W A C W_{AB} = 1 - W_{AC} WAB=1WAC 代入代价函数,得到:
E = [ ( 0 − ( 1 − W A C ) ⋅ 1 − W A C ⋅ 1 ) 2 + ( 0 − ( 1 − W A C ) ⋅ 0 − W A C ⋅ 1 ) 2 ] E = \left[ (0 - (1 - W_{AC}) \cdot 1 - W_{AC} \cdot 1)^2 + (0 - (1 - W_{AC}) \cdot 0 - W_{AC} \cdot 1)^2 \right] E=[(0(1WAC)1WAC1)2+(0(1WAC)0WAC1)2]
简化后得到:
E = [ − 2 W A C + 1 ] 2 + [ − W A C ] 2 E = \left[ -2W_{AC} + 1 \right]^2 + \left[ -W_{AC} \right]^2 E=[2WAC+1]2+[WAC]2

  1. 求导:对 E E E 关于 W A C W_{AC} WAC 求导,得到:
    d E d W A C = 2 ( − 2 W A C + 1 ) ( − 2 ) + 2 ( − W A C ) ( − 1 ) \frac{dE}{dW_{AC}} = 2(-2W_{AC} + 1)(-2) + 2(-W_{AC})(-1) dWACdE=2(2WAC+1)(2)+2(WAC)(1)
    简化后得到:
    d E d W A C = 8 W A C − 4 − 2 W A C = 6 W A C − 4 \frac{dE}{dW_{AC}} = 8W_{AC} - 4 - 2W_{AC} = 6W_{AC} - 4 dWACdE=8WAC42WAC=6WAC4

  2. 求解最优权重:令导数等于零解出 W A C W_{AC} WAC
    6 W A C − 4 = 0    ⟹    W A C = 2 3 6W_{AC} - 4 = 0 \implies W_{AC} = \frac{2}{3} 6WAC4=0WAC=32
    因此, W A B = 1 − W A C = 1 3 W_{AB} = 1 - W_{AC} = \frac{1}{3} WAB=1WAC=31

综上所述,对于点 A,最优的重建权重是 W A B = 1 3 W_{AB} = \frac{1}{3} WAB=31 W A C = 2 3 W_{AC} = \frac{2}{3} WAC=32

这个结果表明,在使用点 B 和点 C 重建点 A 的过程中,点 C 对重建点 A 的贡献比点 B 大。

LLE降维映射的详细解释

在局部线性嵌入(LLE)算法中,降维映射是最后一个步骤,它的目标是在低维空间中找到一个数据点的新表示,这些新表示应保留高维空间中的局部结构。这是通过优化一个新的代价函数来实现的,该函数基于之前计算的重建权重。

  1. 定义低维映射的代价函数:假设 y i y_i yi 是高维空间中点 x i x_i xi 的低维表示。降维映射的目标是最小化以下代价函数:
    Φ = ∑ i ∥ y i − ∑ j ∈ N ( i ) W i j y j ∥ 2 \Phi = \sum_i \| y_i - \sum_{j \in N(i)} W_{ij} y_j \|^2 Φ=iyijN(i)Wijyj2
    其中, W i j W_{ij} Wij 是之前计算得到的重建权重, N ( i ) N(i) N(i) 是点 x i x_i xi 的邻域。

  2. 优化过程:这个优化过程寻找一组低维表示 { y i } \{y_i\} {yi},使得每个点 y i y_i yi 与使用其高维邻居的重建权重 W i j W_{ij} Wij 线性组合的低维表示尽可能接近。这个过程通常需要使用数值优化方法来实现,因为直接解析求解可能非常复杂。

  3. 保持局部结构:通过这种方式,低维表示 { y i } \{y_i\} {yi} 能够保留原始高维数据中的局部邻域关系。如果两个高维点在原始空间中彼此接近,它们的低维表示也会彼此接近。

LLE降维映射的示例

假设我们有一个简单的高维数据集,并且我们已经计算出了每个点的重建权重。现在,我们的目标是将这些点映射到低维空间(例如,从3维映射到2维)。我们将展示这个过程的简化版本。

示例数据集

考虑以下三维空间中的四个点:

  • 点 A: ( 1 , 2 , 3 ) (1, 2, 3) (1,2,3)
  • 点 B: ( 4 , 5 , 6 ) (4, 5, 6) (4,5,6)
  • 点 C: ( 7 , 8 , 9 ) (7, 8, 9) (7,8,9)
  • 点 D: ( 10 , 11 , 12 ) (10, 11, 12) (10,11,12)

假设我们已经根据LLE的第一步计算出了重建权重,例如:

  • 对于点 A,邻居是 B 和 C,权重分别是 W A B = 0.5 W_{AB} = 0.5 WAB=0.5 W A C = 0.5 W_{AC} = 0.5 WAC=0.5
  • 类似地,对于其他点也有类似的邻居和权重。
降维映射
  1. 优化问题:我们现在希望找到这些点在二维空间中的新表示 { y i } \{y_i\} {yi},使得代价函数 Φ \Phi Φ 最小:
    Φ = ∑ i ∥ y i − ∑ j ∈ N ( i ) W i j y j ∥ 2 \Phi = \sum_i \| y_i - \sum_{j \in N(i)} W_{ij} y_j \|^2 Φ=iyijN(i)Wijyj2
    在这个例子中,我们将求解一组新坐标 { y A , y B , y C , y D } \{y_A, y_B, y_C, y_D\} {yA,yB,yC,yD}

  2. 数值求解:在实际应用中,这通常需要使用数值优化方法,如梯度下降或特征值分解,来求解。

  3. 构建矩阵M:根据计算出的重建权重,我们构建一个矩阵M。这个矩阵的元素是通过比较每对点之间的重建权重差异得到的。对于点A,B,C和D,这个矩阵可能看起来像这样(这是一个简化的示例):
    M = [ 1 − 0.3 − 0.7 0 − 0.3 1 − 0.4 − 0.3 − 0.7 − 0.4 1 − 0.1 0 − 0.3 − 0.1 1 ] M = \begin{bmatrix} 1 & -0.3 & -0.7 & 0 \\ -0.3 & 1 & -0.4 & -0.3 \\ -0.7 & -0.4 & 1 & -0.1 \\ 0 & -0.3 & -0.1 & 1 \end{bmatrix} M= 10.30.700.310.40.30.70.410.100.30.11
    矩阵 M 的构建
    对角线元素:矩阵 M M M 的每个对角线元素 M i i M_{ii} Mii 反映了点 i i i 与其邻居的重建权重之和:
    M i i = 1 − ∑ j ∈ N ( i ) W i j 2 M_{ii} = 1 - \sum_{j \in N(i)} W_{ij}^2 Mii=1jN(i)Wij2
    其中, N ( i ) N(i) N(i) 表示点 i i i 的邻居集合, W i j W_{ij} Wij 是点 i i i 用于重建自己的来自邻居 j j j 的权重。
    非对角线元素(邻居间):对于邻居点 i i i j j j,矩阵 M M M 中的元素 M i j M_{ij} Mij 是它们之间的重建权重:
    M i j = − W i j 如果   j ∈ N ( i ) M_{ij} = -W_{ij} \quad \text{如果} \, j \in N(i) Mij=Wij如果jN(i)
    这表示点 i i i j j j 在重建过程中的直接影响。
    非对角线元素(非邻居间):对于不是邻居的点 i i i j j j,矩阵 M M M 的元素 M i j M_{ij} Mij 设为0:
    M i j = 0 如果   j ∉ N ( i )   且   i ∉ N ( j ) M_{ij} = 0 \quad \text{如果} \, j \notin N(i) \, \text{且} \, i \notin N(j) Mij=0如果j/N(i)i/N(j)

  4. 求解特征值问题:接下来,我们解决特征值问题 M v = λ v Mv = \lambda v Mv=λv,其中 v v v是特征向量, λ \lambda λ是特征值。我们关注的是最小的非零特征值对应的特征向量。

  5. 低维嵌入:找到对应最小非零特征值的特征向量后,这些特征向量(除了对应最小特征值的向量)构成了数据的低维嵌入。在我们的例子中,这将是一个2维表示。

从LLE的特征值和特征向量到低维数据(低维嵌入)

在LLE算法中,一旦计算出矩阵 M M M 的特征值和特征向量,我们可以按照以下步骤得到数据的低维表示:

特征值和特征向量的计算

  1. 求解特征值问题:首先,我们求解特征值问题 M v = λ v Mv = \lambda v Mv=λv,其中 v v v 是特征向量, λ \lambda λ 是对应的特征值。通常,这是通过数值方法完成的,如使用Python中的 numpy.linalg.eigh 函数。

  2. 排序特征值:求解后,我们得到一系列特征值和相应的特征向量。特征值按照从小到大的顺序排序,与之对应的特征向量也按同样的顺序排列。

选择特征向量以获得低维表示

  1. 选择最小的非零特征值:在LLE中,我们通常忽略最小的特征值(通常接近或等于零),因为它对应的特征向量通常是数据的平均值或类似的全局结构。

  2. 选择后续特征向量:为了得到 ( k ) 维的低维表示,我们选择紧随最小特征值之后的 ( k ) 个特征向量。例如,如果我们想将数据降至2维,我们将选择第二小和第三小的特征值对应的特征向量。

构建低维数据表示

  1. 构建特征向量矩阵:将选定的特征向量组合成一个矩阵,其中每一列是一个特征向量。假设我们选择了第二小和第三小的特征值对应的特征向量,那么这个矩阵将有两列。

  2. 转换为低维数据:这个特征向量矩阵就是数据点在低维空间中的新坐标。每个数据点的低维表示是这个矩阵中相应行的值。

代码

import numpy as np
from scipy.spatial.distance import pdist, squareform
from scipy.linalg import eigh

def compute_reconstruction_weights(X, k):
    n_samples = X.shape[0]
    W = np.zeros((n_samples, n_samples))
    for i in range(n_samples):
        distances = np.sum((X[i] - X) ** 2, axis=1)
        neighbors = np.argsort(distances)[1:k+1]

        # 构建局部邻域矩阵
        K = X[neighbors] - X[i]
        G = K.dot(K.T)
        G_inv = np.linalg.inv(G + np.eye(k) * 1e-3) # 加入小的正则项防止矩阵奇异

        # 计算重建权重
        weights = G_inv.sum(axis=1) / G_inv.sum()
        W[i, neighbors] = weights

    return W

def lle(X, k, n_components):
    W = compute_reconstruction_weights(X, k)

    # 构建矩阵 M
    M = (np.eye(len(X)) - W).T @ (np.eye(len(X)) - W)

    # 计算特征值和特征向量
    eigenvalues, eigenvectors = eigh(M, eigvals=(1, n_components))

    return eigenvectors

# 示例数据(可以是任意高维数据)
np.random.seed(0)
X = np.random.rand(10, 3) # 10个样本,每个样本3维

# 使用LLE降维到2维
embedded_X = lle(X, k=5, n_components=2)

print("低维表示:\n", embedded_X)

结果

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue-springboot基于JavaWeb的汽配汽车配件销售采购管理系统

过对知识内容的学习研究,进而设计并实现一个基于JavaWeb的汽配销售管理系统。系统能实现的主要功能应包括;汽车配件、销售订单、采购订单、采购入库等的一些操作,ide工具:IDEA 或者eclipse 编程语言: java 数据库: mysql5.7 框架&…

C语言之整型提升

文章目录 1 有可能出现的问题2 产生以上问题的原因&#xff08;整型提升&#xff09;3 整型提升的过程4 整型提升示例5 总结 1 有可能出现的问题 代码如下 #include <stdio.h>int main () {int a -1;unsigned int b 1;if (a < b) {printf("a < b");}…

【年度总结 | 2023】稳步前进吧,少年

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

家政行业的小程序都需要具备哪些功能?

家政服务小程序&#xff0c;覆盖多城&#xff0c;在线派单 适合行业&#xff1a;家电维修、家政保洁、养生护理、美容美发、预约服务上门等 系统功能&#xff1a;服务管理、商品管理、拼团/秒杀、订单管理、会员管理、派单管理、师傅管理、商家/服务点、财务管理、城市代理、次…

《Redis实战》学习笔记

特点 &#xff1a;1、是一个高性能的key/value内存型数据库 2、支持丰富的数据类型(string,List,Set,ZSet,Hash) 3、支持持久化 内存数据&#xff0c; 可以持久化到硬盘中 4、单进程&#xff0c;单线程 效率高 redis实现分布式锁 一、redis的相关指令 1、flushDB 清空当前…

机器学习--主成分分析 PCA

特征维度约减 特征约减的目的是将高维特征向量映射到低维子空间中。比如&#xff1a; 给定n个样本&#xff08;每个样本维度为p维&#xff09;{x1,....xn} 通过特征变换/投影矩阵实现特征空间的压缩: 高维数据 为何要维度约减? 数据压缩和存储&#xff1a;高维数据通常需要占用…

中医电子处方系统,西医个体诊所门诊卫生室病历记录查询软件教程

中医电子处方系统&#xff0c;西医个体诊所门诊卫生室病历记录查询软件教程 一、软件程序问答 1、电子处方软件如何快速开单&#xff1f; 如下图&#xff0c;软件以 佳易王诊所电子处方管理系统V17.1版本为例说明 在开电子处方的时候可以按单个药品开&#xff0c;也可以直…

go 源码解读 sync.RWMutex

sync.RWMutex 简介源码结构RLockRUnlockUnlockgo 运行时方法 简介 简述sync包中读写锁的源码。 &#xff08;go -version 1.21&#xff09; 读写锁&#xff08;RWMutex&#xff09;是一种并发控制机制&#xff0c;用于在多个 goroutine 之间对共享资源进行读写操作。它提供了…

网络安全-真实ip获取伪造与隐藏挖掘

目录 真实ip获取应用层网络层网络连接TOAproxy protocol ip伪造应用层网络层TOA攻击proxy protocol 隐藏代理 挖掘代理多地ping历史DNS解析记录国外主机解析域名网站RSS订阅网络空间搜索引擎 总结参考 本篇文章学习一下如何服务如何获取真实ip&#xff0c;隐藏自己的ip&#xf…

12.30序列检测(重叠、不重叠、连续、不连续、含无关项)——移位寄存器,状态机;状态机(二段式,三段式)

状态机-重叠序列检测 timescale 1ns/1nsmodule sequence_test2(input wire clk ,input wire rst ,input wire data ,output reg flag ); //*************code***********//parameter S00, S11, S22, S33, S44;reg [2:0] state, nstate;always(posedge clk or negedge rst) b…

深度学习基础知识神经网络

神经网络 1. 感知机 感知机&#xff08;Perceptron&#xff09;是 Frank Rosenblatt 在1957年提出的概念&#xff0c;其结构与MP模型类似&#xff0c;一般被视为最简单的人工神经网络&#xff0c;也作为二元线性分类器被广泛使用。通常情况下指单层的人工神经网络&#xff0c…

基于Java SSM框架实现实现中国古诗词学习平台项目【项目源码】计算机毕业设计

基于java的SSM框架实现中国古诗词学习平台系统演示 JSP技术介绍 JSP技术本身是一种脚本语言&#xff0c;但它的功能是十分强大的&#xff0c;因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时&#xff0c;它可以使显示逻辑和内容分开&#xff0c;这就极大的方便了用…

Java:IO流——字节流和字符流

目录 IO流的基本概念 IO流体系结构 FileOutputStream字节输出流 构造方法 成员方法 细节 关流 FileInputStream字节输入流 构造方法及成员方法 read不带参数代码示例 read带参数代码示例​编辑 将字节数组或字符数组转成字符串 FileReader 字符输入流 构造方法和…

解决ELement-UI懒加载三级联动数据不回显(天坑)

最老是遇到这类问题头有点大,最后也是解决了,为铁铁们总结了一下几点 一.查看数据类型是否一致 未选择下 选择下 二.处理数据时使用this.$set方法来动态地设置实例中的属性&#xff0c;以确保其响应式 三.绑定v-if 确保每次重新加载 四.绑定key 五.完整代码

对比学习简介

1. 引言 在本教程中&#xff0c;我们将介绍对比学习领域中的相关概念。首先&#xff0c;我们将讨论这种技术背后相关的理论知识&#xff1b;接着&#xff0c;我们将介绍最常见的对比学习的损失函数和常见的训练策略。 闲话少说&#xff0c;我们直接开始吧&#xff01; 2. 举…

众安保险实习Java一面

说一下事务的ACID属性 原子性&#xff08;Atomicity&#xff09;&#xff1a;原子性是指事务是一个不可分割的工作单位&#xff0c;事务中的操作要么全部成功&#xff0c;要么全部失败。 一致性&#xff08;Consistency&#xff09;&#xff1a;事务按照预期生效&#xff0c;…

常用环境部署(十二)——Redis搭建主从模式(一主一从)

一、主从服务器Redis安装 1、注意事项 主从服务器Redis尽量安装同一版本&#xff0c;避免兼容性造成的一些错误产生 2、Centos安装Redis 链接&#xff1a;​​​​​​常用环境部署(十)——MySQL主从同步数据搭建(一主一从)-CSDN博客 二、 主Redis配置 1、修改主Redis配置…

让你的 Python 代码更快的 9 个技巧

在最近参加的一些技术会议上,我常常听到参会员在会中讨论技术选型时提到“Python太慢了”。然而,这种观点往往没有考虑到Python的众多优点。实际上,如果能够遵循Pythonic的编程风格,Python的运行速度可以非常快。这其中的关键在于掌握一些技术细节上的巧妙技巧。那些经验丰…

Python文本用户界面进化:探索Textual框架,编程新境界

更多Python学习内容&#xff1a;ipengtao.com 文本用户界面&#xff08;TUI&#xff09;在很多应用中扮演着重要的角色&#xff0c;尤其是在需要在终端中运行的应用程序中。Python作为一门强大的编程语言&#xff0c;提供了多种工具和库来构建文本用户界面。在本文中&#xff0…

LabVIEW开发智能火灾自动报警系统

LabVIEW开发智能火灾自动报警系统 系统基于LabVIEW虚拟仪器开发&#xff0c;由火灾报警控制器、感温感烟探测器、手动报警器、声光报警器、ZigBee无线通讯节点以及上位机电脑等组成&#xff0c;展示了LabVIEW在智能化火灾预警与控制方面的应用。该系统通过结合二总线协议和Zig…