【机器学习中的矩阵分解】LU分解、QR分解、SVD分解

article/2025/9/26 19:49:11

学习总结

文章目录

  • 学习总结
  • 一、三角分解(LU分解)
    • 1.1 高斯消元
    • 1.2 LU分解原理
    • 1.3 LU分解python代码
    • 1.4 LU分解算法
  • 二、QR分解
    • 2.1 Schmid 正交化
    • 2.2 使用 Schmid 施密特正交化过程求 QR 分解
    • 2.3 QR分解的栗子
  • 三、SVD分解
    • 3.1 SVD定义
    • 3.2 SVD基本理论
      • (1)线性变换
      • (2)SVD推导(略)
      • (3)SVD栗子
  • 四、SVD图像压缩
  • 五、SVD手写体识别
  • Reference

一、三角分解(LU分解)

1.1 高斯消元

1.2 LU分解原理

1.3 LU分解python代码

1.4 LU分解算法

二、QR分解

2.1 Schmid 正交化

2.2 使用 Schmid 施密特正交化过程求 QR 分解

2.3 QR分解的栗子

三、SVD分解

3.1 SVD定义

Singular Value Decomposition。
SVD是一种基于矩阵分解的,提取信息的强大工具,能够发现数据中的潜在模式。应用领域比如:

  • 隐性语义分析 (Latent Semantic Analysis, LSA) 或隐性语义索引 (Latent Semantic Indexing, LSI);
  • 推荐系统 (Recommender system),可以说是最有价值的应用点(不过现在推荐系统很多都是基于深度学习模型);
  • 矩阵形式数据(主要是图像数据)的压缩。

3.2 SVD基本理论

(1)线性变换

以2×2的线性变换矩阵为例,现在有一个对角矩阵
M = [ 3 0 0 1 ] M=\left[\begin{array}{ll}3 & 0 \\ 0 & 1\end{array}\right] M=[3001]

对角矩阵M是将二维平面上的点(x,y)经过线性变换到另一个点的变换矩阵(变换效果:平面沿着x水平方向进行3倍拉伸,垂直方向没变化): [ 3 0 0 1 ] [ x y ] = [ 3 x y ] \left[\begin{array}{ll} 3 & 0 \\ 0 & 1 \end{array}\right]\left[\begin{array}{l} x \\ y \end{array}\right]=\left[\begin{array}{c} 3 x \\ y \end{array}\right] [3001][xy]=[3xy]

(2)SVD推导(略)

从几何角度理解二维SVD:借助SVD可将一个相互垂直的网络(orthogonal grid)变换到另一个互相垂直的网络。
在这里插入图片描述
实际应用中,我们仅需保留着三个比较小的矩阵,就能表示A,不仅节省存储量,在计算的时候更是减少了计算量。SVD在信息检索(隐性语义索引)、图像压缩、推荐系统、金融等领域都有应用。

(3)SVD栗子

其中正交矩阵的特征值和特征向量的求解可以复习线性代数。
在这里插入图片描述
在这里插入图片描述

四、SVD图像压缩

(1)下载cv2pip install opencv-python

(2)其中np.linalg.svd(a, full_matrices=1, compute_uv=1)函数:

  • input参数:

    • a是一个形如(M,N)矩阵
    • full_matrices的取值是为0或者1,默认值为1,这时u的大小为(M,M),v的大小为(N,N) 。否则u的大小为(M,K),v的大小为(K,N) ,K=min(M,N)。
    • compute_uv的取值是为0或者1,默认值为1,表示计算u,s,v。为0的时候只计算s。
  • output参数(三个):

    • u大小为(M,M),s大小为(M,N),v大小为(N,N)。
    • A = usv
    • 其中s是对矩阵a的奇异值分解。s除了对角元素不为0,其他元素都为0,并且对角元素从大到小排列。s中有n个奇异值,一般排在后面的比较接近0,所以仅保留比较大的r个奇异值。

(3)numpy.stack函数:将多个数组进行堆叠,按照指定的维度,可参考博客。

# -*- coding: utf-8 -*-
"""
Created on Sat Dec 11 23:14:35 2021@author: 86493
"""
import cv2
import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt#转为u8类型
def restore1(u, sigma, v, k):m = len(u)n = len(v)a = np.zeros((m, n))a = np.dot(u[:, :k], np.diag(sigma[:k])).dot(v[:k, :])# s1 =  np.size(u[:, :k])# s1+= np.size(np.diag(sigma[:k]))# s1+= np.size(np.diag(v[:k, :]))# s2 = np.size(a)# print("压缩率:",s1/s2)a[a < 0] = 0a[a > 255] = 255return np.rint(a).astype('uint8')def SVD(frame,K=10):a = np.array(frame)#由于是彩色图像,所以3通道。a的最内层数组为三个数,分别表示RGB,用来表示一个像素u_r, sigma_r, v_r = np.linalg.svd(a[:, :, 0])u_g, sigma_g, v_g = np.linalg.svd(a[:, :, 1])u_b, sigma_b, v_b = np.linalg.svd(a[:, :, 2])R = restore1(u_r, sigma_r, v_r, K)G = restore1(u_g, sigma_g, v_g, K)B = restore1(u_b, sigma_b, v_b, K)I = np.stack((R, G, B), axis = 2)return Iif __name__ == "__main__":mpl.rcParams['font.sans-serif'] = [u'simHei']mpl.rcParams['axes.unicode_minus'] = False# frame = cv2.imread("./liuyifei.bmp",-1)frame = cv2.imread("pig.jpg",-1)I = SVD(frame,40)plt.imshow(I)cv2.imwrite("out.bmp",I)

原图为:
在这里插入图片描述
图像压缩后的图为:
在这里插入图片描述

五、SVD手写体识别


Reference

(1)SVD-矩阵奇异值分解 —— 原理与几何意义
(2)SVD应用于图像压缩 Python代码测试
(3)https://www.zhihu.com/question/277311874
(4)矩阵的SVD分解(应用之一:手写数字识别)
(5)浅谈SVD原理以及python实现小demo
(6)SVD(奇异值分解)Python实现(原理清晰)


http://chatgpt.dhexx.cn/article/D2rhEwvK.shtml

相关文章

【六】SVD分解

SVD分解在很多经典应用中都有用到&#xff0c;比如数据压缩&#xff0c;降噪等&#xff0c;PCA也和SVD有着紧密联系&#xff0c;这里记录自己关于SVD分解求解最小二乘解的学习笔记&#xff0c;若有错误请指出&#xff0c;谢谢。 在实践中&#xff0c;由于存在测量误差和多次测…

SVD分解原理详解

在介绍SVD之前&#xff0c;先补充一些基础知识 1.酉矩阵&#xff1a; 2.正规&#xff08;正定&#xff09;矩阵 3.谱分解&#xff1a; 表示正规矩阵&#xff0c;可经由酉变换&#xff0c;分解为对角矩阵&#xff1b;这种矩阵分解的方式&#xff0c;称为谱分解&#xff08;spec…

矩阵分解(四)——SVD分解

目录 矩阵相关术语共轭矩阵&#xff08;Hermite阵&#xff09;特征值相似矩阵A^H^A^H^A酉矩阵酉相抵&#xff08;正交相抵&#xff09;奇异值奇异值分解式特征分解 奇异值分解python代码实现验证结果 np.linalg.svd 利用Python进行SVD分解对图像压缩 矩阵相关术语 共轭矩阵&am…

聊聊特征分解和SVD分解

矩阵分解 矩阵分解(decomposition,factorization)&#xff1a;将矩阵拆分为多个矩阵的乘积的运算。矩阵的分解包括以下几种&#xff1a; 特征分解SVD分解PCAQR分解LU分解极分解 矩阵分解在数据压缩、推荐系统以及NLP等都有着比较广泛的应用。 特征分解 特征分解(eigendeco…

SVD奇异值分解

SVD分解 SVD分解是LSA的数学基础&#xff0c;本文是我的LSA学习笔记的一部分&#xff0c;之所以单独拿出来&#xff0c;是因为SVD可以说是LSA的基础&#xff0c;要理解LSA必须了解SVD&#xff0c;因此将LSA笔记的SVD一节单独作为一篇文章。本节讨论SVD分解相关数学问题&#xf…

矩阵分解 SVD分解

在认识SVD之前&#xff0c;先来学习两个相关的概念&#xff1a;正交矩阵和酉矩阵。 如果&#xff0c;则阶实矩阵称为正交矩阵。而酉矩阵是正交矩阵往复数域上的推广。 判断正交矩阵和酉矩阵的充分必要条件是&#xff1a;。或者说正交矩阵和酉矩阵的共轭转置和它的 …

SVD分解的推导,理解SVD分解及矩阵奇异值的几何意义

文章目录 SVD分解的证明推导从本质上理解SVD分解矩阵奇异值的几何意义 SVD分解的证明推导 理解SVD分解要解决的问题是什么&#xff1f; 从本质上理解SVD分解 从线性映射的矩阵表示角度&#xff0c;即从“抽象”->“具体”的角度去理解SVD分解。 矩阵奇异值的几何意义…

矩阵分解SVD原理

常用的经典矩阵分解算法&#xff1a; 经典算法PCA、SVD主题模型算法LDA概率矩阵分解PMF&#xff0c;由深度学习大牛Ruslan Salakhutdinov所写&#xff0c;主要应用于推荐系统中&#xff0c;在大规模的稀疏不平衡性Netflix数据集上取得较好的效果&#xff1b;非负矩阵分解&#…

精简易懂,30 分钟学会 SVD 矩阵分解,很强!

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达SVD(Singular Value Decomposition)奇异值分解分解是机器学习中最重要的矩阵分解方法。 它能够将一个任意形状的矩阵分解成一个正交矩阵和一个对角矩阵以及另一个正交矩阵…

矩阵(一):SVD分解

文章目录 0 参考链接&#xff08;尊重原著&#xff09;1 SVD分解原理2 SVD分解意义3 SVD分解的应用4 SVD数学举例5 为什么Ax0的解为最小奇异值对应的向量&#xff1f; 0 参考链接&#xff08;尊重原著&#xff09; 下面这个讲的很好很全面 视觉SLAM常见的QR分解SVD分解等矩阵分…

详解SVD分解过程

转 如何让奇异值分解(SVD)变得不“奇异”&#xff1f; 红色石头 发布于 2018-08-29 分类&#xff1a;机器学习 阅读(144) 评论(0) 如何让奇异值分解(SVD)变得不“奇异”&#xff1f;-红色石头的个人博客 http://redstonewill.com/1529/ 在之前的一篇文章&#xff1a;通俗解…

奇异值分解(SVD)原理详解及推导

转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的&#xff0c;讲的也都不错&#xff0c;但是感觉还是有需要补充的&#xff0c;特别是关于矩阵和映射之间的对应关系。前段时间看了国外的一篇文章&#xff0c;叫A S…

奇异值分解(SVD)原理

奇异值分解(Singular Value Decomposition&#xff0c;以下简称SVD)是在机器学习领域广泛应用的算法&#xff0c;它不光可以用于降维算法中的特征分解&#xff0c;还可以用于推荐系统&#xff0c;以及自然语言处理等领域。是很多机器学习算法的基石。本文就对SVD的原理做一个总…

SVD(奇异值分解)

一、SVD&#xff08;奇异值分解 Singular Value Decomposition&#xff09; 1.1、基本概念&#xff1a; &#xff08;1&#xff09;定义&#xff1a;提取信息的方法&#xff1a;奇异值分解Singular Value Decomposition&#xff08;SVD&#xff09; &#xff08;2&#xff0…

SVD分解

一、SVD简介 Singular Value Decomposition&#xff08;奇异值分解&#xff0c;SVD&#xff09;是一种重要的矩阵分解技术&#xff0c;可以将一个矩阵分解为三个矩阵的乘积。SVD的应用广泛&#xff0c;包括数据降维、矩阵逆运算、推荐系统等领域。 给定一个矩阵A&#xff0c;SV…

如何快速搭建个人网站(服务器配置篇)

关于服务器的购买和域名注册可以参考我的这篇博客 在使用之前&#xff0c;建议小白用户先下载一个Vmware 安装一个Ubuntu的虚拟环境学习一下linux的基础命令。 一、远程服务器的连接 服务器购买好了以后我们需要进行远程连接我们的服务器&#xff0c; 我个人推荐windows用…

在废旧手机里搭建个人服务器

点击跳转微信公众号原文链接 欢迎关注公众号&#xff0c;会不定时发些有趣的干货文章&#xff0c;以及一些记录性的技术文章&#xff01; 正文开始&#xff1a; 一、目的&#xff1a;给手机装上Linux系统&#xff0c;充当服务器使用 二、流程&#xff1a; 1、手机装好相关软件…

个人搭建网站的服务器选择

关于这方面之前一直准备分享一下心得&#xff0c;由于一直比较忙&#xff0c;各种想写的就各种耽搁了&#xff0c;今天给大家总结一下个人或小型企业站该如何选择网站服务器 首先&#xff0c;先弄清楚自己的需求和用途&#xff1a; 1、是建立一个静态页面还是动态页面&#xff…

如何利用云服务器搭建个人网站

去阿里云进入官网 aliyun.com 注册账号 小林同学在这里用阿里云演示&#xff0c;大家也可以去腾讯云、百度云注册等大型知名企业&#xff0c;步骤雷同&#xff0c;看个人喜欢 注册完&#xff0c;完善个人信息&#xff0c;进行实名认证 主页面 点击 最新活动 并找到 新手上路 和…

【Linux】零成本在家搭建自己的私人服务器解决方案

我这个人自小时候以来就特喜欢永久且免费的东西&#xff0c;也因此被骗过&#xff08;花巨款买了永久超级会员最后就十几天&#xff09;。 长大后骨子里也是喜欢永久且免费的东西&#xff0c;所以我不买服务器&#xff0c;用GitHubPage或者GiteePage搭建自己的静态私人博客&…