发现傅里叶变换,PCA,SVD都是一种东西,记录一下

本文探讨了傅里叶变换、PCA、SVD等矩阵变换技术在数据升维和降维中的应用,通过变换矩阵实现从一个坐标系到另一个坐标系的转换,分析了这些技术在信号处理和特征提取中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

傅里叶变换,PCA,SVD,从数学上来说都是矩阵变换,从一个矩阵乘以一个变换矩阵变为另一个矩阵,由于变换矩阵一般都具有特殊性,达到升降维的作用。从矩阵的角度来说都是基变换,就是从一个坐标系转换到另一个坐标系,坐标系维度也会发生变换。从应用角度来说,傅里叶变换其实是通过那个复杂的傅里叶变换函数产生无限个正交基,从而起到升维目的(记得是1,cos,sin。。。)这样信号中很多看不出来的东西就全部能看出来了,而SVD,PCA是反过程,特征太多了,但是有很多是没用的,只需要主要特征就可以了,这样求出特征值,压缩一下就好了。相当于sift中的尺度不变性吧,一个物体如果离得比较近,用小的高斯卷积核去平滑,这样细节更多了,相当于傅里叶变换了,这样很多细小的细节都能体现出来,分析起来就很容易了,但是有时候只需要整体把握就可以,那就要大点的卷积核去滤波,相当于站的比较远,这样细节就没了,相当于用PCA了,如果大的卷积核卷积仍然能看清的东西,那就是主要特征了吧。

                                                                                                                                                 --------日常感想,可能是错的

### 局部PCA与全局PCA降维的区别 #### 定义与基本原理 全局主成分分析(Global PCA, GPCA)是一种传统的线性降维方法,它通过对整个数据集的协方差矩阵进行特征分解来寻找最优的投影方向[^1]。这些方向对应于数据集中方差最大的轴,从而使得降维后的数据尽可能多地保留原数据的信息。 相比之下,局部主成分分析(Local PCA, LPCA)则关注数据的不同子区域或簇群。LPCA假设数据并非整体呈现单一的线性结构,而是由若干个不同的局部线性结构组成。因此,LPCA会在每个局部区域内独立执行PCA操作,以捕捉该区域内的主要变化趋势[^5]。 --- #### 数学特性差异 GPCA基于整个数据集构建单个全局协方差矩阵并求解其特征值特征向量,这使其更适合描述具有统一全局特性的数据集合[^2]。然而,当面对复杂的高维数据时,尤其是那些存在明显非线性关系的数据,GPCA可能无法有效捕获所有的潜在模式,因为它忽略了局部细节。 相反,LPCA通过划分数据为多个较小的部分,并针对每部分单独计算协方差矩阵及其对应的特征向量,可以更加精细地反映各局部区域内部的变化规律[^3]。这种方法对于处理含有多种不同类型样本或者高度异质化的数据尤为有用。 --- #### 计算复杂度对比 由于GPCA只需对全数据集的一次协方差矩阵进行运算即可完成降维过程,所以它的计算成本相对较低[^4]。而对于LPCA来说,需要先将数据分割成若干个小块再逐一对它们实施PCA算法,这就增加了额外的操作步骤以及相应的资源消耗。不过现代计算机硬件的发展已经大大缓解了这种负担,尤其是在大数据环境下采用分布式框架来进行加速的情况下[^5]。 --- #### 应用场景举例说明 ##### 全局PCA (GPCA) 的典型用途: - **图像压缩**:如果一张图片的整体亮度分布较为均匀,则可以直接利用GPCA降低像素维度而不损失太多视觉质量。 - **基因表达数据分析**:研究者经常面临数千甚至数万个基因探针测量值组成的表格形式资料,在此情形下运用GPCA可以帮助发现主导生物现象的主要因素[^1]。 ##### 局部PCA (LPCA) 更加擅长解决的问题有: - **面部表情识别**:人脸照片因个体差异巨大而导致难以找到共同的有效表征方式,此时借助LPCA能够分别提取每个人脸特定部位(眼睛、鼻子等)附近的特征用于后续分类任务。 - **金融时间序列预测**:股票价格波动往往受到多重短期事件驱动的影响,表现出很强的时间依赖性区域性特点,故而采取LPCA有助于揭示隐藏在不同时间段背后的风险因子。 ```python import numpy as np from sklearn.decomposition import PCA def global_pca(data): pca = PCA(n_components=2) reduced_data = pca.fit_transform(data) return reduced_data def local_pca(data, num_clusters=5): from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=num_clusters).fit(data) labels = kmeans.labels_ all_local_reductions = [] for cluster_id in range(num_clusters): subset = data[np.where(labels == cluster_id)] pca = PCA(n_components=2) reduced_subset = pca.fit_transform(subset) all_local_reductions.append(reduced_subset) return all_local_reductions ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值