데이터 분석/R
[R] PCA (주성분 분석) 2
eunki
2021. 7. 8. 19:33
728x90
사진 데이터 불러오기
install.packages("jpeg")
library(jpeg)
cat <- readJPEG('cat.jpeg')
데이터 확인
class(cat) # "array"
dim(cat) # 1280 1920 3
rgb 데이터 분할 및 주성분 분석
# array에서 r/g/b에 해당하는 데이터
r <- cat[,,1]
g <- cat[,,2]
b <- cat[,,3]
# r/g/b 데이터 주성분 분석
cat.r.pca <- prcomp(r, center = F)
cat.g.pca <- prcomp(g, center = F)
cat.b.pca <- prcomp(b, center = F)
# 분석 결과를 rgb로 합침
rgb.pca <- list(cat.r.pca, cat.g.pca, cat.b.pca)
차원 축소하여 jpg로 저장
sapply() : 각각의 데이터에 특정한 함수를 적용
%*% : 행렬 곱
# 축소할 차원 수
pc <- c(2, 10, 50, 100, 300)
for(i in pc) {
pca.img <- sapply(rgb.pca, function(j) {
compressed.img <- j$x[,1:i] %*% t(j$rotation[,1:i])
}, simplify = 'array')
writeJPEG(pca.img, paste('cat_pca_', i, '.jpeg', sep = ''))
}
728x90