机器学习—SVD

文章目录


本文将记录学习 刘建平大佬SVD博客的相关内容。

SVD

在特征值和特征向量分解中,一个N*N的矩阵A可以分解为 A = W Σ W − 1 A=W\Sigma W^{-1} A=WΣW1,其中W矩阵是A矩阵的特征向量组成的标准正交列向量矩阵, Σ \Sigma Σ矩阵是由A矩阵的特征值组成的对角矩阵,由于W矩阵是列向量的标准正交基,则 W − 1 = W T W_{-1}=W^T W1=WT
由于特征值分解需要矩阵A是一个N*N的正方矩阵,对于普通的M*N的矩阵无法得到特征值所以需要奇异值分解。

对于一个MN的矩阵A,可以将该矩阵分解为:
A = U Σ V T A=U\Sigma V^T A=UΣVT
其中矩阵U是一个M
M的矩阵, Σ \Sigma Σ矩阵是一个M*N的对角矩阵,V矩阵是一个N*N矩阵,其中 U T U = E , V T V = E U^TU=E,V^TV=E UTU=E,VTV=E
对于矩阵A的转置和A做矩阵乘法的N*N的矩阵求解得到特征向量,将列向量张成一个N*N的V矩阵,V矩阵中的特征值为矩阵A的右奇异向量:
A T A v i = λ i v i A^TAv_i=\lambda_i v_i ATAvi=λivi

对于矩阵A和A的转置做矩阵乘法的M*M的矩阵求解得到特征向量,将列向量张成一个M*M的U矩阵,U矩阵中的特征值为矩阵A的左奇异向量:
A A T u i = λ i u i AA^T u_i=\lambda_i u_i AATui=λiui

对于矩阵 Σ \Sigma Σ而言是一个只在对角线上有值,其他的位置均为0:
A = U Σ V T A V = U Σ V T V A V = U Σ A v i = u i σ i σ i = A v i / u i A=U\Sigma V^T\\ AV=U\Sigma V^TV\\ AV=U\Sigma\\ Av_i=u_i\sigma_i\\ \sigma_i={Av_i/u_i} A=UΣVTAV=UΣVTVAV=UΣAvi=uiσiσi=Avi/ui
这样就得到每个奇异值,进而得到奇异值矩阵 Σ \Sigma Σ
还有另外一种解法:
A = U Σ V T A T = V Σ U T A T A = V Σ U T U Σ V T = V Σ 2 V T A=U\Sigma V^T\\ A^T=V\Sigma U^T\\ A^TA=V\Sigma U^TU\Sigma V^T=V\Sigma^2 V^T A=UΣVTAT=VΣUTATA=VΣUTUΣVT=VΣ2VT
这样就证明了V矩阵的解法,并且得到 Σ 2 = λ V \Sigma^2=\lambda_V Σ2=λV,进而得到 σ i = λ V i \sigma_i=\sqrt{\lambda_{Vi}} σi=λVi ,则对于矩阵 Σ \Sigma Σ可以通过求解 A T A A^TA ATA的特征值求解出来。

对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。也就是说:
A m × n = U m × m Σ m × n V n × n T ≈ U m × k Σ k × k V k × n T A_{m \times n} = U_{m \times m}\Sigma_{m \times n} V^T_{n \times n} \approx U_{m \times k}\Sigma_{k \times k} V^T_{k \times n} Am×n=Um×mΣm×nVn×nTUm×kΣk×kVk×nT
其中k要比n小很多,也就是一个大的矩阵A可以用三个小的矩阵 U m × k , Σ k × k , V k × n T U_{m \times k},\Sigma_{k \times k} ,V^T_{k \times n} Um×k,Σk×k,Vk×nT来表示

SVD与PCA

在PCA中需要得到样本的协方差矩阵 A T A A^TA ATA最大的前q个特征向量,用这个前q个向量用来做低维投影降维。在SVD计算中不用做特征分解也可以求解出右奇异值矩阵V,这样做在样本量很大时节省时间。
对于SVD的左奇异值U矩阵,得到 X X T XX^T XXT最大的前d个特征向量张成的M*D维矩阵,做以下处理:
X ^ d × n = U d × m T X m × n \hat{X}_{d\times n}=U^T_{d\times m}X_{m\times n} X^d×n=Ud×mTXm×n
这样就得到一个d*n的矩阵,这个矩阵和原来的矩阵相比行数减少了,这样就完成了对数据的压缩(可以认为是每一维度是一个样本,每个样本是一个特征,对特征就行压缩)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 稀疏机器学习的去噪代码通常使用以下步骤: 1. 数据预处理:将数据进行标准化、归一化等预处理操作,以便更好地进行特征提取和模型训练。 2. 特征提取:使用稀疏编码、主成分分析(PCA)、独立成分分析(ICA)等方法提取数据的稀疏特征,以便更好地进行噪声去除。 3. 模型训练:使用稀疏编码、奇异值分解(SVD)、局部敏感哈希(LSH)等方法训练模型,以便更好地处理稀疏特征和噪声。 4. 噪声去除:使用训练好的模型对输入数据进行噪声去除操作,以得到更准确的输出结果。 以下是一个简单的Python示例代码,用于使用稀疏编码进行去噪: ```python import numpy as np from sklearn.decomposition import SparseCoder # 构造训练数据 X_train = np.random.rand(100, 50) # 构造测试数据 X_test = np.random.rand(1, 50) # 定义稀疏编码器 coder = SparseCoder(dictionary=np.eye(50), transform_algorithm='lasso_lars', transform_alpha=0.1) # 训练稀疏编码器 coder.fit(X_train) # 对测试数据进行稀疏编码 sparse_code = coder.transform(X_test) # 对稀疏编码后的数据进行反变换,得到去噪后的结果 denoised_data = np.dot(sparse_code, np.eye(50)) print('去噪前:', X_test) print('去噪后:', denoised_data) ``` 请注意,这只是一个简单的示例代码,实际上,稀疏机器学习的去噪过程可能会更加复杂。 ### 回答2: 稀疏机器学习去噪代码旨在通过使用稀疏化技术,从带有噪声的输入数据中提取出有效的信号。这种去噪方法在处理高维数据时非常有用。 代码的第一步是加载数据集,并进行必要的预处理步骤,如归一化和数据清洗。随后,使用稀疏化技术,如L1正则化或Lasso回归,对输入数据进行特征选择。这些稀疏化方法可以将不相关或冗余的特征权重设置为零,从而减少噪声的影响。 接下来,使用稀疏表示方法(如稀疏编码或稀疏字典学习)对数据进行表示。这些方法将输入数据表示为少的非零系数组合,从而突出有效的信号,并抑制噪声。 在代码的下一步中,可以使用降噪技术,如总变差降噪或基于学习的方法,对稀疏表示的数据进行进一步处理。这些方法有助于恢复信号的平滑性,并最终去除噪声。 最后,代码可以评估去噪效果,并可视化恢复的信号。可以使用各种评估指标,如均方根误差(RMSE)或峰值信噪比(PSNR),来化去噪结果的质。 综上所述,稀疏机器学习去噪代码涵盖了数据预处理、特征选择、稀疏表示、降噪以及结果评估等步骤。这些步骤有效地提取出数据中的有效信号并去除噪声,使得数据更加干净和有用。 ### 回答3: 稀疏机器学习去噪代码是一种用于处理数据中的噪声的方法。在代码实现中,可以采用稀疏表示模型,如稀疏编码或稀疏自动编码器。 首先,需要导入相关的库和模块,如numpy和scikit-learn等。然后,加载数据集并进行预处理,包括特征选择和标准化。 接下来,可以选择合适的稀疏表示模型,并创建相应的对象。例如,可以使用稀疏编码器将输入数据表示为一个稀疏向,其中绝大多数元素为零。为了去除噪声,可以设置合适的正则化约束,并利用优化算法将输入数据上的噪声部分压制为零。 然后,可以使用稀疏编码器对输入数据进行重构,并计算重构误差。基于重构误差的大小,可以采用合适的阈值来判断噪声部分的位置。 最后,可以根据噪声的位置进行去噪操作。例如,可以将噪声部分设置为零,或利用插值等方法进行修复。去噪后的数据可以用于后续的机器学习任务,如分类或聚类等。 在实际应用中,还可以使用交叉验证等方法来选择合适的超参数,如稀疏编码器的稀疏度和正则化系数等,以获得更好的去噪效果。 总的来说,稀疏机器学习去噪代码可以帮助我们处理数据中的噪声,提高后续机器学习任务的性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值