본문 바로가기
ML/ML-Kaggle, 데이콘

수치형 데이터 정규화

by lucian 2021. 10. 8.

회귀식을 만들 때, 각 컬럼의 단위가 다르면 큰 문제가 발생할 수 있다.

A컬럼이 단위가 1000이고 B컬럼이 0.01단위라면 회귀식이 y=1000*x1 + 0.01*x2 식이 될 수 있는데 이는 x1에 영향이 너무 커진다. 그러므로 데이터의 정규화를 통해 x1과 x2의 단위를 같게 해야 이 문제를 해소시킬 수 있다.

 

다양한 scaler가 있다. StandardScaler, RobustScaler, MinMaxScaler, Normalizer 등등

그중 Min Max Scailing 기법은 상당히 간단하다.

0~1사이의 값들로 바꿔주는 방법으로 0과1사이에서만 분포하게 할 수 있다.

 

하지만 이는 이상치에 굉장히 민감하다. 왜냐면 최댓값을 1로 보고 최솟값은 0으로 보는데 데이터의 분포에 맞지 않는 이상치가 있다면 그 이상치들이 0과 1을 차지하기 때문에 값들이 중간으로 몰리게 된다. 이는 분석에도 악영향을 끼치므로 반드시 이상치 문제를 해결하고 바꿔줘야함을 잊어선 안된다.

 

from sklearn.preprocessing import MinMaxScaler

# scaler로 MinMaxScaler()함수를 불러온다.
scaler = MinMaxScaler()

# scaler를 학습시켜야함
# train데이터에 []을 더 붙여주는 이유는 scaler.fit의 인자는 2d array로 받기 때문이다.
scaler.fit(train[['fixed acidity']])

# 학습된 scaler로 새로운 컬럼을 만든다.
train['Scaled fixed acidity'] = scaler.transform(train[['fixed acidity']])





# 위의 방법을 fit_transform으로 한꺼번에 써줄 수 있다.


train['스케일된 컬럼명']=scaler.fit_transform(train['컬럼명']) #에러 발생 
'''
ValueError: Expected 2D array, got 1D array instead:
array=[5.6 8.8 7.9 ... 7.8 6.6 7. ].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
'''
# 이 오류는 2d array를 인자로 받아야 하는데, 리스트는 1d array이기 때문에 오류가 난다.
# 해결책은 안에 []를 더 넣어 붙인다!


train['Scaled 컬럼명']=scaler.fit_transform(train[['컬럼명']])

 

'ML > ML-Kaggle, 데이콘' 카테고리의 다른 글

EDA  (0) 2021.10.08
OneHot 인코딩-OneHotEncoder(), pd.get_dummies()  (4) 2021.10.08
이상치(Outlier)  (0) 2021.10.08
랜덤포레스트(RandomForestRegressor)  (3) 2021.09.29
결측값 전처리  (0) 2021.09.29

댓글