2017-02-21 7 views
0

У меня есть набор документов, который кластеризуется. Теперь у каждого документа есть ярлык. Я хотел создать на основе этого классификатора, обучить и протестировать его, чтобы он работал нормально и попадал в соответствующий кластер, если я дам новый документ/текст. Поэтому я использовал countVectorizer для преобразования документов в функции. Я знаю, что этот countVectorizer примет уникальные наборы всех слов в наборе документов (более 1000 документов), которые я предоставил. Теперь я делаю классификатор либо KNN OR NavieBayes, и теперь у меня есть новый текстовый файл или документ, который мне нужно преобразовать в функции. Но если я дам один документ для countVectorizer, у меня будет всего несколько слов, и на основе этого все функции будут отличаться от учебных и тестовых документов, что, безусловно, даст результат worng. Как использовать тот же объект countVectorizer для самого документа, который я даю, есть ли какой-либо путь. Прошу вас посоветуйте, какие-либо предложения или способ сделать это ???Как классифицировать один текст с использованием алгоритмов классификатора

def classifierNaviaBayes(self): 
    count_vectorizer = CountVectorizer(binary='true') 
    train_documents = count_vectorizer.fit_transform(self.training_documents) 
    classifier = BernoulliNB().fit(train_documents, self.training_labels) 

    "Test Phase" 
    count_worng_prediction = 0 
    for i in range(0,len(self.test_documents)): 
     print("The predicted value is ",classifier.predict(count_vectorizer.transform([self.test_documents[i]]))) 
     print("The expected value is ", self.test_labels[i]) 
     predicted_result = classifier.predict(count_vectorizer.transform([self.test_documents[i]]))[0] 
     expected_result = self.test_labels[i] 
     if predicted_result != expected_result: 
      count_worng_prediction +=1 

    print("The percentage of prediction accuracy is ",(100-(count_worng_prediction/len(self.test_documents))*100)) 

Я использую тот же countVertorizer для тестовых данных, и, следовательно, приведенный ниже код работает.

ответ

0

Использование CountVectorizer.transform - это правильный способ классификации тестовых документов. Новый словарь в вашем тестовом наборе не будет использоваться, когда вы трансформируете тестовый набор с помощью векторизатора, установленного на данные обучения. (Установка векторизатора не имеет никакого смысла, так как модель была обучена на другой словаре)

Вы можете прочитать больше о том, как соответствовать редким функциям here

+0

хорошо говорят, у меня есть классификатор готов с подготовленными данными. И у меня есть один новый документ, который нужно классифицировать на соответствующий ярлык, должен ли я перейти к тому же count_vertorizer, где я сделал fit_transform? Потому что, когда я создал новый count_vectorizer и назвал преобразование для новых документов, он дал мне и ошибку. # используйте ту же стратегию построения матрицы, что и fit_transform NotFittedError: CountVectorizer - Словарь не установлен. –

+0

Вы должны использовать тот же самый count_vectorizer, который был установлен на данных обучения. – Rubbal