Encoder and Scaler

17697 ワード

Label-encoder

  • コースでは、ラベルは数字でなければなりません.
  • label Encoderとは?
  • 文字から
  • 文字に変換
    import pandas as pd
    df = pd.DataFrame({
        'A' : ['a', 'b', 'c', 'a', 'b'], 
        'B': [1, 2, 2, 1, 0]
    })
    
    from sklearn.preprocessing import LabelEncoder
    le = LabelEncoder()
    le.fit(df['A'])
    # df 의 A컴럼기준으로 fit
    
    le.classes_
    le.transform(df['A'])
    
    # output : array([0, 1, 2, 0, 1])
    
    df['le_A'] = le.transform(df['A'])

    1回の運転
  • fitと変換
  • le.fit_transform(df['A'])
    
    > output : array([0, 1, 2, 0, 1])
    
    # 해당 문자가 어떻게 바뀌었는지 알려줌
    le.transform(['a'])
    
    # output : array([0])
    
    # 역으로 원래 라벨을 보여줌
    le.inverse_transform(df['B'])
    > output : array(['b', 'c', 'c', 'b', 'a'], dtype=object)

    min-max scaler


  • min-max scalingとは?
    異なるサイズを統一するためにサイズを変換する概念です.ここでは最小値を0最大値に変換して1に変換します.
    元のデータ分布を維持する場合、通常化とクラスタ外の点はあまり対応しません.
    x′=x−min(x)max⁡(x)−min(x)x' = {x - min(x)\over\max(x) - min(x)}x′=max(x)−min(x)x−min(x)​
    意味:全長に分けて!
  • 💍 Layteスコア{XoverY}の使用
    df = pd.DataFrame({
        'A':[10, 20, -10, 0 ,25],
        'B':[1, 2, 3, 1, 0]
    })
    
    from sklearn.preprocessing import MinMaxScaler
    mms = MinMaxScaler()
    mms.fit(df)
    
    df_mms = mms.transform(df)
    df_mms
    
    # output : 
    array([[0.57142857, 0.33333333],
           [0.85714286, 0.66666667],
           [0.        , 1.        ],
           [0.28571429, 0.33333333],
           [1.        , 0.        ]])
    
    # 역변환
    mms.inverse_transform(df_mms)
    
    # output:
    array([[ 10.,   1.],
           [ 20.,   2.],
           [-10.,   3.],
           [  0.,   1.],
           [ 25.,   0.]])
    
    # 한번에 적용
    mms.fit_transform(df)

    Standard Scaler

  • 標準正規分布を用いて標準化!
  • from sklearn.preprocessing import StandardScaler
    
    ss = StandardScaler()
    ss.fit(df)
    
    # 평균과 표준편차
    ss.mean_, ss.scale_
    # transform
    df_ss = ss.transform(df)
    df_ss
    # output :
    array([[ 0.07808688, -0.39223227],
           [ 0.85895569,  0.58834841],
           [-1.48365074,  1.56892908],
           [-0.70278193, -0.39223227],
           [ 1.2493901 , -1.37281295]])
    
    # 한번에 하기
    ss.fit_transfrom(df)
    

    Robust Scaler

  • の中央値と四分位数を用いたスケーリング方法
  • 以上の応答能力!
  • xi−Q2 Q3−Q1{x_i - Q_2\over\Q_3 - Q_1} Q3​−Q1​xi​−Q2​​
    df = pd.DataFrame({
        'A':[-0.1, 0., 0.1, 0.2, 0.3, 0.4, 1.0, 1.1, 5.0]
    })
    
    # 해당 df를 다 스케일 해보자!
    from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
    mm = MinMaxScaler()
    ss = StandardScaler()
    rs = RobustScaler()
    
    df_scaler = df.copy()
    df_scaler['MinMax'] = mm.fit_transform(df)
    df_scaler['Standard'] = ss.fit_transform(df)
    df_scaler['Robust'] = rs.fit_transform(df)
    
    df_scaler
    
  • MinMaxは異常の影響が大きい、異常値を持つデータ
  • には不適切である.
  • Standardも...
  • Robustは異常値
  • によく応答した.