Проблема с использованием `transform` против`fit_transform` в CountVectorizer
Я успешно обучил и протестировал модель логистической регрессии с CountVectorizer()
в качестве таких:
def train_model(classifier, feature_vector_train, label):
# fit the training dataset on the classifier
classifier.fit(feature_vector_train, label)
return classifier
def getPredictions (classifier, feature_vector_valid):
# predict the labels on validation dataset
predict = classifier.predict(feature_vector_valid)
return metrics.accuracy_score(predict, valid_y)
def createTrainingAndValidation(column):
global train_x, valid_x, train_y, valid_y
train_x, valid_x, train_y, valid_y = model_selection.train_test_split(finalDF[column], finalDF['DeedType1'])
def createCountVectorizer(column):
global xtrain_count, xvalid_count
# create a count vectorizer object
count_vect = CountVectorizer()
count_vect.fit(finalDF[column])
# transform the training and validation data using count vectorizer object
xtrain_count = count_vect.transform(train_x)
xvalid_count = count_vect.transform(valid_x)
createTrainingAndValidation('Test')
createCountVectorizer('Test')
classifier = train_model(linear_model.LogisticRegression(), xtrain_count, train_y, xvalid_count)
predictions = getPredictions(classifier, xvalid_count)
Я использовал DataFrame под названием finalDF
со всем помеченным текстом. Поскольку эта модель дает мне точность 0,68, я собирался протестировать ее на подмножестве DataFrame с неизвестной меткой. Это не было включено в фазу обучения и тестирования. Я сохранил обученную модель как bestClassifier
,
Теперь я получил подмножество неизвестного текста и попытался сделать следующее:
count_vect = CountVectorizer()
count_vect.fit(unknownDf['Text'])
text = unknownDf['Text']
xvalid_count = count_vect.transform(text)
bestClassifier.predict(xvalid_count)
finalDF
имеет 800 строк, а unknownDf
есть только 32 строки после того, что я делаю выше. Как мне исправить это?
1 ответ
Я думаю, что я вижу, что происходит, в этой части кода:
def createCountVectorizer(column):
global xtrain_count, xvalid_count
# create a count vectorizer object
count_vect = CountVectorizer()
count_vect.fit(finalDF[column])
# transform the training and validation data using count vectorizer object
xtrain_count = count_vect.transform(train_x)
xvalid_count = count_vect.transform(valid_x)
Вы объявляете CountVectorizer()
звонит fit
а потом transform
, Что вам нужно сделать, это использовать то же самое CountVectorizer()
в transform
на unknownDf['Text']
,
Когда вы делаете это:
count_vect = CountVectorizer()
count_vect.fit(unknownDf['Text'])
text = unknownDf['Text']
xvalid_count = count_vect.transform(text)
Вы создаете новый CountVectorizer()
, что создает новый пакет слов для unknownDf['Text']
, когда вы должны сделать, удалив эти две строки
count_vect = CountVectorizer()
count_vect.fit(unknownDf['Text'])
и пусть существующие CountVectorizer()
который ты FIT
на finalDF[column]
, используйте это, чтобы transform
unknownDf['Text']
,
Найдите способ ИСПОЛЬЗОВАТЬ CountVectorizer()
в вашем createCountVectorizer(column)
который вы объявили как count_vect
в transform
unknownDf['Text']
,