Проблема с размером набора данных Train и Test в MultinomialNB - PullRequest
0 голосов
/ 14 января 2019

Во-первых, я бы сказал, что я работаю над набором данных с текстовыми функциями, поэтому я попытался применить к нему пакет слов и tf-idf. на первом этапе я применил CountVectorizer и TfidfTransformer к функциям и обучил MultinomialNb данными поезда; однако, когда я преобразовал данные теста, я столкнулся с этой ошибкой:

ValueError: вход имеет n_features = 11805, в то время как модель обучена с n_features = 48064

для более подробной информации мой код как ниже:

import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer, TfidfTransformer, CountVectorizer
from sklearn.naive_bayes import MultinomialNB

df = pd.read_csv('DK-BM-products.csv')
df.head()
col = ['url_id', 'bm_title', 'bm_brand', 'bm_cat1', 'bm_cat2', 'bm_cat3','bm_warranty', 'DK_Entitle', 'DK_Fatitle', 'DK_titlealt', 'DK_titleKey','DK_catFa', 'Dk_catEn', 'DK_maincatFa', 'DK_maincatEn', 'DK_brandEn', 'DK_brandFa']
df = df[col]
df.dropna(inplace=True)

# Train Test Splitting
msk = np.random.rand(len(df)) < 0.8
train = df[msk]
test = df[~msk]

y_train = train['DK_maincatEn']
x_train = train.drop(['DK_maincatEn', 'url_id'], axis=1)
y_test = test['DK_maincatEn']
x_test = test.drop(['DK_maincatEn', 'url_id'], axis=1)

# Feature Engineering
count_vect = CountVectorizer(encoding='utf-8', stop_words='english', strip_accents='unicode', lowercase=True, analyzer='word')
x_train_counts = count_vect.fit_transform(x_train)
tfidf_transformer = TfidfTransformer(use_idf=True)
features_train = tfidf_transformer.fit_transform(x_train_counts)

#Train CLF
clf = MultinomialNB().fit(features_train, y_train)
accu_train = np.mean(clf.predict(features_train) == y_train)

#Test        
x_test_counts = count_vect.transform(x_test)
features_test = tfidf_transformer.transform(x_test_counts)
predicted = clf.predict(features_test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...