BookmarkSubscribeRSS Feed

[SAS 활용 노하우] 정규화(normalization)

Started ‎11-29-2023 by
Modified ‎11-29-2023 by
Views 705

머신러닝을 학습하기 위해서 데이터의 정규성이 보장되어야 합니다.

각 열마다 가질 수 있는 데이터의 값의 범위가 크게 차이가 나게되면

예측값의 결과에 비슷한 영향을 끼치는 열 A와 열 C가 있을 때, 열 A의 Scale이 10 이고, 열 C의 값이 500이라고 한다면, A와 C의 열이 결과에 주는 영향이 동일하다고 가정합니다.

결과에 미치는 영향이 동일하다면 A열의 예측 모델 계수가 C열의 예측 모델 계수보다 50배 정도의 값을 가지게 됩니다.

이렇게 모델계수의 차이가 나게 되면 과학습이 발생할 수 있어 특정 입력값에 대한 계수가 커지게 됩니다.

정규화는 과학습을 막기위해 모델 계수가 클수록 학습할 때 패널티를 부여해서 모델의 계수를 작게 만듭니다.

즉, 머신러닝 모델에 따라서 입력값이 가질 수 있는 범위가 크게 달라지기 때문에 이를 방지하기 위해 정규화 처리가 필요합니다.

정규화 방법에는 크게 2가지가 있습니다.

  1. 평균 0, 분산1

  2. 최솟값 0, 최댓값 1로 변환

데이터를 정규화하기 위해서는 위의 2가지 방법 중 데이터의 특징에 맞게 방법을 선태해야합니다.

데이터의 값이 1~10의 값을 가지고 특정 데이터 하나만 10000의 값을 가질 때에는 방법1을 사용하는 것이 맞습니다.

최솟값 0, 최댓값 1로 변환하는 정규화 방법을 사용한다면 대부분의 값이 0이되면 하나의 값 10000의 값만 1로 입력값으로 변환될 것 입니다.

즉, outlier가 존재한다면 방법1. 평균 0, 분산1로 변환하는 정규화 방법을 사용하고, 튀는 값이 있지 않을 때에는 최소 0, 최대 1로 변환하는 정규화 방법을 사용합니다.

정규화를 하기 위해서는 PROC SQL statement 를 사용합니다.

아래는 sashelp 라이브러리의 cars 데이터를 활용해 horsepower 에 대한 정규화를 구현한 예제입니다.

 

 

proc sql;
select horsepower, (horsepower - mean(horsepower)) / std(horsepower) as z_scores
from sashelp.cars;
quit;

 

image (9).png

 

 

Comments
/* use PROC STDIZE to standardize by using the sample mean and sample std dev 
   https://blogs.sas.com/content/iml/2020/08/10/standardize-data-sas.html
*/
proc stdize data=sashelp.cars method=std
     out=results(rename=(horsepower=z_scores));
   var horsepower;
run;
Version history
Last update:
‎11-29-2023 01:29 AM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags