0

10 개의 다른 텍스트 기능과 10000의 교육 집합을 사용하여 SkLearn을 사용하여 RandomForestClassification 모델을 만들었습니다. 그런 다음이를 예측에 사용하기 위해 모델을 절편했습니다.범주 데이터를 사용하여 SciKitLearn RandomForestClassification으로부터 예측

그러나 Random Forest를 생성하기 위해 LabelEncoder 및 OneHotEncoder를 사용하여 범주 형/문자열 데이터에서 최상의 결과를 얻었습니다.

이제 피클 모델을 풀어서 1 인스턴스에 대한 분류 예측을 얻고 싶습니다. 그러나 전체 교육 & 테스트 데이터 세트 CSV 을 다시로드하지 않고 전체 인코딩 과정을 거치지 않고 1 인스턴스의 텍스트를 인코딩하는 방법을 모르겠습니다.

매번 csv 파일을로드하는 것은 매우 힘들어 보입니다. 시간당 1000x를 실행하여 나에게 맞는 것 같지 않습니다.

피클이나 다른 변수/설정에서 주어진 데이터 행을 빠르게 인코딩하는 방법이 있습니까? 인코딩에는 항상 모든 데이터가 필요합니까?

단일 행을 인코딩하는 데 필요한 모든 학습 데이터를로드하는 경우 테이블에 할당 된 각 기능이 숫자 데이터로 자동 증가 된 데이터베이스에서 고유 한 텍스트 데이터를 인코딩하는 것이 유리합니다. text/categorical 필드는이 ID를 RandomForestClassification에 전달합니까? 분명히이 새 모델을 다시 채우고 피클 링해야하지만 새 행의 (인코딩 된) 숫자 표현을 정확히 알고 단순히 해당 값에 대한 예측을 요청하면됩니다.

필자가 SkLearn이나 Python에 대한 오해가 있거나 필자가 잘못 생각한 것 같아서, 나는 단지 3 일 전에 시작했습니다. 내 순진을 용서해주십시오.

+0

LabelEncoder 개체를 절취 했어야합니다. –

답변

2

Pickle을 사용하면 Label 및 One Hot Encoder를 저장해야합니다. 그런 다음 매번이 내용을 읽고 새 인스턴스를 쉽게 변환 할 수 있습니다. 예 :

import cPickle as pickle 
from sklearn.externals import joblib 
from sklearn import preprocessing 

le = preprocessing.LabelEncoder() 
train_x = [0,1,2,6,'true','false'] 
le.fit_transform(train_x) 

# Save your encoding 
joblib.dump(le, '/path/to/save/model') 
# OR 
pickle.dump(le, open('/path/to/model', "wb")) 

# Load those encodings 
le = joblib.load('/path/to/save/model') 
# OR 
le = pickle.load(open('/path/to/model', "rb")) 

# Then use as normal 
new_x = [0,0,0,2,2,2,'false'] 
le.transform(new_x) 
# array([0, 0, 0, 1, 1, 1, 3])