3.4 최소-최대화

최소-최대(Min-Max) 정규화는 평점을 새로운 평점 최댓값과 최솟값 사이의 값으로 변환하는 것입니다. 이는 평점과 평점 최솟값과의 편차를 평점 최댓값과 최솟값과의 편차로 나누어 0과 1 사이의 값으로 변환한 후, 여기에 새로운 평점 최솟값과 최댓값의 편차를 곱하고 여기에 새로운 평점 최솟값을 더하여 새로운 범위의 값으로 변환하는 것입니다.

3.4.1 수식 살펴보기

여기에서는 전체 평점을 대상으로 하는 전체 최소-최대화와 사용자 또는 아이템 집단의 집단 평점을 대상으로 집단 최소-최대화에 대한 수식을 살펴봅니다.

3.4.1.1 전체 최소-최대화

전체 최소-최대화는 평점을 전체 평점의 최솟값과 최댓값으로 새로운 최댓값과 최솟값 사이 값으로 변환하는 것입니다. 먼저 평점 집합을 0과 1 사이 값으로 변환하는 최소-최대화 수식도 참고로 먼저 살펴봅니다.

평점 집합의 최솟값과 최댓값을 0과 1 사이로 변환하는 최소-최대화는 다음과 같이 정의됩니다.

$$\hat r_{ui} = \frac{r_{ui} - r_{\min }}{r_{\max } - r_{\min }}$$

여기에서 $r_{ui}$은 사용자 $u$가 아이템 $i$에 매긴 평점, $r_{\min }$과 ${r_{\max }}$는 평점 집합 $R$의 최솟값과 최댓값입니다.

다음으로 평점 집합을 새로운 최솟값과 최댓값 사이로 변환하는 최소-최대화 수식을 살펴봅니다. 평점 집합을 0과 1 사이 값으로 변환하는 최소-최대화 수식에 새로운 최댓값과 최솟값을 뺀 값을 곱하고 새로운 최솟값을 더하여 0과 1 사이가 아닌 새로운 최솟값과 최댓값 사이로 평점을 변환합니다.

평점 집합의 최솟값과 최댓값을 새로운 최솟값과 최댓값 사이로 변환하는 최소-최대화는 다음과 같이 정의됩니다.

$$ \begin{flalign} \hat r_{ui} = \frac{r_{ui} - r_{\min }}{r_{\max } - r_{\min }}(r_{\mathrm{new}\_ \max } - r_{\mathrm{new}\_ \min }) + r_{\mathrm{new}\_ \min } \end{flalign} $$
여기에서 $r_{ui}$은 사용자 $u$가 아이템 $i$에 매긴 평점, $r_{\min }$과 ${r_{\max }}$는 평점 집합 $R$의 최솟값과 최댓값, ${r_{\mathrm{new}\_ \min }}$ 과 ${r_{\mathrm{new}\_ \max }}$는 새로운 평점 집합 $R'$의 최솟값과 최댓값입니다.

정규화된 평점은 정규화 과정에서 사용된 새로운 평점 최솟값과 최댓값과 평점 집합 $R$의 평점 최솟값과 최댓값을 알고 있다면 역정규화 할 수 있습니다.

최소-최대로 정규화된 평점의 역정규화는 다음과 같이 정의됩니다.

$$ \begin{flalign} r_{ui} = \frac{{({{\hat r}_{ui}} - {r_{\mathrm{new}\_ \min }})(r_{\max } - r_{\min })}}{{{r_{\mathrm{new}\_ \max }} - {r_{\mathrm{new}\_ \min }}}} + r_{\min } \end{flalign} $$
여기에서 $\hat r_{ui}$는 정규화된 평점, $r_{\min }$과 ${r_{\max }}$는 평점 집합 $R$의 최솟값과 최댓값, ${r_u}_{_{\min }}$과 ${r_u}_{_{\max }}$는 새로운 평점 집합 $R'$의 최솟값과 최댓값입니다.

3.4.1.2 사용자 최소-최대화

사용자 최소-최대화는 사용자의 평점을 사용자 그룹 평점의 최솟값과 최댓값으로 새로운 최댓값과 최솟값 사이 값으로 변환하는 것입니다.

평점 집합의 최솟값과 최댓값을 0과 1사이로 변환하는 최소-최대화는 다음과 같이 정의됩니다.

$$ \begin{flalign} \hat r_{ui} = \frac{{r_{ui} - {r_u}_{_{\min }}}}{{{r_u}_{_{\max }} - {r_u}_{_{\min }}}} \end{flalign} $$
여기에서 $r_{ui}$은 사용자 $u$가 아이템 $i$에 매긴 평점, ${r_u}_{_{\min }}$과 ${r_u}_{_{\max }}$는 사용자 $u$에게 평가된 아이템 집합 ${I_u}$의 평점 최솟값과 최댓값입니다.

평점 집합의 최솟값과 최댓값을 새로운 최솟값과 최댓값 사이로 변환하는 최소-최대화는 다음과 같이 정의됩니다.

$$ \begin{flalign} \hat r_{ui} = \frac{{r_{ui} - {r_u}_{_{\min }}}}{{{r_u}_{_{\max }} - {r_u}_{_{\min }}}}({r_{\mathrm{new}\_ \max }} - {r_{\mathrm{new}\_ \min }}) + {r_{\mathrm{new}\_ \min }} \end{flalign} $$
여기에서 $r_{ui}$은 사용자 $u$가 아이템 $i$에 매긴 평점, ${r_u}_{_{\min }}$과 ${r_u}_{_{\max }}$는 아이템 집합 ${I_u}$의 평점 최솟값과 최댓값, ${r_{\mathrm{new}\_ \min }}$과 ${r_{\mathrm{new}\_ \max }}$는 새로운 평점 최솟값과 최댓값입니다.

정규화된 평점은 정규화 과정에서 사용된 새로운 평점 최솟값과 최댓값과 아이템 집합 ${I_u}$의 평점 최솟값과 최댓값을 알고 있다면 역정규화 할 수 있습니다.

사용자 최소-최대화로 정규화된 평점의 역정규화는 다음과 같이 정의됩니다.

$$ \begin{flalign} r_{ui} = \frac{{({{\hat r}_{ui}} - {r_{\mathrm{new}\_ \min }})({r_u}_{_{\max }} - {r_u}_{_{\min }})}}{{{r_{\mathrm{new}\_ \max }} - {r_{\mathrm{new}\_ \min }}}} + {r_u}_{_{\min }} \end{flalign} $$
여기에서 $\hat r_{ui}$는 정규화된 평점, ${r_u}_{_{\min }}$과 ${r_u}_{_{\max }}$는 아이템 집합 ${I_u}$의 평점 최솟값과 최댓값, ${r_{\mathrm{new}\_ \min }}$과 ${r_{\mathrm{new}\_ \max }}$는 새로운 평점 최솟값과 최댓값입니다.

3.4.1.3 아이템 최소-최대화

아이템 최소-최대화는 아이템의 평점을 아이템 그룹 평점의 최솟값과 최댓값으로 새로운 최댓값과 최솟값 사이 값으로 변환하는 것입니다.

평점 집합의 최솟값과 최댓값을 0과 1사이로 변환하는 최소-최대화는 다음과 같이 정의됩니다.

$$ \begin{flalign} \hat r_{ui} = \frac{{r_{ui} - {r_i}_{_{\min }}}}{{{r_i}_{_{\max }} - {r_i}_{_{\min }}}} \end{flalign} $$
여기에서 $r_{ui}$은 사용자 $u$가 아이템 $i$에 매긴 평점, ${r_i}_{_{\min }}$과 ${r_{\mathrm{new}\_ \max }}$는 아이템 $i$를 평가한 사용자 집합 ${U_i}$의 평점 최솟값과 최댓값입니다.

평점 집합의 최솟값과 최댓값을 새로운 최솟값과 최댓값 사이로 변환하는 최소-최대화는 다음과 같이 정의됩니다.

$$ \begin{flalign} \hat r_{ui} = \frac{{r_{ui} - {r_i}_{_{\min }}}}{{{r_i}_{_{\max }} - {r_i}_{_{\min }}}}({r_{\mathrm{new}\_ \max }} - {r_{\mathrm{new}\_ \min }}) + {r_{\mathrm{new}\_ \min }} \end{flalign} $$
여기에서 $r_{ui}$은 사용자 $u$가 아이템 $i$에 매긴 평점, ${r_i}_{_{\min }}$과 ${r_{\mathrm{new}\_ \max }}$는 사용자 집합 ${U_i}$의 평점 최솟값과 최댓값, ${r_{\mathrm{new}\_ \min }}$과 ${r_{\mathrm{new}\_ \max }}$는 새로운 평점 최솟값과 최댓값입니다.

정규화된 평점은 정규화 과정에서 사용된 새로운 평점 최솟값과 최댓값과 사용자 집합 ${U_i}$의 평점 최솟값과 최댓값을 알고 있다면 역정규화 할 수 있습니다.

아이템 최소-최대화로 정규화된 평점의 역정규화는 다음과 같이 정의됩니다.

$$ \begin{flalign} r_{ui} = \frac{{({{\hat r}_{ui}} - {r_{\mathrm{new}\_ \min }})({r_i}_{_{\max }} - {r_i}_{_{\min }})}}{{{r_{\mathrm{new}\_ \max }} - {r_{\mathrm{new}\_ \min }}}} + {r_i}_{_{\min }} \end{flalign} $$
여기에서 $\hat r_{ui}$는 정규화된 평점, ${r_i}_{_{\min }}$과 ${r_{\mathrm{new}\_ \max }}$는 사용자 집합 ${U_i}$의 평점 최솟값과 최댓값, ${r_{\mathrm{new}\_ \min }}$과 ${r_{\mathrm{new}\_ \max }}$는 새로운 평점 최솟값과 최댓값입니다.

3.4.2 직접 계산해보기

이제부터 예제 데이터셋을 사용하여 앞서 살펴본 수식으로 직접 계산해 볼 것입니다. 다음 표는 평점 데이터를 사용자는 행, 아이템은 열로 나타낸 것입니다.

예제 데이터셋의 평점 데이터

사용자/아이템 $i_1$ $i_2$ $i_3$ $i_4$ $i_5$ $i_6$ $i_7$ $i_8$ $i_9$ $i_{10}$
$u_1$ 0.5 5 1 3 3.5 5 2.5
$u_2$ 3 2 3.5 2 4 4 1
$u_3$ 3.5 1 3.5 4 1 3.5
$u_4$ 3 5 0.5 3.5 3.5 4.5
$u_5$ 3 4 2.5 4

예를 들어 사용자 $u_4$가 아이템 $i_1$에 매긴 평점을 정규화해 봅니다.

3.4.2.1 전체 최소-최대화

예를 들어 사용자 $u_4$가 아이템 $i_1$에 매긴 평점을 최소-최대로 정규화해 봅니다. 여기에서는 새로운 평점 최솟값과 최댓값은 1과 5로 가정합니다. 여기에서 전체 평점의 최솟값과 최댓값은 0.5와 5입니다. 최소-최대로 정규화된 평점은 사용자 $u_4$가 아이템 $i_1$에 매긴 평점을 0과 1사이 범위로 변환한 값인 $0.5555555$에 새로운 평점 최댓값과 최솟값의 편차인 $4$를 곱한 후 새로운 평점 최솟값을 더한 $3.2222$가 됩니다.

$$ \begin{flalign} {\hat r_{u_4,i_1}} = \frac{{3 - 0.5}}{{5 - 0.5}}(5 - 1) + 1 \approx 3.2222 \end{flalign} $$

정규화된 평점은 정규화 과정에서 사용된 새로운 평점 최솟값과 최댓값과 전체 평점의 최솟값과 최댓값을 알고 있다면 원본 평점인 [$3$]으로 역정규화 할 수 있습니다.

$$ \begin{flalign} r_{u_4,i_1} = \frac{{(3.2222 - 1)(5 - 0.5)}}{{5 - 1}} + 0.5 \approx 3 \end{flalign} $$

다음 표는 직접 계산한 결괏값을 나타낸 것입니다.

계산 결과

원본 평점 평점 최솟값 평점 최댓값 새로운 평점 최솟값 새로운 평점 최댓값 정규화된 평점 역정규화된 평점
3 0.5 5 1 5 3.2222 3

같은 방법으로 최소-최대화로 모두 정규화해 봅니다.

다음 표는 최소-최대로 정규화된 평점 데이터를 나타낸 것입니다.

최소-최대화 평점 데이터

아이템 $i_1$ $i_2$ $i_3$ $i_4$ $i_5$ $i_6$ $i_7$ $i_8$ $i_9$ $i_{10}$
$u_1$ 1 5 1.4444444 3.2222222 3.6666667 5 2.7777778
$u_2$ 3.2222222 2.3333333 3.6666667 2.3333333 4.1111111 4.1111111 1.4444444
$u_3$ 3.6666667 1.4444444 3.6666667 4.1111111 1.4444444 3.6666667
$u_4$ 3.2222222 5 1 3.6666667 3.6666667 4.5555556
$u_5$ 3.2222222 4.1111111 2.7777778 4.1111111

3.4.2.2 사용자 최소-최대화

예를 들어 사용자 $u_4$가 아이템 $i_1$에 매긴 평점을 사용자 최소-최대로 정규화해 봅니다. 여기에서는 새로운 평점 최솟값과 최댓값은 1과 5로 가정합니다. 여기에서 사용자 $u_4$가 평가한 아이템 {$i_1$, $i_2$, $i_4$, $i_6$, $i_8$, $i_9$}에 대한 평점은 {3, 5, 0.5, 3.5, 3.5, 4.5}입니다. 사용자 $u_4$의 평점 최솟값과 최댓값은 0.5와 5입니다. 사용자 최소-최대로 정규화된 평점은 사용자 $u_4$가 아이템 $i_1$에 매긴 평점을 0과 1사이 범위로 변환한 값인 $0.5555556$에 새로운 평점 최댓값과 최솟값의 편차인 $4$를 곱한 후 새로운 평점 최솟값을 더한 $3.2222가 됩니다.

$$ \begin{flalign} {\hat r_{u_4,i_1}} = \frac{{3 - 0.5}}{{5 - 0.5}}(5 - 1) + 1 \approx 3.2222 \end{flalign} $$

정규화된 평점은 정규화 과정에서 사용된 새로운 평점 최솟값과 최댓값과 사용자 $u_4$가 평가한 아이템 평점의 최솟값과 최댓값을 알고 있다면 원본 평점인 $3$으로 역정규화 할 수 있습니다.

$$ \begin{flalign} r_{u_4,i_1} = \frac{{(3.2222 - 1)(5 - 0.5)}}{{5 - 1}} + 0.5 \approx 3 \end{flalign} $$

다음 표는 직접 계산한 결괏값을 나타낸 것입니다.

계산 결과

원본 평점 평점 최솟값 평점 최댓값 새로운 평점 최솟값 새로운 평점 최댓값 정규화된 평점 역정규화된 평점
3 0.5 5 1 5 3.2222 3

같은 방법으로 사용자 최소-최대화로 모두 정규화해 봅니다.

다음 표는 사용자 최소-최대로 정규화된 평점 데이터를 나타낸 것입니다.

[사용자 최소-최대화 평점 데이터]

아이템 $i_1$ $i_2$ $i_3$ $i_4$ $i_5$ $i_6$ $i_7$ $i_8$ $i_9$ $i_{10}$
$u_1$ 1 5 1.4444444 3.2222222 3.6666667 5 2.7777778
$u_2$ 3.6666667 2.3333333 4.3333333 2.3333333 5 5 1
$u_3$ 4.3333333 1 4.3333333 5 1 4.3333333
$u_4$ 3.2222222 5 1 3.6666667 3.6666667 4.5555556
$u_5$ 2.3333333 5 1 5

3.4.2.3 아이템 최소-최대화

예를 들어 사용자 $u_4$가 아이템 $i_1$에 매긴 평점을 아이템 최소-최대로 정규화해 봅니다. 여기에서는 새로운 평점 최솟값과 최댓값은 1과 5로 가정합니다. 여기에서 아이템 $i_1$을 평가한 사용자 {$u_1$, $u_2$, $u_4$}에 대한 평점은 {0.5, 3, 3}입니다. 아이템 $i_1$의 평점 최솟값과 최댓값은 0.5와 3입니다. 아이템 최소-최대로 정규화된 평점은 사용자 $u_4$가 아이템 $i_1$에 매긴 평점을 0과 1사이 범위로 변환한 값인 $1$에 새로운 평점 최댓값과 최솟값의 편차인 $4$를 곱한 후 새로운 평점 최솟값을 더한 $5$가 됩니다.

$$ \begin{flalign} {\hat r_{u_4,i_1}} = \frac{{3 - 0.5}}{{3 - 0.5}}(5 - 1) + 1 = 5 \end{flalign} $$

정규화된 평점은 정규화 과정에서 사용된 새로운 평점 최솟값과 최댓값과 아이템 $i_1$을 평가한 사용자 평점의 최솟값과 최댓값을 알고 있다면 원본 평점인 $3$으로 역정규화 할 수 있습니다.

$$ \begin{flalign} r_{u_4,i_1} = \frac{{(5 - 1)(3 - 0.5)}}{{5 - 1}} + 0.5 = 3 \end{flalign} $$

다음 표는 직접 계산한 결괏값을 나타낸 것입니다.

계산 결과

원본 평점 평점 최솟값 평점 최댓값 새로운 평점 최솟값 새로운 평점 최댓값 정규화된 평점 역정규화된 평점
3 0.5 3 1 5 5 3

같은 방법으로 아이템 최소-최대화로 모두 정규화해 봅니다.

다음 표는 아이템 최소-최대로 정규화된 평점 데이터를 나타낸 것입니다.

[아이템 최소-최대화 평점 데이터]

아이템 $i_1$ $i_2$ $i_3$ $i_4$ $i_5$ $i_6$ $i_7$ $i_8$ $i_9$ $i_{10}$
$u_1$ 1 5 1 4.2 1 5 5
$u_2$ 5 1 4.3333333 3 5 1
$u_3$ 3 1 5 1 1
$u_4$ 5 5 1 5 3.6666667
$u_5$ 2.3333333 5 3.4 5

3.4.3 예제 코드 실행해보기

앞서 "직접 계산하기"에서는 예제 데이터셋의 평점 데이터를 사용하여 계산해 보았습니다. 이제부터는 데이터 파일과 예제 코드를 사용하여 "직접 계산하기"의 계산 결과에 대해 한번 더 확인해 볼 것입니다.

"직접 계산하기" 계산 결과

구분 사용자 아이템 원본 평점 정규화된 평점 설명
전체 최소-최대화 $u_4$ $i_1$ 3 3.2222 평점을 새로운 평점 최댓값과 최솟값 사이의 값으로 변환
사용자 최소-최대화 3.2222 각 사용자 그룹의 평점을 사용자 그룹의 새로운 평점 최댓값과 최솟값 사이의 값으로 변환
아이템 최소-최대화 5 각 아이템 그룹의 평점을 아이템 그룹의 새로운 평점 최댓값과 최솟값 사이의 값으로 변환

3.4.3.1 구현 클래스 살펴보기

먼저 예제 코드에서 사용하는 Z점수화가 구현된 MinMaxNormalizer 클래스를 살펴봅니다. MinMaxNormalizer 클래스는 Apache Spark ML 패키지의 추상 클래스인 Transformer 클래스를 상속받아 평점 데이터를 최소-최대화된 평점 데이터로 변환하는 transform 메서드를 구현한 클래스입니다.

다음 그림은 UML의 클래스 다이어그램 표기법을 사용하여 MinMaxNormalizer 클래스를 클래스 다이어그램으로 나타낸 것입니다.

Download

[UML 클래스 다이어그램]

MinMaxNormalizer 클래스는 최소-최대화를 위해 필요한 매개변수의 설정이나 기본값 변경이 필요한 경우에는 필요에 따라 다음 코드와 같이 빌더 패턴을 사용하여 인스턴스를 생성할 수 있습니다.

MinMaxNormalizer normalizer =
                new MinMaxNormalizer()
                        .setGroup(Group.USER)
                        .setGroupCol("user")
                        .setLower(1d)
                        .setUpper(5d)
                        .setVerbose(true)
                        .setOutputCol("rating")
                        .setUserCol("user")
                        .setItemCol("item")
                        .setRatingCol("rating");

MinMaxNormalizer 클래스의 인스턴스에 설정 가능한 매개변수는 다음과 같습니다.

주요 매개변수

매개변수 유형 필수여부 기본값 설명
group Enum - 최소-최대화 기준을 Enum 유형으로 설정(기본값/null: 전체, Group.USER: 사용자, Group.ITEM: 아이템)
groupCol String - 최소-최대화 기준을 문자열로 설정(기본값/null: 전체, user: 사용자, item:아이템).
lower Double 0d 새로운 평점 최솟값
upper Double 1d 새로운 평점 최댓값
verbose boolean false 처리과정에 대한 정보를 출력할 것인지 여부 체크(기본값: false).
userCol String user 평점 데이터의 사용자 칼럼명(기본값: user)
itemCol String item 평점 데이터의 아이템 칼럼명(기본값: item)
ratingCol String rating 평점 데이터의 평점 칼럼명(기본값: rating)
outputCol String ratingCol 출력 칼럼명(기본값: ratingCol)으로 정규화된 평점

생성된 MinMaxNormalizer 인스턴스는 RatingNormalizer 클래스에 구현된 transform 메서드를 사용하여 평점 데이터를 입력받아 평점을 최소-최대화된 평점으로 변환할 수 있습니다.

Dataset<Row> normalizedRatingDS = normalizer.transform(ratingDS);

3.4.3.2 예제 코드 살펴보기

여기에서는 "직접 계산하기"의 계산 결과를 확인하기 위해 JUnit으로 작성된 예제 클래스의 소스 코드를 살펴봅니다. 다음은 r4tings-recommender 라이브러리에 포함된 최소-최대화를 위한 구현 클래스인 MinMaxNormalizer 클래스를 이용하여 "직접 계산하기"의 계산 결과를 확인하기 위한 MinMaxTest 클래스의 minMaxExamples는 테스트 메서드입니다.

MinMaxTest.java

소스 코드에서 볼 수 있듯이 대부분 코드는 테스트를 처리하기 위한 것이지만 기본 흐름은 매우 단순합니다. 먼저 ❶ 매개변수를 바꿔가면서 실행하고 결과를 확인하기 위한 CSV 형식의 인자 목록을 설정합니다( 17~21행). 반복 실행되는 minMaxExamples 메서드에서는 테스트 인자들을 매개변수로 받습니다. 다음으로 ❷ Parquet 유형의 평점 데이터를 읽어 들이고(30행) ❸ MinMaxNormalizer 클래스의 인스턴스 생성하여(32행~33행) ❹ 평점 데이터를 전달하여 정규화합니다(34행). 마지막으로 ❺ "직접 계산하기"에서 계산해 본 특정 사용자와 아이템에 해당하는 기댓값(Expected)과 예제 코드의 실행 결과인 실제 값(Actual)의 소수 자릿수 7자리까지 비교합니다(47행).

3.4.3.3 실행 결과 확인하기

여기에서는 앞서 살펴본 테스트 클래스인 MinMaxTest 클래스의 테스트 메서드인 minMaxExamples의 실행 결과를 살펴봅니다. 다음과 같이 명령줄 인터페이스(CLI, Command line interface)에서 빌드 도구인 Gradle Wrapper로 MinMaxTest 클래스의 테스트 메서드인 minMaxExamples를 실행해 봅니다.

./gradlew :recommender-examples:test --tests com.r4tings.recommender.examples.ch03.MinMaxTest.minMaxExamples

테스트 메서드가 실행되면 직접 계산하기에서 다룬 결과를 확인하기 위해 설정한 테스트 인자 목록을 테스트 메서드의 매개변수에 대입해가며 반복 실행되어 결과가 출력됩니다.

다음은 반복 실행 테스트를 위한 테스트 인자 목록입니다

테스트 인자 목록

구분 데이터 경로 그룹 상세출력 사용자 아이템 정규화된 평점
전체 최소-최대화 dataset/r4tings/ratings.parquet true $u_4$ $i_1$ 3.2222222
사용자 최소-최대화 dataset/r4tings/ratings.parquet USER true $u_4$ $i_1$ 3.2222222
아이템 최소-최대화 dataset/r4tings/ratings.parquet ITEM true $u_4$ $i_1$ 5

예제 코드의 실행 결과는 다음과 같습니다.

예제 코드 실행 결과더보기

이 실행 결과에서 볼 수 있듯이 설정한 테스트 인자 목록에 따라 예상대로 실제 값이 반환되어 ❶ 전체 최소-최대화 ❷ 사용자 최소-최대화 ❸ 아이템 최소-최대화에 대한 테스트 케이스가 성공적으로 종료(PASSED) 되었음을 확인할 수 있습니다. 또한, 실행 결과는 "직접 계산하기"에서 계산해 본 내용을 쉽게 확인하기 위해 처리 과정에서 파생된 상세 출력 정보도 함께 보여주고 있습니다.

3.4.3.4 R 패키지로 확인해보기

다음은 R 패키지를 이용하여 "직접 계산하기"의 계산 결과를 확인하기 위해 작성된 R 스크립트입니다.

MinMaxTest.R

이 R 스크립트는 최소-최대화를 위한 scales 패키지의 rescale 함수를 실행하고 결과를 확인하기 위한 방법을 설명합니다. 소스 코드에서 볼 수 있듯이 기본 흐름은 매우 단순합니다. 먼저 ❶ data.table 패키지의 fread 함수를 이용하여 CSV 유형의 평점 데이터를 읽어 들이고 (15행) ❷ recommenderlab 패키지에서 사용하는 realRatingMatrix 유형으로 변환하여 읽어 들인 평점 데이터를 출력합니다((32행~36행). 다음으로 ❸ 전체 최소-최대화를 하고 정규화한 평점 데이터를 matrix 유형으로 변환하여 출력합니다(38행~41행). 같은 방법으로 ❹ 사용자 최소-최대 정규화를 하고 정규화한 평점 데이터를 matrix 유형으로 변환하여 출력합니다(43행~56행). 같은 방법으로 ❺ 아이템 최소-최대화를 하고 정규화한 평점 데이터를 matrix 유형으로 변환하여 출력합니다( 58행~71행).

R 스크립트의 실행 결과는 다음과 같습니다.

R 스크립트 실행 결과더보기

이 실행 결과에서 볼 수 있듯이 ❶ 전체 최소-최대화와 ❷ 사용자 최소-최대화, 그리고 ❸ 아이템 최소-최대화 결과를 확인할 수 있습니다. 또한, 실행 결과가 "직접 계산하기"의 계산 결과와 같음을 확인할 수 있습니다.

한글:4572 영어:4314 숫자:1355

추천 시스템: 워크북

Comments

Do you have a problem, want to share feedback, or discuss further ideas? Feel free to leave a comment here! Please follow Rust's code of conduct. This comment thread directly maps to a discussion on GitHub, so you can also comment there if you prefer.

Instead of authenticating the giscus application, you can also comment directly on GitHub.