feature scaling
- 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업 : feature scaling -> 표준화 (Standardization)와 정규화 (Normalization)
표준화 (Standardization)
- 평균이 0 이고 분산이 1인 Gaussian distribution으로 변환
정규화 (Normalization)
- 서로 다른 피처의 크기를 통일하기 위해 크기를 변환하는 개념.
사이킷 런의 Normalizer모듈은 선형대수에서의 정규화 개념이 적용, 개별 벡 터의 크기를 맞추기 위해 변환
범주형(등급 같이 나눠져 있는것) 변수는 스케일링 해주지 않는다.
실습 데이터
from sklearn.datasets import load_iris
import pandas as pd
#붗꽃 데이터 셋을 로딩하고 DataFrame으로 변환합니다.
iris = load_iris()
iris_data = iris.data
iris_df = pd.DataFrame(data=iris_data, columns = iris.feature_names)
print('feature 들의 평균 값')
print(iris_df.mean())
print('\\nfeature 들의 분산 값')
print(iris_df.var())
feature 들의 평균 값
sepal length (cm) 5.843333
sepal width (cm) 3.057333
petal length (cm) 3.758000
petal width (cm) 1.199333
dtype: float64
feature 들의 분산 값
sepal length (cm) 0.685694
sepal width (cm) 0.189979
petal length (cm) 3.116278
petal width (cm) 0.581006
dtype: float64
from sklearn.preprocessing import StandardScaler, MinMaxScaler
#MinMaxScaler 객체 생성
scaler = StandardScaler()
#MinMaxScaler 로 데이터 셋 변환, fit()과 transform()호출.
scaler.fit(iris_df)
iris_scaled = scaler.transform(iris_df)
#transform()시 scale 변환된 데이터 셋이 numpy ndarry로 반환되어 이를 DataFrame으로 변환
iris_df_scaled = pd.DataFrame(data = iris_scaled, columns = iris.feature_names)
iris_df_scaled
⇒ - 부터 + 까지 고르게 정규 분포에 가깝도록 이루어지게 변형시켜준다.
MinMaxScaler
# 정규화
minmax = MinMaxScaler()
minmax.fit(iris_df)
minmax_scaled = minmax.transform(iris_df)
minmax_scaled_df = pd.DataFrame(minmax_scaled,columns=iris.feature_names)
minmax_scaled_df
이상치(Ourlier)
- 이상치 판단 기준
- 도메인적 지식이 가장 중요하다.
- 수학적/통계적 문제
- 편입을 어떻게 할 것인가 고민
실습
import pandas as pd
import numpy as np
def outlier_igr(df, column):
q25 = df[column].quantile(0.25)
q75 = df[column].quantile(0.75)
#iqr
iqr = q75 - q25
cut_off = iqr*1.5
lower = q25 - cut_off
upper = q75 + cut_off
outlier_data_low = df[df[column]< lower]
outlier_data_high = df[df[column] > upper]
return (outlier_data_low , outlier_data_high)
data1, data2 = outlier_igr(titanic, 'Age')
print(f'lower : {data1["Age"]}')
print(f'high : {data2["Age"]}')
lower : Series([], Name: Age, dtype: float64)
high : 33 66.0
54 65.0
96 71.0
116 70.5
280 65.0
456 65.0
493 71.0
630 80.0
672 70.0
745 70.0
851 74.0
Name: Age, dtype: float64
import seaborn as sns
plt.figure(figsize = (8,8))
sns.distplot(titanic['Age'])
plt.title('vertival graph', size = 15)
plt.show()
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler = StandardScaler()
scaler.fit(titanic[['Age','Fare']])
scaled = scaler.transform(titanic[['Age','Fare']])
import pandas as pd
scaled_df = pd.DataFrame(scaled, columns=['Age','Fare'])
scaled_df
import seaborn as sns
plt.figure(figsize = (4,7))
sns.distplot(scaled_df['Age'])
plt.title('vertival graph', size = 15)
plt.show()
plt.figure(figsize = (4,7))
sns.boxplot(x = "Survived", y = "Age", data = titanic)
plt.show()
'빅데이터 분석가 양성과정 > Python' 카테고리의 다른 글
판다스 활용 (0) | 2024.07.10 |
---|---|
Pydata 데이터 가져오기 (0) | 2024.07.10 |
데이터 인코딩 (0) | 2024.07.10 |
결측값 처리 (0) | 2024.07.10 |
pandas - brazil ecommerce dataset ( 2 ) (0) | 2024.07.09 |