데이터 분석/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