| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 반복문
- elbow method
- Dictionary
- 덴드로그램
- analizer
- hierarchical_clustering
- Python
- count()
- function
- del
- insert()
- numpy
- list
- data
- string
- append()
- wcss
- len()
- dendrogram
- 분류 결과표
- pandas
- matplotlib
- IN
- 최솟값
- DataFrame
- Machine Learning
- sklearn
- nan
- 최댓값
- DataAccess
- Today
- Total
개발공부
데이터 전처리 기초 #3 sklearn(사이킷런) 라이브러리를 이용해 카테고리컬 데이터 처리하기 (레이블 인코딩, 원 핫 인코딩) 본문
데이터 전처리 기초 #3 sklearn(사이킷런) 라이브러리를 이용해 카테고리컬 데이터 처리하기 (레이블 인코딩, 원 핫 인코딩)
mscha 2022. 5. 6. 18:08데이터 분리하기 #1 과 #2에서 우리는 X와 y를 구했다.


우리는 컴퓨터에게 학습을 시켜야 하기 때문에 숫자가 아닌 데이터중에,
카테고리컬 데이터로 판단되는 데이터는 숫자로 바꿔주는 작업이 필요하다.
X의 Country와 y의 데이터가 카테고리컬 데이터인지 확인하고
이를 숫자로 바꿔주는 작업을 해보겠다.
>>> X['Country'].nunique()
3
>>> sorted (X['Country'].unique())
['France', 'Germany', 'Spain']
Country의 데이터들은 ['France', 'Germany', 'Spain']로만 이루어진 카테고리컬 데이터라는 것을 확인할 수 있다.
이를 숫자로 바꾸는 방법 두가지를 알아보자.
1. Label Encoding (레이블 인코딩)
sklearn(사이킷런) 라이브러리를 이용하여 레이블 인코딩을 할 수 있다.
레이블 인코딩은 카테고리컬 데이터가 3개 이상이면 정확도가 떨어진다.
레이블 인코딩의 결과는 아래와 같다.
정렬한 후의 문자열을, 앞에서부터 0으로 숫자를 하나씩 매겨준다.
# France : 0
# Germany : 1
# Spain : 2
>>> from sklearn.preprocessing import LabelEncoder
>>> encoder = LabelEncoder()
>>> encoder.fit_transform(X['Country'])
array([0, 2, 1, 2, 0, 0, 1, 0])
이는 처음부터 France Spain Germany Spain France France Germany France 로 되어있다는 뜻이다.
2. One Hot Encoding (원핫 인코딩)
원 핫 인코딩의 결과는 아래와 같다.
# France Germany Spain
# 1 0 0
# 0 0 1
# 0 1 0
# 1 0 0
>>> from sklearn.preprocessing import OneHotEncoder
>>> from sklearn.compose import ColumnTransformer
>>> 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]])
[0] 0이라고 쓴 이유는 ?
X에서 원핫 인코딩할 컬럼이 컴퓨터가 매기는 인덱스로 # 0이기 때문이다.
즉, 원핫 인코딩할 컬럼의 인덱스를 써주면, 변환시켜 준다.
만약, 원핫 인코딩할 컬럼이 2개면, 해당 컬럼의 인덱스를 리스트안에 적어주면 된다.
결과는, 원핫 인코딩한 컬럼이, 행렬의 맨 왼쪽에 나온다.
우리는 Country는 3개의 카테고리 y의 데이터는 2개의 카테고리로 되어있기 때문에
각각 OneHotEncoding, LableEncoding을 하기로 하자.
X = ct.fit_transform(X)
encoder_y = LabelEncoder()
y = encoder_y.fit_transform(y)
'Python > Machine Learning' 카테고리의 다른 글
| 데이터 전처리 기초 #5 sklearn라이브러리를 이용해 Dataset 나누기 (Training,Test) (0) | 2022.05.09 |
|---|---|
| 데이터 전처리 기초 #4 피처 스케일링 Feature Scaling(표준화, 정규화) (0) | 2022.05.09 |
| 데이터 전처리 기초 #2 데이터(X)와 레이블(y)로 나누기 (0) | 2022.05.06 |
| 데이터 전처리 기초 #1 Nan처리하기 (0) | 2022.05.06 |
| 머신 러닝(Machine Learning)의 이해 (0) | 2022.05.06 |