파이썬에서 다른 표준화의 예.
참고로이 위키피디아 기사 :
표준 편차의 편향되지 않은 추정
예제 데이터
import pandas as pd
df = pd.DataFrame({
'A':[1,2,3],
'B':[100,300,500],
'C':list('abc')
})
print(df)
A B C
0 1 100 a
1 2 300 b
2 3 500 c
팬더를 사용한 정규화 (편향되지 않은 추정값 제공)
정규화 할 때 단순히 평균을 빼고 표준 편차로 나눕니다.
df.iloc[:,0:-1] = df.iloc[:,0:-1].apply(lambda x: (x-x.mean())/ x.std(), axis=0)
print(df)
A B C
0 -1.0 -1.0 a
1 0.0 0.0 b
2 1.0 1.0 c
sklearn을 사용한 정규화 (Pandas와는 다른 편향된 추정값 제공)
동일한 작업을 수행하면 sklearn
다른 출력을 얻을 수 있습니다!
import pandas as pd
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df = pd.DataFrame({
'A':[1,2,3],
'B':[100,300,500],
'C':list('abc')
})
df.iloc[:,0:-1] = scaler.fit_transform(df.iloc[:,0:-1].to_numpy())
print(df)
A B C
0 -1.224745 -1.224745 a
1 0.000000 0.000000 b
2 1.224745 1.224745 c
sklearn의 편향된 추정이 기계 학습을 덜 강력하게 만들까요?
아니.
sklearn.preprocessing.scale 의 공식 문서에는 편향 추정기를 사용하는 것이 기계 학습 알고리즘의 성능에 영향을 미칠 가능성 이 없으며 안전하게 사용할 수 있다고 명시되어 있습니다.
공식 문서에서 :
표준 편차에 대해 편향된 추정량을 사용합니다 numpy.std(x, ddof=0)
. 의 선택은 ddof
모델 성능에 영향을주지 않습니다.
MinMax Scaling은 어떻습니까?
MinMax 스케일링에는 표준 편차 계산이 없습니다. 따라서 결과는 pandas와 scikit-learn에서 동일합니다.
import pandas as pd
df = pd.DataFrame({
'A':[1,2,3],
'B':[100,300,500],
})
(df - df.min()) / (df.max() - df.min())
A B
0 0.0 0.0
1 0.5 0.5
2 1.0 1.0
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
arr_scaled = scaler.fit_transform(df)
print(arr_scaled)
[[0. 0. ]
[0.5 0.5]
[1. 1. ]]
df_scaled = pd.DataFrame(arr_scaled, columns=df.columns,index=df.index)
print(df_scaled)
A B
0 0.0 0.0
1 0.5 0.5
2 1.0 1.0