ML (label, min-max, standard, robust)

이동일·2023년 9월 19일
0

Machine Learning

목록 보기
2/12
post-thumbnail

1. Label Encoder

라벨 인코더: 머신러닝과 데이터 전처리 작업에서 주로 사용된다.
범주형 데이터를 수치형(숫자) 데이터로 변환

  • 라벨인코딩: ex) 치킨, 피자, 햄버거가 있는데 치킨는 1
    피자는2 햄버거는3과 같이 할당할 수 있다.

1. 데이터프레임 생성
import pandas as pd
df = pd.DataFrame({'A': ['a','b','c','a','b'],
                   'B': [1,2,3,1,0]})
                   
                   
#	A	B
#0	a	1
#1	b	2
#2	c	3
#3	a	1
#4	b	0

2. 인코더 모델링(A컬럼 모델링적용)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit(df['A'])


3. classes_확인
array(['a', 'b', 'c'], dtype=object)


4. a는0 b는1 c는 2 
le.transform(df['A']) #A컬럼을 행을  문자를 숫자로 변환
# 출력 array([0, 1, 2, 0, 1])

5. le_A 컬럼 생성
df['le_A'] = le.transform(df['A'])

#A	B	le_A
#0	a	1	0
#1	b	2	1
#2	c	3	2
#3	a	1	0
#4	b	0	1

6. 5에서 생성한 le_A 컬럼 숫자를 문자(범주형)으로 출력
#le_a 컬럼의 숫자로 된 행을  문자로 출력(컬럼 A와 동일하게 출력)
le.inverse_transform(df['le_A'])
array(['a', 'b', 'c', 'a', 'b'], dtype=object)


2. min-max

Min-max: 데이터를 특정 범위로 변환하는 데이터 스케일링
데이터의 범위를 0,1 혹은 원하는 범위로 조절할 수 있다.
1. 최솟값(min)과 최대값(Max)찾기: 데이터셋에서 각 특징(열)의 최솟값과 최대값을 찾는다.
2. 스케일링: 최솟값을 0, 최대값을 1로 설정하여 데이터를 변환한다.

1. 데이터프레임 생성
df = pd.DataFrame ({
    'A': [10, 20, -10, 0, 25],
    'B': [1, 2, 3, 1, 0]
})
#	A	B
#0	10	1
#1	20	2
#2	-10	3
#3	0	1
#4	25	0


2. df에 대한 min-max 스케일링
from sklearn.preprocessing import MinMaxScaler

mms = MinMaxScaler()
mms.fit(df)



3. 최대,최소, 최대값과 최소값의 차이 출력
#a,b컬럼의 최대값, a,b컬럼의 최소값
#data_range_ 는 각컬럼의 최대값과 최소값의 차이를 보여준다.
# 출력은 [35., 3.]인데  --> A컬럼 최대값25 최소값 -10    -->  35차이가 나서 35
# B컬럼은 최대값3 최소값0 --> 3          즉 [35., 3.]출력

mms.data_max_, mms.data_min_, mms.data_range_

# (array([25.,  3.]), array([-10.,   0.]), array([35.,  3.]))




4. 정규화
df_mms = mms.transform(df)
df_mms


#  정규화된 A,B컬럼이 출력된다.
#A컬럼에서 최대값 25는  정규화로 1  최소값 -10은 0으로 출력되고있다.  B컬럼도 마찬가지다.

#array([[0.57142857, 0.33333333],
 #      [0.85714286, 0.66666667],
 #     [0.        , 1.        ],
 #    [0.28571429, 0.33333333],
 #   [1.        , 0.        ]])



5. inverse 사용해보기 (정규화된 데이터를 다시 수치형으로 돌려놓는다.)
mms.inverse_transform(df_mms)

#array([[ 10.,   1.],
#       [ 20.,   2.],
#       [-10.,   3.],
#       [  0.,   1.],
#       [ 25.,   0.]])

3. Standard

Standard Scaler: 데이터의 특성을 평균이 0이고 표준편차가 1인 표준 정규 분포로 변환하는 데 사용한다. 주로 데이터 스케일을 조정하고, 서로 다른 특성 간에 스케일 차이를 제거하기 위해 사용하며 데이터의 각 특성 값들이 평균 0이고 표준편차가 1인 분포를 가지게된다.

1. 데이터 프레임 생성
df = pd.DataFrame ({
    'A': [10, 20, -10, 0, 25],
    'B': [1, 2, 3, 1, 0]
})



2. 스케일링

from sklearn.preprocessing import StandardScaler

ss= StandardScaler()
ss.fit(df)



3.출력
#scale_은 표준편차를 구한다  mean은 평균
ss.mean_, ss.scale_
# (array([9. , 1.4]), array([12.80624847,  1.0198039 ]))




4. 
#평균은0 표준편차는 1로 바꾼 데이터
#평균 0은 원본 데이터의 평균값에서 얼머나 떨어져 있는지 나타낸다.
#표준편차 1은 데이터의 분선 정도를 나타낸다.

df_ss = ss.transform(df)
df_ss

#출력
#array([[ 0.07808688, -0.39223227],
 #      [ 0.85895569,  0.58834841],
  #     [-1.48365074,  1.56892908],
   #    [-0.70278193, -0.39223227],
    #   [ 1.2493901 , -1.37281295]])

4. robust

RobustScaler: 머신러닝 모델 학습을 위해 입력 데이터의 스케일을 조정하는 데 사용 RobustScaler는 이상치의 영향을 최소화하고 데이터를 안정적으로 스케일링하는데 좋다.

  • RobustScaler의 경우 다른 스케일링 기법을 왜곡시키는데 유용하다.
1. 데이터프레임 생성
import pandas as pd
df = pd.DataFrame({
    'A': [-0.1, 0., 0.1, 0.2, 0.3, 0.4, 1.0, 1.1, 5.0]
})
df

#	A
#0	-0.1
#1	0.0
#2	0.1
#3	0.2
#4	0.3
#5	0.4
#6	1.0
#7	1.1
#8	5.0




2. 각각의 encoder 사용
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler

mm = MinMaxScaler()
ss = StandardScaler()
rs = RobustScaler()



3. 스케일링
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)


4. 결과
df_scaler

5. 시각화
import seaborn as sns
import matplotlib.pyplot as plt

sns.set_theme(style='whitegrid')

plt.figure(figsize=(16,6))
sns.boxplot(data=df_scaler, orient='h');

0개의 댓글

관련 채용 정보