데이터를 학습하기 위해서는 방정식에 대입되어야 하는데, 방정식은 수학식이므로 데이터는 모두 숫자로 되어있어야 한다.
따라서, 문자열 데이터를 숫자로 바꿔줘야 한다.
문자열 데이터를 숫자 데이터로 바꾸는 방법은 Label Encoding , Ont-hot Encoding 두가지가 있다.
Label Encoding
먼저, sklearn 라이브러리를 임포트 해준다.
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer

수치데이터로 바꾸고자 하는 데이터를 정렬해서 확인을 한다.
아래의 예시에서는 데이터프레임 X 의 Country 컬럼을 이용하였다.

레이블 인코딩은 데이터를 정렬해서 순서대로 0부터 시작하는 숫자로 바꿔준다.
그러므로 아래의 데이터 France 는 0, Germany 는 1, Spain 은 2가 된다.

LabelEncoder() 를 메모리에 올려주기 위해서 변수 encoder 에 저장을 하였다.
fit_transform() 을 이용하여 괄호안에 인코딩 하고자 하는 데이터 컬럼을 넣어주면 아래와같이 숫자 데이터로 결과값이 리턴된다.

레이블 인코딩으로 변환한 후에 학습을 시켰을 때, 카테고리컬 데이터의 갯수가 3개 이상일 때는 레이블 인코딩으로 합습하면 학습이 잘 안된다.
이렇게 3개 이상의 카테고리컬 데이터는 One-Hot Encoding 을 이용해서 처리하면 학습이 잘 된다.
Ont-hot Encoding
원핫 인코딩은 나타내고자 할 때는, ColumnTransformer([('encoder', OneHotEncoder(), [0])], remainder= 'passthrough')
과 같은 형태로 작성해준다.
메모리에 올려주기 위해서 ct 라는 변수에 저장을 하였다
먼저, ColumnTransformer() 를 이용하여 괄호 안에 리스트형식으로 'encoder', OneHotEncoder() 를 넣어준다.
여기서 'encoder'는 그냥 인코더 이름을 넣은 것이기 때문에 변경 가능하다.
그리고, 원핫 인코딩으로 바꾸고 싶은 컬럼의 인덱스를 써준다. 아래에서는 [0] 이라고 적었다.
만약에, 원핫 인코딩으로 바꾸고 싶은 컬럼이 여러개이면, 리스트안에 인덱스만 써주면 된다. [1, 4, 5]
remainder= 'passthrough' 는 원핫인코딩이 아닌 컬럼들은 그냥 냅둬라라는 의미이다.
변수 ct 를 fit_transform() 하여 괄호안에 원핫인코딩 하고자 하는 데이터프레임을 넣어준다.
fit_transform 을 하면 원핫 인코딩 한 컬럼들이 데이터프레임 제일 앞으로 나오게 된다.
아래의 결과에서 1-3 열은 원핫 인코딩 결과, 4-5 열은 X 데이터프레임의 passthrough 한 컬럼들이다.

결과값을 쉽게 이해하자면, 정렬했던 France , Germany , Spain 를 순서대로 1 0 0 , 0 1 0, 0 0 1과 같은 형태로 나타낸 것이다.
이러한 형태로 변경하는 것을 원핫 인코딩이라고 한다.

'Machine Learning' 카테고리의 다른 글
| Logistic Regression - Confusion Matrix 인공지능 성능 평가 (0) | 2022.12.02 |
|---|---|
| Logistic Regression ( 로지스틱 회귀 ) - 인공지능으로 데이터 결과 예측하기 (0) | 2022.12.01 |
| Linear Regression ( 선형 회귀 )- 인공지능으로 데이터 결과 예측하기 (0) | 2022.12.01 |
| Dataset 을 Training 용과 Test용으로 나누기 (0) | 2022.12.01 |
| [sklearn] 데이터 표준화, 정규화 - StandardScaler , MinMaxScaler (0) | 2022.11.30 |