반응형
우린 전처리 과정에서 다른 단위를 가진 애들을 분석해야 할 때가 있다. 한 놈은 kg, 한놈은 cm 이라면 어떻게 해야 할까??
2가지 방법이 있다. 하나는 표준화와 하나는 정규화이다.
표준화 = StandardScaler
정규화 = MinMaxScaler
이번에는 표준화를 볼 것이고 다음에는 정규화를 볼 것이다.
StandardScaler 개념
간단하다. 모든 애들을 평균이 0이고 분산이 1인 정규 분포로 만드는 것이다.
수학식부터 살펴보면 굉장히 간단하다.
(Xi - (X의 평균)) / (X의 표준편차)
아이패드가 없어서 이렇게...글로 적어본다. 젠장
예시로 설명을 하자면, 만약 평균이 50이인데 임의 숫자는 49라 하자, 그러면 어떻게 되는 것일까?
정답은 (49-50) / 1 = -1이다. 여기서 표준편차란 평균으로부터 얼마나 떨어져있는지를 구한 것이다.
라이브러리
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.datasets import load_iris
import pandas as pd
평균, 분산 구하기
어김없이 붓꽃데이터를 가져와서 본다.
iris = load_iris()
iris_data = iris.data
iris_df = pd.DataFrame(iris_data, columns=iris.feature_names)
print(iris_df.mean())
print(iris_df.var())
출력
sepal length (cm) 5.843333
sepal width (cm) 3.057333
petal length (cm) 3.758000
petal width (cm) 1.199333
dtype: float64
sepal length (cm) 0.685694
sepal width (cm) 0.189979
petal length (cm) 3.116278
petal width (cm) 0.581006
dtype: float64
평균과 분산을 보기 위해 데이터 프레임에 담아서 본다.
StandardScaler
사용법은 간단하다. 학습시키고 변환한다.
scaler = StandardScaler()
scaler.fit(iris_df)
iris_scaled = scaler.transform(iris_df)
iris_scaled_df = pd.DataFrame(iris_scaled, columns=iris.feature_names)
print(iris_scaled_df)
print(f"평균\n{iris_scaled_df.mean()}")
print(f"분산\n{iris_scaled_df.var()}")
출력
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 -0.900681 1.019004 -1.340227 -1.315444
1 -1.143017 -0.131979 -1.340227 -1.315444
2 -1.385353 0.328414 -1.397064 -1.315444
3 -1.506521 0.098217 -1.283389 -1.315444
4 -1.021849 1.249201 -1.340227 -1.315444
.. ... ... ... ...
145 1.038005 -0.131979 0.819596 1.448832
146 0.553333 -1.282963 0.705921 0.922303
147 0.795669 -0.131979 0.819596 1.053935
148 0.432165 0.788808 0.933271 1.448832
149 0.068662 -0.131979 0.762758 0.790671
[150 rows x 4 columns]
평균
sepal length (cm) -1.690315e-15
sepal width (cm) -1.842970e-15
petal length (cm) -1.698641e-15
petal width (cm) -1.409243e-15
dtype: float64
분산
sepal length (cm) 1.006711
sepal width (cm) 1.006711
petal length (cm) 1.006711
petal width (cm) 1.006711
dtype: float64
먼저 객체를 생성하여 학습시킨다. 그 안에 데이터를 집어 넣어서 transfrom을 한다.
정규화는 됐지만 리스트의 형태로 돼 있어서 다시 데이터 프레임의 형태로 바꿔줘야 한다.
츨력을 보니, 평균이 0, 분산이 1이에 가까운 정규분포로 확인된다.
-1.690315e-15 은 -1.690315 x 10^-15 이다.
반응형
'개발 Tools > 파이썬_Deep learning & ML' 카테고리의 다른 글
머신러닝 preprocessing(데이터 전처리) ( classes_, LabelEncoder, get_dummies) (0) | 2021.07.20 |
---|---|
머신러닝 MinMaxScaler(정규화) (0) | 2021.07.15 |
머신러닝 GridSearch(그리드 서치) (cv_results_, best_params_ , best_score_, estimator, param_grid, scoring, cv, refit) (0) | 2021.07.15 |
머신러닝 cross_val_score (estimator, scoring) (0) | 2021.07.13 |
머신러닝 Stratified KFold (0) | 2021.07.13 |
댓글