반응형
범주형 컬럼을 인코딩하려는 데 컬럼이 너무 많아서 원핫인코딩을 사용할 수 없는 상황이다
그래서 LabelEncoder를 사용하려고 했으나 array가 1차원 형식이어야 한다는 조건 때문에 train데이터에 적용이 안되는 문제가 있었다
LabelEncoder 사용시 전체 컬럼에 적용할 것인지, 또는 특정 컬럼에 적용할 것인지에 따라 약간씩 코드가 달라진다
하나의 컬럼에 LabelEncoder 적용하기
인코딩 할 컬럼이 몇 개 되지 않는 경우에는 하나씩 적용하면 사용하면 좋다!원래 LabelEncoder를 사용할 시 여러 개를 한 번에 돌리는 것보다 하나의 컬럼을 각각 확인해가며 변환하는 것이 가장 좋은 방법이라고 한다
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
X_train['컬럼명'] = encoder.fit_transform(np.array(X_train['컬럼명'].reshape(-1,1))
여러 컬럼에 LabelEncoder 적용하기
하지만,, 하나의 컬럼 각각 적용하기에 컬럼의 개수가 너무 많은 경우에는
그냥 냅다 X_train에 LabelEncoder를 입혀버리는 경우도 있다
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
train.loc[:,:] = \ ## =\는 아래 코드와 같음을 의미, 즉 인코딩한 train을 다시 train에 넣어줌
train.loc[:,:].apply(LabelEncoder().fit_tranform)
여러 컬럼 중 특정 컬럼에 LabelEncoder 적용하기
나의 경우에서는 명목형 변수와 순서형 변수가 섞여있었기 때문에 순서형 변수를 제외하고 인코딩을 해주어야 했다
처음엔 뭣 모르고 명목형에 해당하는 30여개의 변수를 loc로 하나하나 추가해주고 있었는데,,
애초에 순서형 drop 후 명목형을 인코딩해주고 두개를 concat해주면 되는 문제였다!
train_encode = train.drop(['버릴 컬럼'], axis=1)
print(train_encode.columns) # 명목형만 남기고 잘 버려졌는지 확인
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
train_encode.loc[:,:] = \
train_encode.loc[:,:].apply(LabelEncoder().fit_transform)
# 인코딩 된 컬럼과 순서형 컬럼 concat
train_concat = pd.concat([train_encode, train.loc[:,['순서형 컬럼']]], axis=1)
반응형
'python > 머신러닝&딥러닝' 카테고리의 다른 글
[python] colab pycaret 설치 (0) | 2022.01.17 |
---|