本文已参加「新人创作礼」活动,一起开启创作之路。
这次带来的是RStudio的多元数据分析 – 奇异值分解。
奇异值分解 Singular Va测试仪lue Decomposition
在前面的篇章中, 我们讲到了主成分分析(PCA)
, PCA的测试仪实现一般有两种, 一数据分析种是用特征值分解去实现的, 一种是用奇异值分解去实现的.
奇异值分解
是一个有着很明显的物理意义的一种方法, 它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示, 这些小矩阵描述的是矩阵的重要的特性.
就像是描述一个人长着国字脸,浓眉大眼, 这样的几个特征, 就让我们能够大致勾勒出他的形象.
实际上, 人脸上的特征是有着无数种的, 之所以能这么描述, 是因为人类大脑天生就有着非常好的抽取重数据分析报告要特征的能力.
如何让机器学数据分析师工作内容会抽数据分析观念取重要的特征, PCA和SVD都是非常重要的方法.
SVD图解:

R中的SVD
# 测试 A = matrix(sample(100,50), nrow = 10, ncol = 5) sa = svd(A) sa u = sa$u v = sa$v r = 3 # set r sigma = matrix(0, nrow = ncol(A), ncol = ncol(A)) diag(sigma) = sa$d B = u[,1:r] %*% sigma[1:r,1:r] %*% t(v)[1:r,] # 检查A和B之间的差异 mean(abs(A - B))
奇异值分解的应用: 图像压缩
library(jpeg) A = readJPEG("./img/svd_pic3.jpg") # red channel A1 = A[,,1] image(t(A1)[,nrow(A1):1], col = gray.colors(256), asp = 1) # svd r = 50 sa1 = svd(A1) sigma = matrix(0, nrow = nrow(A1), ncol = ncol(A1)) diag(sigma)[1:r] = sa1$d[1:r] B1 = sa1$u[,1:r] %*% sigma[1:r,1:r] %*% t(sa1$v)[1:r,] # green channel A2 = A[,,2] sa2 = svd(A2) sigma = matrix(0, nrow = nrow(A2), ncol = ncol(A2)) diag(sigma)[1:r] = sa2$d[1:r] B2 = sa2$u[,1:r] %*% sigma[1:r,1:r] %*% t(sa2$v)[1:r,] # blue channel A3 = A[,,3] sa3 = svd(A3) sigma = matrix(0, nrow = nrow(A3), ncol = ncol(A3)) diag(sigma)[1:r] = sa3$d[1:r] B3 = sa3$u[,1:r] %*% sigma[1:r,1:r] %*% t(sa3$v)[1:r,] # combine into a color image B = A B[,,1] = B1 B[,,2] = B2 B[,,3] = B3 writeJPEG(B, "./img/B50.jpg")
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)