증분 학습 모델을 구축했지만 옳은지 또는 잘못되었는지 잘 모르겠습니다. 저는 2 개의 교육 데이터가 먼저 20000 개의 행으로 이루어져 있고 두 번째로 10000 개의 행으로 이루어져 있습니다. 두 개의 열 설명 및 ID가 있습니다. ... 오프라인의 경우 내 모델은 주어진 설명에 대한 올바른 ID를 분류되어 제대로 작동 학습에 .. datafile_train는 datafile_train1 먼저 훈련 데이터를 두 번째 훈련 데이터입니다 내가 증분SGDCllassifier partial_fit 메서드를 사용하여 증분/온라인 학습
1 SGDClassifier 및 partial_fit 방법을 사용하고 있습니다) Countvectorizer, tfidf 및 partial_fit
vectorizer = CountVectorizer()
tfidf_transformer = TfidfTransformer()
X_train = vectorizer.fit_transform(datafile_train.loc[:,'description'])
X_train_tfidf = tfidf_transformer.fit_transform(X_train)
clf = linear_model.SGDClassifier(penalty='l2',loss='hinge')
prd=clf.partial_fit(X_train_tfidf, datafile_train.loc[:,'taxonomy_id'],classes=np.unique(datafile_train.loc[:,'taxonomy_id']))
전 분류 절인이 후 6,
증분 학습 다음 partial_fit에
2) 산 세척 및 분급 unpickling를 이용해 다시 unpickled
def store(prd):
import pickle
filename = "incremental"
f = open(filename, 'wb')
pickle.dump(prd, f)
f.close()
store(prd)
def train_data():
import pickle
f = open('incremental', 'rb')
classifier = pickle.load(f)
f.close()
return classifier
clfp=train_data()
3) 다시 Countvectorizer 새로운 데이터
대 TFIDF 및 partial_fitvectorizer = CountVectorizer()
tfidf_transformer = TfidfTransformer()
X_train1 = vectorizer.fit_transform(datafile_train1.loc[:,'description'])
X_train_tfidf1 = tfidf_transformer.fit_transform(X_train1)
prd1=clfp.partial_fit(X_train_tfidf1, datafile_train1.loc[:,'taxonomy_id'])
# here clfp is previously trained data which is unpickled
나는 이와 같은 빌드 모델을 가지고 있지만 피클 파일 (처음으로 훈련 된 데이터)의 크기를 확인하면 5MB이고이 모델을 사용하여 새 데이터를 학습 한 때 두 번째 partial fit에 참조하십시오. 새 데이터를 훈련 한 후 clfp (5 MB 크기)를 사용한 후 두 번째 partial_fit에 대한 피클 열차 파일을 만들었습니다. 이전에 훈련 된 데이터에 대한 새 데이터를 학습 중이므로 업데이트해야하는 크기는 5 MB뿐입니다. Is Is 점진적/온라인 학습을 달성하기위한 올바른 방법 ?? 당신이 코드
를 사용하여 설명하고이 오류가 발생하는 경우가 좋은 것, 그래서 내가 기계 학습에 새로운 오전 도와주세요
ValueError: Number of features 125897 does not match previous data 124454.
**** 편집 (Hashingvectorizer 사용)
hashing = HashingVectorizer()
X_train_hashing=hashing.fit_transform(datafile_train.loc[:,'description'])
clf = linear_model.SGDClassifier(penalty='l2',loss='hinge')
prd=clf.partial_fit(X_train_hashing, datafile_train.loc[:,'taxonomy_id'],classes=np.unique(datafile_train.loc[:,'taxonomy_id']))
def store(prd):
import pickle
filename = "inc"
f = open(filename, 'wb')
pickle.dump(prd, f)
f.close()
store(prd)
def train_data():
import pickle
f = open('inc', 'rb')
classifier = pickle.load(f)
f.close()
return classifier
clfp=train_data()
지금 나는 다음 partial_fit에 clfp 열차 모델을 사용 중입니다
X_train_hashing1=hashing.transform(datafile_train1.loc[:,'description'])
prd1=clfp.partial_fit(X_train_hashing1, datafile_train1.loc[:,'taxonomy_id'])
def store(prd1):
import pickle
timestr = time.strftime("%Y%m%d-%H%M%S")
filename = "Train-" + timestr +".pickle"
f = open(filename, 'wb')
pickle.dump(prd1, f)
f.close()
store(prd1)
편집은 오류가 아니지만 피클 파일의 크기는 모두 동일합니다. 25.2 MB이지만 두 번째 피클 크기는 첫 번째 피클 크기보다 커야합니다.
SGDClassifier에서'partial_fit()'을 사용하려는 노력은 CountVectorizer와 TfidfTransformer를 재 맞추기 때문에 취소됩니다. 원본을 저장 한 다음 데이터의 두 번째 부분에 사용해야합니다. 하지만 그들은'partial_fit()'메서드를 사용하지 않습니다 !!! 따라서 점진적 교육을 원할 경우 다른 트랜스포머를 위해 전환해야합니다. –
@VivekKumar 귀하의 응답을 보내 주셔서 감사합니다. 내 코드를 편집 해주십시오. – outlier
@outlier, 데이터 prd1의 두 번째 일괄 처리를 훈련 할 때 "모든 유효한 라벨을 포함해야하는 클래스"오류가 표시되지 않습니까? – user1