2024.04.12 - [MachineLearning] - Regression - Data Preprocessing (1) - Nan처리, X와y의 데이터 분류
3. 문자열을 데이터로 처리
위에서 봤듯이 국적과 구매여부의 문자열은 컴퓨터가 이해하기 어려워한다
그러니
컴퓨터가 이해하기 쉬운 숫자로 변환시켜줘야 한다
레이블 인코딩과 원 핫 인코딩
컴퓨터가 이해하기 어려운 문자열을
이해하기 쉬워하는 숫자로
변환시켜주면 되겠다
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer
임포트들을 먼저 해준뒤
그 중 레이블 인코딩은
Label Encoding
encoder = LabelEncoder()
X['Country'] = encoder.fit_transform( X['Country'] )
X
'France' =>0
'Germany' =>1
'Spain' =>2
이렇게 해주면 데이터상의 국적이 3개이기때문에
0 1 2 로 나뉘게 된다 하지만
컴퓨터의 경우 3가지 숫자보다 2가지 숫자쪽이 좀더 이해가 쉽고 오류가 덜 나기때문에
다른 방법을 사용하기로 한다
그 전에
sorted(y.unique())
y = encoder.fit_transform(y)
y
array([0, 1, 0, 0, 1, 1, 0, 1])
구매 여부는
0,1 로 두개로 나뉠수 있기 때문에 해주도록 하자
여기서
encoder는 scikit learn의 labelencoder를 변수로 만든것이고
fit_transform( )의
fit은 데이터에 맞추다 즉 훈련, 학습의 의미가 되겠다
이어 transform은 변환시키는것
( )파라미터는 그 안에 집어넣은 것을 실행하라는 의미가 되겠다
즉,
레이블 인코더를 통하여
데이터를 입력 받은것을
변환시키고 그것을 학습하는 것이라고 볼 수 있겠다
One Hot Encoding
원 핫 인코딩은
하나의 콜럼에서
중복된 데이터값의 갯수(nunique의 값 숫자) 만큼의 콜럼으로 늘어나며
맨 앞으로 오게된다
알파벳순으로 숫자가 정해지며
'France' 'Germany' 'Spain' 순서로
0 0 1 스페인
0 1 0 독일
1 0 0 프랑스
이런 방식이다
ct = ColumnTransformer( [ ( 'encoder' , OneHotEncoder() , [0] ) ] , remainder= 'passthrough' )
X = ct.fit_transform(X)
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]])
ColumnTransformer( [ ( 'encoder' , OneHotEncoder() , [0] ) ] , remainder= 'passthrough' )
에서
remainder= 'passthrough'는
앞의 튜플에서 정의되지 않은 모든것들을 그냥 통과 시킨다는 의미
[0]이 들어간 이유는
X에 들어있는 원 핫 인코딩 하고 싶은 컬럼의 인덱스
예를 들어, 원핫인코딩 하고 싶은 컬럼이 첫번째, 세번째 컬럼이면 => [0,2]라고 적어주면 되겠다
'Python > MachineLearning' 카테고리의 다른 글
Regression 1) .coef_ , .intercept_ , .predict( ) (0) | 2024.04.13 |
---|---|
Regression - Data Preprocessing (3) - StandardScaler(), MinMaxScaler(), train_test_split() (0) | 2024.04.13 |
Regression - Data Preprocessing (1) - Nan처리, X와y의 데이터 분류 (0) | 2024.04.12 |
머신 러닝이란? - 기초 개념 (0) | 2024.04.12 |
피처스케일링 - 표준화(Standard), 정규화(MinMax) (0) | 2024.04.11 |