矩阵压缩降维

数据压缩

在存储数据和使用数据的时候,过多的数据会造成空间上的占用和时间上的消耗。

如果我们能够将数据压缩的更少一点,即可使用更少的空间和时间进行训练模型。

例1:从2维到1维。

当2维的点均匀的分布在某一条直线附近,即可使用该直线所在的1维值来表示之前的2维的值。

在这里插入图片描述

当二维变量能够通过一条线表示出来的时候,我们就可以用一个变量来表示该二维变量了,即:
x ( i ) ∈ R 2 − > z ( i ) ∈ R x ( i ) 表 示 第 i 个 样 本 . z ( i ) 表 示 第 i 个 样 本 映 射 出 来 的 1 维 结 果 。 x^{(i)}\in\mathbb{R}^2\qquad->\qquad z^{(i)}\in\mathbb{R}\\ x^{(i)}表示第i个样本.\\ z^{(i)}表示第i个样本映射出来的1维结果。 x(i)R2>z(i)Rx(i)i.z(i)i1
同理,当3维的点均匀分布在某一个平面上。即可使用2维的数据表示3维的数据。

PCA降维

PCA(Principal Component Analysis) 是一种将高维数据降维,提取数据的主要特征分量的方法。叫做主成分分析法。

降维思路

如何使用低纬度超平面的值表达高纬度的值?

直观上看,使用超平面表达高纬度,需要满足两个点

  • 最近重构性。样本的点到这个超平面的距离足够近(足够近,才好拟合)。
  • 最大可分性。样本点在这个超平面上的投影尽可能分开(降维后,映射到超平面上,减少重合点,确保保留信息足够多)。

这里的超平面就是直线的高维推广。相当于三维的超平面是直线,4维的超平面是个面或者线,5维的是4维或者3维等等。

降维步骤

输 入 : 样 本 集 D = { x 1 , x 2 , . . , x n } ; 低 维 空 间 维 度 d ′ 过 程 : 1. 对 所 有 样 本 进 行 去 中 心 化 ∑ x i = 0 2. 计 算 样 本 的 协 方 差 矩 阵 X X T 3. 对 协 方 差 矩 阵 X X T 特 征 值 分 解 4. 取 最 大 的 d ′ 个 特 征 值 所 对 特 征 向 量 W 。 输 出 : 投 影 矩 阵 W 。 该 投 影 矩 阵 W 即 主 成 分 分 析 的 结 果 \begin{aligned} 输入:& 样本集D=\{x_1,x_2,..,x_n\};\\ & 低维空间维度d'\\ \\ 过程:\\ & 1.对所有样本进行去中心化\sum x_i=0\\ & 2.计算样本的协方差矩阵XX^T\\ & 3.对协方差矩阵XX^T特征值分解\\ & 4.取最大的d'个特征值所对特征向量W。\\ 输出:\\ & 投影矩阵W。该投影矩阵W即主成分分析的结果 \end{aligned} :D={x1,x2,..,xn};d1.xi=02.XXT3.XXT4.dWWW

原理分析。

为了能使得降维后,映射到超平面上的点足够分散,我们尽量使映射后的方差较大。

Step1:去中心化

去中心化。方便方差计算.

去 中 心 化 后 , 均 值 μ = 0 , 方 差 ∑ ( x − μ ) 2 = ∑ x 2 . 去中心化后,均值\mu=0,方差\sum(x-\mu)^2=\sum x^2. μ=0(xμ)2=x2.

Step2:计算协方差矩阵

X X T = [ x 1 2 x 1 x 2 . . . x 1 x n x 2 x 1 x 2 2 . . . x 2 x n . . . . . . . . . . . . x n x 1 x n x 2 . . . x n 2 ] = [ D ( x 1 ) C o v ( x 1 , x 2 ) . . . C o v ( x 1 , x n ) C o v ( x 2 , x 1 ) D ( x 2 ) . . . C o v ( x 2 , x n ) . . . . . . . . . . . . C o v ( x n , x 1 ) C o v ( x n , x 2 ) . . . D ( x n ) ] XX^T=\begin{bmatrix} x_1^2 &x_1x_2 &... &x_1x_n\\ x_2x_1 &x_2^2 &... &x_2x_n\\ ... &... &... &...\\ x_nx_1 &x_nx_2 &... &x_n^2 \end{bmatrix}= \begin{bmatrix} D(x_1) &Cov(x_1,x_2) &... &Cov(x_1,x_n)\\ Cov(x_2,x_1) &D(x_2) &... &Cov(x_2,x_n)\\ ... &... &... &...\\ Cov(x_n,x_1) &Cov(x_n,x_2) &... &D(x_n) \end{bmatrix} XXT=x12x2x1...xnx1x1x2x22...xnx2............x1xnx2xn...xn2=D(x1)Cov(x2,x1)...Cov(xn,x1)Cov(x1,x2)D(x2)...Cov(xn,x2)............Cov(x1,xn)Cov(x2,xn)...D(xn)

可见主对角线元素为方差,其他都为协方差。

为了使得最后得到的基相关性低,方差大。所以我们选择将该协方差矩阵进行特征值对角化。

这样可以使得协方差都为0.

Step3:特征值分解

使用算法进行特征值分解。(拉格朗日乘子法)。

后得出特征值λ对角矩阵,以及对应特征向量W。

按照特征值排序。取高方差的前d‘项。这里是为了使得降维后的样本结果,方差最大。

Step4:输出W作为低维的空间

以上就完成了降维。

参考资料

B站吴恩达机器学习相关课程:https://www.bilibili.com/video/BV164411b7dx

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以使用Python中的Pillow库来进行图像处理压缩。以下是一个示例代码,该代码将读取名为"example.png"的图像,将其压缩并转换为灰度矩阵: ```python from PIL import Image import numpy as np # 打开图像文件并转换为灰度 img = Image.open("example.png").convert("L") # 将图像压缩至100 x 100像素 img = img.resize((100, 100), Image.ANTIALIAS) # 将图像转换为矩阵 img_data = np.asarray(img) # 输出矩阵的形状 print(img_data.shape) ``` 请注意,这仅是一个示例代码,您可以根据您的需求进行修改和优化。 ### 回答2: 当需要对输入的图片进行压缩降维后,可以使用以下代码得到矩阵: 1. 首先导入必要的库,如numpy和PIL: ```python import numpy as np from PIL import Image ``` 2. 读取输入的图片: ```python image = Image.open('input.jpg') ``` 3. 将图片转换为灰度图: ```python image_gray = image.convert('L') ``` 4. 调整图片大小: ```python resized_image = image_gray.resize((new_width, new_height)) ``` 其中,new_width和new_height是希望得到的压缩降维后的尺寸。 5. 将图片转换为矩阵: ```python matrix = np.array(resized_image) ``` 通过以上步骤,我们就可以得到输入图片经过压缩降维后的矩阵。可以根据具体需求对代码进行修改,例如调整压缩后图片的尺寸、调整灰度转换的方式等。 ### 回答3: 你好!以下是一个简单的用Python编写的示例代码,可用于将输入的图片进行压缩降维,得到相应的矩阵。 ```python import cv2 import numpy as np # 读取图片 image = cv2.imread('input_image.jpg') # 对图片进行压缩 compressed_image = cv2.resize(image, (300, 300)) # 将压缩后的图片转换为灰度图像 grayscale_image = cv2.cvtColor(compressed_image, cv2.COLOR_BGR2GRAY) # 将灰度图像矩阵化 image_matrix = np.array(grayscale_image) # 打印矩阵形状 print("矩阵形状:", image_matrix.shape) # 打印矩阵值 print("矩阵值:") print(image_matrix) ``` 上述代码中,使用OpenCV库读取指定路径下的图片,并对其进行压缩处理,将其尺寸调整为300x300像素。接着,通过颜色空间转换,将压缩后的图片转换为灰度图像。然后,使用numpy库将灰度图像转换为矩阵。最后,将矩阵形状和值打印出来。 请确保将代码中的`'input_image.jpg'`替换为您要处理的图片的路径和文件名。另外,您可能需要安装OpenCV和numpy库,以便将代码成功运行。 希望以上回答对您有所帮助!如有任何疑问,请随时追问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值