X имеет 7 функций на образец;ожидая 18282 - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь сделать модель классификации текста с помощью sklearn.Я довольно новичок в Python, а также sklearn.Я уже сделал модель с некоторыми данными обучения и сохранил модель.Но при попытке повторного использования модели в другой программе / файле на языке python возникает ошибка.

Я уже рассматривал некоторые подобные проблемы здесь на stackoverflow, но не смог найти решение для меня.

Я сделал несколько комментариев, чтобы вы могли легче читать код.

...
# load the dataset
data = codecs.open('C:/Users/baran/PycharmProjects/test/resource/CorpusMitLabelsPlusSonstige.txt', encoding='utf8',
               errors='ignore').read ()

# seperate lables from text
labels, texts = [], []
for i, line in enumerate(data.split("\n")):
    content = line.split()
    labels.append(content[0])
    texts.append(" ".join(content[1:]))

# create a dataframe using texts and lables
trainDF = pandas.DataFrame()
trainDF['text'] = texts
trainDF['label'] = labels

# split the dataset into training and validation datasets
train_x, valid_x, train_y, valid_y = model_selection.train_test_split(trainDF['text'], trainDF['label'])

# label encode the target variable
encoder = preprocessing.LabelEncoder()
train_y = encoder.fit_transform(train_y)
valid_y = encoder.fit_transform(valid_y)

# create a count vectorizer object
count_vect = CountVectorizer(analyzer='word', token_pattern=r'\w{1,}')
count_vect.fit(trainDF['text'])

# transform the training and validation data using count vectorizer object
xtrain_count = count_vect.transform(train_x)
xvalid_count = count_vect.transform(valid_x)
...

И так как я тренировался с различными методами, чтобы оценить, какой из них был лучше, я создал метод train_model.

...
def train_model(classifier, feature_vector_train, label, feature_vector_valid, is_neural_net=False, is_not_tfid=False,
            correct_model=False):
    # fit the training dataset on the classifier
    ...
    elif correct_model:
        classifier.fit(feature_vector_train, label)
        pkl_filename = "C:/Users/baran/PycharmProjects/test/resources/pickle_model.pkl"
        with open(pkl_filename, 'wb') as file:
            pickle.dump(classifier, file)
        # with open(pkl_filename, 'rb') as file:
        #     pickle_model = pickle.load(file)
        # joblib.dump(classifier, "C:/Users/baran/PycharmProjects/test/resources/model.pkl")
        # loaded_model = joblib.load("C:/Users/baran/PycharmProjects/test/resources/model.pkl")
        # result = loaded_model.score(feat)
        # print(pickle_model.predict(feature_vector_valid))
    ...
    # predict the labels on validation dataset
    predictions = classifier.predict(feature_vector_valid)
    ...
    return metrics.accuracy_score(valid_y, predictions)
...

Это "правильный_модель":

...
# Linear Classifier on Count Vectors
accuracy = train_model(linear_model.LogisticRegression(), xtrain_count, train_y, xvalid_count, correct_model=True)
print("LR, Count Vectors: ", accuracy)
...

Эта модель дает мне около 80% точности данных проверки.

Так что это мой тестовый файл, где я хотелпроверить, могу ли я загрузить и повторно использовать модель:

...
texts = []
texts.append("Der Bus hat nicht an der Haltestelle gehalten")

# create a dataframe using texts and lables
trainDF = pandas.DataFrame()
trainDF['text'] = texts

# create a count vectorizer object
count_vect = CountVectorizer(analyzer='word', token_pattern=r'\w{1,}')
count_vect.fit(trainDF['text'])

# transform the training and validation data using count vectorizer object
test_data = count_vect.transform(trainDF['text'])

# load the model
pkl_filename = "C:/Users/baran/PycharmProjects/test/resources/pickle_model.pkl"
with open(pkl_filename, 'rb') as file:
    pickle_model = pickle.load(file)

#reuse the model
test_load = joblib.load("C:/Users/baran/PycharmProjects/test/model.pkl")
print(test_load.predict(test_data))
...

Затем я получаю эту ошибку:

...
ValueError: X has 7 features per sample; expecting 18282

Я ожидал, что это даст мне "3" какрезультат, который является кодировкой для конкретной метки.Эти прогнозы работают в том же файле, где я также обучаю модель, но почему-то я не могу использовать новые данные проверки.

Мне кажется, я допустил некоторую ошибку при подборе и преобразовании данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...