Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

normalize

데이터 정규화

설명

예제

N = normalize(A)A에 있는 데이터의 벡터별 z 점수를 반환합니다. 이때 z 점수의 중심은 0이고 표준편차는 1입니다.

  • A가 벡터이면 normalize는 전체 벡터에 대해 연산을 수행합니다.

  • A가 행렬, 테이블 또는 타임테이블이면 normalize는 데이터의 각 열에 대해 개별적으로 연산을 수행합니다.

  • A가 다차원 배열인 경우 normalize는 크기가 1이 아닌 첫 번째 배열 차원을 따라 연산합니다.

예제

N = normalize(A,dim)은 차원 dim을 따라 z 점수를 반환합니다. 예를 들어, normalize(A,2)는 각 행을 정규화합니다.

예제

N = normalize(___,method)는 위에 열거된 구문 중 하나를 사용하여 정규화 방법을 지정합니다. 예를 들어, normalize(A,'norm')A에 있는 데이터를 유클리드 노름(2-노름)으로 정규화합니다.

예제

N = normalize(___,method,methodtype)은 지정된 방법에 대한 정규화 유형을 지정합니다. 예를 들어, normalize(A,'norm',Inf)는 무한대 노름을 사용하여 A에 있는 데이터를 정규화합니다.

N = normalize(___,'center',centertype,'scale',scaletype)'center''scale' 방법을 동시에 사용합니다. 이들 방법만 함께 사용할 수 있습니다. centertype 또는 scaletype을 지정하지 않으면 해당 방법에 대한 디폴트 방법 유형을 사용하여 정규화합니다(평균 0이 되도록 중심화하고 표준편차로 스케일링함).

이 구문을 정규화 유형과 함께 사용하여 두 방법을 모두 수행합니다. 예를 들면 N = normalize(A,'center','median','scale','mad')와 같습니다. 먼저 계산한 정규화에서의 정규화 값 CS를 이 구문을 사용하여 지정해 줄 수도 있습니다. 예를 들어, [N1,C,S] = normalize(A1)을 사용하여 데이터 세트 하나를 정규화하고 파라미터를 저장합니다. 그런 다음, N2 = normalize(A2,'center',C,'scale',S)를 사용하여 다른 데이터 세트에서 이러한 파라미터를 재사용합니다.

예제

N = normalize(___,'DataVariables',datavars)는 입력 데이터가 테이블 또는 타임테이블인 경우 연산을 수행할 변수를 선택적으로 지정합니다. 위에 열거된 구문과 함께 이 옵션을 사용할 수 있습니다.

[N,C,S] = normalize(___)는 정규화를 수행하는 데 사용된 정규화 값 CS를 추가로 반환합니다. 사용자는 CS의 값을 명령 N = normalize(A2,'center',C,'scale',S)에 사용하여 다른 입력 데이터를 정규화할 수 있습니다.

예제

모두 축소

z 점수를 계산하여 벡터와 행렬에 있는 데이터를 정규화합니다.

벡터 v를 만들고 데이터가 평균 0과 표준편차 1을 갖도록 정규화하여 z 점수를 계산합니다.

v = 1:5;
N = normalize(v)
N = 1×5

   -1.2649   -0.6325         0    0.6325    1.2649

행렬 B를 만들고 각 열에 대해 z 점수를 계산합니다. 그런 다음 각 행을 정규화합니다.

B = magic(3)
B = 3×3

     8     1     6
     3     5     7
     4     9     2

N1 = normalize(B)
N1 = 3×3

    1.1339   -1.0000    0.3780
   -0.7559         0    0.7559
   -0.3780    1.0000   -1.1339

N2 = normalize(B,2)
N2 = 3×3

    0.8321   -1.1094    0.2774
   -1.0000         0    1.0000
   -0.2774    1.1094   -0.8321

벡터 A를 표준편차로 스케일링합니다.

A = 1:5;
Ns = normalize(A,'scale')
Ns = 1×5

    0.6325    1.2649    1.8974    2.5298    3.1623

범위가 구간 [0,1] 내에 오도록 A를 스케일링합니다.

Nr = normalize(A,'range')
Nr = 1×5

         0    0.2500    0.5000    0.7500    1.0000

벡터 A를 만들고 1-노름으로 정규화합니다.

A = 1:5;
Np = normalize(A,'norm',1)
Np = 1×5

    0.0667    0.1333    0.2000    0.2667    0.3333

A가 평균 0을 갖도록 데이터를 중심화합니다.

Nc = normalize(A,'center','mean')
Nc = 1×5

    -2    -1     0     1     2

다섯 사람의 키 정보를 포함하는 테이블을 만듭니다.

LastName = {'Sanchez';'Johnson';'Lee';'Diaz';'Brown'};
Height = [71;69;64;67;64];
T = table(LastName,Height)
T=5×2 table
    LastName     Height
    _________    ______

    'Sanchez'      71  
    'Johnson'      69  
    'Lee'          64  
    'Diaz'         67  
    'Brown'        64  

가장 큰 키를 사용해 키 데이터를 정규화합니다.

N = normalize(T,'norm',Inf,'DataVariables','Height')
N=5×2 table
    LastName     Height 
    _________    _______

    'Sanchez'          1
    'Johnson'    0.97183
    'Lee'        0.90141
    'Diaz'       0.94366
    'Brown'      0.90141

데이터 세트를 정규화하고 계산된 파라미터 값을 반환하고 파라미터를 재사용하여 동일한 정규화를 다른 데이터 세트에 적용합니다.

두 개의 변수 TemperatureWindSpeed가 있는 타임테이블을 만듭니다. 그런 다음 동일한 변수이지만 일 년 후의 샘플을 사용하는 두 번째 타임테이블을 만듭니다.

rng default 
Time1 = (datetime(2019,1,1):days(1):datetime(2019,1,10))';
Temperature = randi([10 40],10,1);
WindSpeed = randi([0 20],10,1);
T1 = timetable(Temperature,WindSpeed,'RowTimes',Time1)
T1=10×2 timetable
       Time        Temperature    WindSpeed
    ___________    ___________    _________

    01-Jan-2019        35             3    
    02-Jan-2019        38            20    
    03-Jan-2019        13            20    
    04-Jan-2019        38            10    
    05-Jan-2019        29            16    
    06-Jan-2019        13             2    
    07-Jan-2019        18             8    
    08-Jan-2019        26            19    
    09-Jan-2019        39            16    
    10-Jan-2019        39            20    

Time2 = (datetime(2020,1,1):days(1):datetime(2020,1,10))';
Temperature = randi([10 40],10,1);
WindSpeed = randi([0 20],10,1);
T2 = timetable(Temperature,WindSpeed,'RowTimes',Time2)
T2=10×2 timetable
       Time        Temperature    WindSpeed
    ___________    ___________    _________

    01-Jan-2020        30            14    
    02-Jan-2020        11             0    
    03-Jan-2020        36             5    
    04-Jan-2020        38             0    
    05-Jan-2020        31             2    
    06-Jan-2020        33            17    
    07-Jan-2020        33            14    
    08-Jan-2020        22             6    
    09-Jan-2020        30            19    
    10-Jan-2020        15             0    

첫 번째 타임테이블을 정규화합니다. 세 개의 출력값을 지정합니다. 지정하는 값은 정규화된 테이블 및 정규화를 수행하기 위해 함수에서 사용하는 정규화 파라미터 값 CS입니다.

[T1_norm,C,S] = normalize(T1)
T1_norm=10×2 timetable
       Time        Temperature    WindSpeed
    ___________    ___________    _________

    01-Jan-2019      0.57687       -1.4636 
    02-Jan-2019        0.856       0.92885 
    03-Jan-2019      -1.4701       0.92885 
    04-Jan-2019        0.856       -0.4785 
    05-Jan-2019     0.018609       0.36591 
    06-Jan-2019      -1.4701       -1.6044 
    07-Jan-2019      -1.0049      -0.75997 
    08-Jan-2019     -0.26052       0.78812 
    09-Jan-2019      0.94905       0.36591 
    10-Jan-2019      0.94905       0.92885 

C=1×2 table
    Temperature    WindSpeed
    ___________    _________

       28.8          13.4   

S=1×2 table
    Temperature    WindSpeed
    ___________    _________

      10.748        7.1056  

이제 첫 번째 정규화의 파라미터 값을 사용하여 두 번째 타임테이블 T2를 정규화합니다. 이 기법은 T2의 데이터가 T1과 동일한 방법으로 정규화되도록 합니다.

T2_norm = normalize(T2,"center",C,"scale",S)
T2_norm=10×2 timetable
       Time        Temperature    WindSpeed
    ___________    ___________    _________

    01-Jan-2020      0.11165      0.084441 
    02-Jan-2020      -1.6562       -1.8858 
    03-Jan-2020      0.66992       -1.1822 
    04-Jan-2020        0.856       -1.8858 
    05-Jan-2020       0.2047       -1.6044 
    06-Jan-2020      0.39078       0.50665 
    07-Jan-2020      0.39078      0.084441 
    08-Jan-2020      -0.6327       -1.0414 
    09-Jan-2020      0.11165       0.78812 
    10-Jan-2020       -1.284       -1.8858 

기본적으로 normalizeCS에도 있는 변수 T2에 대해 연산을 수행합니다. T2에 있는 변수의 일부를 정규화하려면 'DataVariables' 이름-값 인수로 연산을 수행할 변수를 지정하십시오. 사용자가 지정한 변수의 일부가 CS에 있어야 합니다.

연산을 수행할 데이터 변수로 WindSpeed를 지정합니다. normalize는 이 변수에 대해 연산을 수행하고 변경하지 않은 상태로 Temperature를 반환합니다.

T2_partial = normalize(T2,"center",C,"scale",S,"DataVariables","WindSpeed")
T2_partial=10×2 timetable
       Time        Temperature    WindSpeed
    ___________    ___________    _________

    01-Jan-2020        30         0.084441 
    02-Jan-2020        11          -1.8858 
    03-Jan-2020        36          -1.1822 
    04-Jan-2020        38          -1.8858 
    05-Jan-2020        31          -1.6044 
    06-Jan-2020        33          0.50665 
    07-Jan-2020        33         0.084441 
    08-Jan-2020        22          -1.0414 
    09-Jan-2020        30          0.78812 
    10-Jan-2020        15          -1.8858 

입력 인수

모두 축소

입력 데이터로, 스칼라, 벡터, 행렬, 다차원 배열, table형 또는 timetable형으로 지정됩니다.

A가 숫자형 배열이고 single형인 경우 출력값도 single형입니다. 그렇지 않은 경우 출력값은 double형입니다.

normalizeA에 있는 NaN 값을 무시합니다.

데이터형: double | single | table | timetable
복소수 지원 여부:

함수 동작이 수행될 차원으로, 양의 정수 스칼라로 지정됩니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

정규화 방법으로, 다음 옵션 중 하나로 지정됩니다.

방법

설명

'zscore'

평균이 0이고 표준편차가 1인 z 점수

'norm'

2-노름

'scale'

표준편차로 스케일링

'range'

데이터 범위를 [0,1]로 다시 스케일링

'center'

데이터가 평균 0을 갖도록 중심화

'medianiqr'

데이터가 중앙값 0과 사분위 범위 1을 갖도록 정규화

데이터를 정규화하기 위해 함수에서 사용할 파라미터를 반환하려면 출력 인수 CS를 지정하십시오.

방법 유형으로, 지정된 방법에 따라 배열, 테이블, 요소를 2개 가진 행 벡터 또는 유형 이름으로 지정됩니다.

방법

방법 유형 옵션

설명

'zscore'

'std'(디폴트 값)

평균 0과 표준편차 1을 갖도록 정규화

'robust'

중앙값 0과 중앙값 절대 편차 1을 갖도록 정규화

'norm'

양의 숫자형 스칼라(디폴트 값은 2)

p-노름

Inf

무한대 노름

'scale'

'std'(디폴트 값)

표준편차로 스케일링

'mad'

중앙값 절대 편차로 스케일링합니다.

'first'

데이터의 첫 번째 요소로 스케일링합니다.

'iqr'

사분위 범위로 데이터를 스케일링합니다.

숫자형 배열

숫자형 값으로 데이터를 스케일링합니다.. 배열은 입력값 A호환되는 크기여야 합니다.

테이블

테이블의 변수를 사용하여 데이터를 스케일링합니다. 입력 데이터 A의 각 테이블 변수는 스케일링 테이블에 있는 유사한 이름의 변수의 값을 사용하여 스케일링됩니다.

'range'

요소를 2개 가진 행 벡터(디폴트 값은 [0 1])

데이터 범위를 [a b] 형식의 구간으로 다시 스케일링합니다. 여기서 a < b입니다.

'center'

'mean'(디폴트 값)

평균 0을 갖도록 중심화합니다.

'median'

중앙값 0을 갖도록 중심화합니다.

숫자형 배열

숫자형 값만큼 중심을 이동합니다. 배열은 입력값 A호환되는 크기여야 합니다.

테이블

테이블의 변수를 사용하여 중심을 이동합니다. 입력 데이터 A의 각 테이블 변수는 중심화 테이블에 있는 유사한 이름의 변수의 값을 사용하여 중심화됩니다.

데이터를 정규화하기 위해 함수에서 사용할 파라미터를 반환하려면 출력 인수 CS를 지정하십시오.

정규화 방법 유형으로, 'center' 또는 'scale' 방법에 대해 각각 유효한 methodtype 옵션으로 지정됩니다. 각 방법에 대해 사용 가능한 옵션 목록은 methodtype 인수 설명을 참조하십시오.

예: N = normalize(A,'center',C,'scale',S)

연산을 수행할 테이블 변수로, 다음 표에 있는 옵션 중 하나로 지정됩니다. datavars는 정규화할 입력 테이블의 변수를 나타냅니다. 테이블에서 datavars로 지정되지 않은 다른 변수는 연산이 수행되지 않은 채 출력값으로 전달됩니다.

옵션설명예제
변수 이름

단일 테이블 변수 이름을 지정하는 문자형 벡터 또는 string형 스칼라

'Var1'

"Var1"

변수 이름으로 구성된 벡터

각 요소가 테이블 변수 이름인, 문자형 벡터 또는 string형 배열로 구성된 셀형 배열

{'Var1' 'Var2'}

["Var1" "Var2"]

스칼라 또는 변수 인덱스로 구성된 벡터

스칼라 또는 테이블 변수 인덱스로 구성된 벡터

1

[1 3 5]

논리형 벡터

각각의 요소가 테이블 변수에 해당하는 논리형 벡터. 여기서 true는 해당하는 변수를 포함하고 false는 해당하는 변수를 제외합니다.

[true false true]

함수 핸들

테이블 변수를 입력값으로 받고 논리형 스칼라를 반환하는 함수 핸들

@isnumeric

vartype 첨자

vartype 함수로 생성된 테이블 첨자

vartype('numeric')

예: normalize(T,'norm','DataVariables',["Var1" "Var2" "Var4"])

출력 인수

모두 축소

정규화된 값으로, 배열, 테이블 또는 타임테이블로 반환됩니다. N은 입력 데이터 A와 크기가 같습니다.

일반적으로 normalize는 다음 사례를 제외하고 입력값으로 제공된 테이블 및 타임테이블에 있는 모든 변수에 대해 연산을 수행합니다.

  • 'DataVariables'를 지정하면 normalize는 지정된 변수에만 연산을 수행하고 데이터의 다른 변수는 수정되지 않은 상태로 N에 반환됩니다.

  • 먼저 계산된 파라미터 CS를 사용하여 테이블 또는 타임테이블 T를 정규화하기 위해 구문 normalize(T,'center',C,'scale',S)를 사용하면 normalize는 자동으로 CS의 변수 이름을 사용하여 연산을 수행할 T의 데이터 변수를 결정합니다. T의 다른 변수는 수정되지 않은 상태로 N에 반환됩니다.

중심화 값으로, 배열 또는 테이블로 반환됩니다.

A가 배열일 때 normalizeN = (A - C) ./ S를 충족하는 배열로 CS를 반환합니다. C의 각 값은 지정된 차원을 따라 정규화를 수행하는 데 사용되는 중심화 값입니다. 예를 들어, A가 10×10 데이터 행렬이고 normalize가 첫 번째 차원을 따라 연산을 수행한다면 CA의 각 열에 대한 중심화 값을 포함하는 1×10 벡터입니다.

A가 테이블 또는 타임테이블인 경우 normalizeN.Var = (A.Var - C.Var) ./ S.Var로 정규화한 테이블 변수들 각각의 중심과 스케일을 포함하는 테이블로 CS를 반환합니다. CS의 테이블 변수 이름은 대응하는 입력값의 테이블 변수와 일치합니다. C의 각 변수는 A의 유사한 이름의 변수를 정규화하는 데 사용된 중심화 값을 포함합니다.

스케일링 값으로, 배열 또는 테이블로 반환됩니다.

A가 배열일 때 normalizeN = (A - C) ./ S를 충족하는 배열로 CS를 반환합니다. S의 각 값은 지정된 차원을 따라 정규화를 수행하는 데 사용되는 스케일링 값입니다. 예를 들어, A가 10×10 데이터 행렬이고 normalize가 첫 번째 차원을 따라 연산을 수행한다면 SA의 각 열에 대한 스케일링 값을 포함하는 1×10 벡터입니다.

A가 테이블 또는 타임테이블인 경우 normalizeN.Var = (A.Var - C.Var) ./ S.Var로 정규화한 테이블 변수들 각각의 중심과 스케일을 포함하는 테이블로 CS를 반환합니다. CS의 테이블 변수 이름은 대응하는 입력값의 테이블 변수와 일치합니다. S의 각 변수는 A의 유사한 이름의 변수를 정규화하는 데 사용된 스케일링 값을 포함합니다.

세부 정보

모두 축소

Z 점수

평균이 μ이고 표준편차가 σ인 확률 변수 X에 대해, 값 x의 z 점수는 z=(xμ)σ.입니다. 평균이 X¯이고 표준편차가 S인 샘플 데이터에 대해, 데이터 점 x의 z 점수는 z=(xX¯)S.입니다.

z 점수는 표준편차를 사용하여 평균에서 데이터 점까지의 거리를 측정합니다. 표준화된 데이터 세트는 평균 0과 표준편차 1을 가지며, 원본 데이터 세트의 형태 속성이 그대로 유지됩니다(동일한 왜도와 첨도).

P-노름

N개 요소를 가진 벡터 v의 p-노름에 대한 일반 정의는 다음과 같습니다.

vp=[k=1N|vk|p]1/p,

여기서 p는 임의의 양의 실수, Inf 또는 -Inf입니다. 일반적으로 사용되는 몇 가지 p 값은 다음과 같습니다.

  • p가 1이면 결과로 생성되는 1-노름은 벡터 요소의 절댓값의 합입니다.

  • p가 2이면 결과로 생성되는 2-노름은 벡터 크기 또는 벡터의 유클리드 길이를 제공합니다.

  • p가 Inf이면 v=maxi(|v(i)|)입니다.

다시 스케일링하기

다시 스케일링하기는 수직선을 따라 점을 늘리거나 압축하여 데이터 세트의 최솟값과 최댓값 사이의 거리를 변경합니다. 데이터의 z-점수는 유지되므로 분포의 모양이 동일한 형태로 남게 됩니다.

임의의 구간 [a b]로 데이터 X를 다시 스케일링하는 수식은 다음과 같습니다.

Xrescaled=a+[XminXmaxXminX](ba).

normalize 함수와 rescale 함수 모두 임의의 구간으로 데이터를 다시 스케일링할 수 있지만, rescale은 입력 데이터를 지정된 최솟값과 최댓값에 맞게 자를 수도 있습니다.

사분위 범위

데이터 세트의 사분위 범위(IQR)는 값들을 정렬했을 때 그 값들의 중간 50%의 범위를 나타냅니다. 데이터의 중앙값이 Q2이고 데이터의 아래쪽 절반의 중앙값이 Q1이며 데이터의 위쪽 절반의 중앙값이 Q3인 경우 IQR = Q3 - Q1이 됩니다.

IQR은 데이터에서 가장 큰 25%와 가장 작은 25%의 값을 제외하기 때문에 데이터에 이상값(매우 크거나 매우 작은 값)이 포함된 경우 일반적으로 IQR이 데이터의 전체 범위를 살펴보는 것보다 선호됩니다.

중앙값 절대 편차

데이터 세트의 중앙값 절대 편차(MAD)는 데이터의 중앙값 X˜에서의 절대 편차의 중앙값 MAD=median(|xX˜|)입니다. 따라서 MAD는 중앙값을 기준으로 한 데이터의 가변성을 설명합니다.

표준편차는 평균으로부터의 편차를 제곱하여 이상값(매우 크거나 매우 작은 값)에 과하게 큰 영향을 부여하기 때문에, 데이터에 이상값이 포함된 경우 일반적으로 MAD가 데이터의 표준편차를 사용하는 것보다 선호됩니다. 역으로, 적은 수의 이상값의 편차는 MAD의 값에 영향을 주지 않습니다.

확장 기능

참고 항목

| |

R2018a에 개발됨