[R] 연습

[R] 정규화(Normalization)편

Simon Yoon 2021. 12. 12. 22:28

이전 포스팅에서는 차원축소 방법 중 주성분 분석(PCA)에 대한 내용을 다루었다.

주성분 분석을 할 때 값의 스케일(scale)이 다를 경우 왜곡이 발생하기 때문에 정규화 과정을 진행한 후 분석을 해야했다.

따라서 이번에는 정규화(Normalization)를 하는 방법에 대해서 연습할 것이다.

 

이번 포스팅에서도 Cereals 데이터를 사용할 것이다.

Cereals.csv
0.00MB
Cereals 데이터의 일부


Q. 최소-최대 정규화(Min-Max Normalization)를 하고 싶다면?

A. 사용자 정의 함수 방법,  caret 패키지의 preProcess() 함수를 사용하자.

 

사실 최소-최대 정규화의 식만 알면 직접 구하는 것도 어렵지 않다.

minmax <- function(x){return((x - min(x)) / (max(x) - min(x)))}

 

caret 패키지의 함수인 preProcess() 함수를 이용해서 최소-최대 정규화를 할 수 있다.

minmax2 <- preProcess(df, method = 'range')
predict(minmax2, df)

method = 'range'로 설정해주면 된다. 다만 중요한 점은 df 자리는 데이터 프레임(dataframe)이나 행렬(matrix) 자료 구조가 들어가야 한다. 그렇지 않고 리스트를 넣으면 에러가 출력된다.

 

 

★ 예시문제1)

Cereals 데이터셋에서 영양 정보인 protein, fat, sodium, fiber, carbo, sugars, potass, vitamins 열만 새로운 데이터 프레임으로 정하고, 이를 활용하여 최소-최대 정규화를 한 후 주성분 분석을 실시하여라.

 

예시답안)

# 연습문제 풀이
c.df <- read.csv("Cereals.csv")
nutri <- c.df[ ,c(5:12)]

# 결측치 제거
table(is.na(nutri))
nutri <- na.omit(nutri)

# 최소-최대 정규화 진행
library(caret)
nutri.pre <- preProcess(nutri, method = 'range')
nutri.norm <- predict(nutri.pre, nutri)

# 주성분 분석 진행
nutri.pca <- princomp(nutri.norm)
summary(nutri.pca)

 

 

※ 참고: 코드 예시는 해당 함수를 활용하기 위한 방법으로 제시한 것입니다. 따라서 다른 방법이 존재할 수 있습니다.

'[R] 연습' 카테고리의 다른 글

[R] reshape2 패키지 활용하기  (0) 2021.12.18
[R] reshape 패키지 활용하기  (0) 2021.12.17
[R] 차원축소 (PCA편)  (2) 2021.12.11
[R] 데이터 정제하기 (이상값편)  (0) 2021.12.10
[R] 데이터 정제하기 (결측치편)  (0) 2021.12.01