[pythhon] yeo-johnson 변환 후 실진도와 예도의 감소량을 관찰하는 방법
np.random.randn(30) / 100 + 10
처럼 작고 평균이 큰 표본RuntimeWarning: divide by zero encountered in log
이 분산된다.결과는 모두 동일합니다.참조: https://github.com/scikit-learn/scikit-learn/issues/14959#issuecomment-602090088import pandas as pd
def yeojohnson(df):
# 参照渡しされるので新規のものに変えておく
df = df.copy()
# 比較用に残しておく
df_orig = df.copy()
# yeo-johnson
# 標準化は別にしても良い(standardize=Trueにしても良い)
# mmなしだと、エラーが出たりするので先にやっておく
# 参考:https://github.com/scikit-learn/scikit-learn/issues/14959#issuecomment-574253115
# 参考:https://github.com/scikit-learn/scikit-learn/issues/14959#issuecomment-602090088
from sklearn.preprocessing import MinMaxScaler, PowerTransformer
mm = MinMaxScaler()
pt = PowerTransformer(standardize=False)
df[:] = mm.fit_transform(df[:])
df[:] = pt.fit_transform(df[:])
# 歪度・尖度を計算
# 歪度:負:左長裾、0:正規分布、正:右長裾
# 尖度:負:平、0:正規分布、正:凸
# なので絶対値の差を見る
df_diff = pd.concat([
df_orig.skew(),
df.skew(),
df_orig.skew().abs() - df.skew().abs(),
df_orig.kurtosis(),
df.kurtosis(),
df_orig.kurtosis().abs() - df.kurtosis().abs(),
], axis=1)
df_diff.columns=[
'skew (original)',
'skew (yeo-johnson)',
'skew abs decrease',
'kurtosis (original)',
'kurtosis (yeo-johnson)',
'kurtosis abs decrease',
]
display(df_diff)
return df
# 使用例
from sklearn.datasets import load_iris
iris = load_iris(as_frame=True)['data']
yeojohnson(iris)
출력(왜곡, 선명도 감소):Reference
이 문제에 관하여([pythhon] yeo-johnson 변환 후 실진도와 예도의 감소량을 관찰하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Masahiro_T/items/1f0cbe30ef4142277af9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)