[pythhon] yeo-johnson 변환 후 실진도와 예도의 감소량을 관찰하는 방법

6189 단어 sklearnPython
sklearnPowerTransformer을 사용하여 yeo-johnson을 전환하는 방법.yeo-johnson의 변환을 통해 분포는 정적 분포에 가깝다.yeo-johnson을 사용하여 변환할 때의 참고로 하세요.
  • yeo-johnson 변환을 통해 실진도와 첨단의 절대치의 감소량을 나타낸다.실진도와 첨단도는 모두 정규분포에서 0이기 때문에 yeo-johnson을 통해 정규분포에 가까운 지표를 바꾸었다.
  • yeo-johnson 전환에 앞서 MinMaxSccaller를 통해 정규화(최소치 0, 최대치 1 전환)를 진행한다.이렇게 하지 않으면 np.random.randn(30) / 100 + 10처럼 작고 평균이 큰 표본RuntimeWarning: divide by zero encountered in log이 분산된다.결과는 모두 동일합니다.참조: https://github.com/scikit-learn/scikit-learn/issues/14959#issuecomment-602090088
  • import 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)
    
    출력(왜곡, 선명도 감소):

    좋은 웹페이지 즐겨찾기