Как сделать прогнозирование данных с помощью Sklearn's RandomForestClassifier - PullRequest
0 голосов
/ 22 ноября 2018

Я следил за этим сайтом здесь https://stackabuse.com/text-classification-with-python-and-scikit-learn/ и успешно завершил модель и сохранил ее, используя свои собственные данные, однако я не знаю, как протестировать новый документ на модели.У меня есть куча документов в строковом формате, например, так: string = "Все, что угодно", и мне просто нужно знать, какой код мне нужно выполнить, чтобы проверить эти документы на моей модели.Мой код точно такой же, как и у веб-сайта, с той лишь разницей, что я загружал файлы, и для решения своей проблемы я попытался использовать classifier.predict (string), и он выдал ошибку ValueError: не удалось преобразовать строку в float.Буду признателен за любую помощь.

import re
import nltk
from sklearn.datasets import load_files
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.model_selection import train_test_split
nltk.download('wordnet')
from nltk.stem.wordnet import WordNetLemmatizer
stemmer = WordNetLemmatizer()
nltk.download('stopwords')
import pickle
from nltk.corpus import stopwords

doctor_data = load_files(r"pathtodata")
X, y = doctor_data.data, doctor_data.target

documents = []
for sen in range(0, len(X)):
    # Remove all the special characters
    document = re.sub(r'\W', ' ', str(X[sen]))

    # remove all single characters
    document = re.sub(r'\s+[a-zA-Z]\s+', ' ', document)

    # Remove single characters from the start
    document = re.sub(r'\^[a-zA-Z]\s+', ' ', document)

    # Substituting multiple spaces with single space
    document = re.sub(r'\s+', ' ', document, flags=re.I)

    # Removing prefixed 'b'
    document = re.sub(r'^b\s+', '', document)

    # Converting to Lowercase
    document = document.lower()

    # Lemmatization
    document = document.split()

    document = [stemmer.lemmatize(word) for word in document]
    document = ' '.join(document)

    documents.append(document)

vectorizer = CountVectorizer(max_features=1500, min_df=5, max_df=0.7, stop_words=stopwords.words('english'))
X = vectorizer.fit_transform(documents).toarray()

tfidfconverter = TfidfTransformer()
X = tfidfconverter.fit_transform(X).toarray()

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

classifier = RandomForestClassifier(n_estimators=1000, random_state=0)
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score

print(confusion_matrix(y_test,y_pred))
print(classification_report(y_test,y_pred))
print(accuracy_score(y_test, y_pred))
with open('text_classifier', 'wb') as picklefile:
    pickle.dump(classifier,picklefile)

Обновление: Я попытался преобразовать свой документ в правильный формат, используя этот код

vectorizer = CountVectorizer(max_features=1500, min_df=5, max_df=0.7, stop_words=stopwords.words('english'))
X = vectorizer.fit_transform(MYDOC).toarray()

tfidfconverter = TfidfTransformer()
X = tfidfconverter.fit_transform(X).toarray()

pred = model.predict(X)
print(pred)

И это ошибкаЯ получил ValueError: Количество функций модели должно соответствовать входным данным.Модель n_features - 897, а входные n_features - 149

...