LabelEncoder new class 대처하기

2020. 1. 4. 21:54분석 Python/Scikit Learn (싸이킷런)

labelencoder를 사용하다 보면, new class에 대체하는 방법이 필요하다. 
추가적인 클래스로 학습하기 어려운 이유는 뉴럴 네트워크 아키텍처를 학습시킬 때 추가 클래스 없을 때의 인코딩 값이 변하기 때문이다.
그러므로 여기서 대처 방법은 새로운 클래스 같은 경우 적은 클래스일 수 있으니 결측 클래스로 넣는 방법으로 진행한다.  (만약 많다면, 다시 학습을 해야 할 필요성이 있을 것이다.)

from sklearn.preprocessing import LabelEncoder
import numpy as np

le = LabelEncoder()
a = ["paris", "paris", "tokyo", "amsterdam"] + [np.nan]
le.fit(a)
le.classes_

여기에 새로운 클래스가 2개 더 생겼다고 해보자.
이때 나머지 클래스에 대해서는 결측으로 바꿔준다.

test= ["paris", "paris", "tokyo", "amsterdam"] + ["ho", "h02", np.nan]
change_test= [np.nan if not i in le.classes_ else i for i in test ]
le.transform(a)

out = le.transform(change_test)
out

그래서 새로운 클래스를 결측으로 바꿔서 인코딩 값으로 1로 사용한다.

 

728x90