본문 바로가기
머신러닝

머신러닝 - Label Encoding , One Hot encoding

by leo104 2022. 12. 1.
728x90

머신러닝 전 데이터 전처리

 

- 데이터를 학습하기 위해서는,
- 방정식에 대입되어야 하는데,
- 방정식은 수학식이므로, 데이터는 모두 숫자로 되어있어야 한다.
- 따라서, 문자열 데이터를 숫자로 바꿔줘야 한다

- 방법은 2가지가 있다.

 

전제 ) sklearn 라이브러리를 불러온다

 - from sklearn.preprocessing import LabelEncoder, OneHotEncoder

 - from sklearn.compose import ColumnTransformer

 

1. Label Encoding 하는 방법

 

encoder = LabelEncoder() ====> encoder라는 변수에 함수를 저장한다.

X['Country'] = encoder.fit_transform( X['Country'])


X

	Country	Age	Salary
0	0	44.0	72000.0
1	2	27.0	48000.0
2	1	30.0	54000.0
3	2	38.0	61000.0
5	0	35.0	58000.0
7	0	48.0	79000.0
8	1	50.0	83000.0
9	0	37.0	67000.0

country 컬럼의 데이터가 숫자 데이터로 변환된 모습

 

 

 

2. On Hot Encoding 하는 방법

 

ct = ColumnTransformer( [ ('encoder', OneHotEncoder(), [바꾸고싶은 컬럼의 인덱스])], remainder = 'passthrough')

ct. fit_transform( 변수 )


ex )) 

ct = ColumnTransformer( [ ('encoder', OneHotEncoder(), [0])], remainder = 'passthrough')

ct.fit_transform( X )

array([[1.0e+00, 0.0e+00, 0.0e+00, 4.4e+01, 7.2e+04],
       [0.0e+00, 0.0e+00, 1.0e+00, 2.7e+01, 4.8e+04],
       [0.0e+00, 1.0e+00, 0.0e+00, 3.0e+01, 5.4e+04],
       [0.0e+00, 0.0e+00, 1.0e+00, 3.8e+01, 6.1e+04],
       [1.0e+00, 0.0e+00, 0.0e+00, 3.5e+01, 5.8e+04],
       [1.0e+00, 0.0e+00, 0.0e+00, 4.8e+01, 7.9e+04],
       [0.0e+00, 1.0e+00, 0.0e+00, 5.0e+01, 8.3e+04],
       [1.0e+00, 0.0e+00, 0.0e+00, 3.7e+01, 6.7e+04]])

country 컬럼이 숫자 데이터로 변환된 모습

- One Hot Encoding으로 바꾸고 싶은 컬럼의 인덱스를 써준다.
- [0] 이라고 써준다.
- 만약에, One Hot Encoding으로 바꾸고 싶은 컬럼이 여러개이면 ,
- 리스트 안에 인덱스만 써준다.

- remainder 의 passthrough는  One Hot Encoding 아닌 컬럼들은 그냥 지나치라는 뜻이다.

728x90