PassiveAgressive Classifier 用に Tfidf-Vectorizer をトレーニングしてテストしたところ、すべて正常に動作しました。次に、後で使用するために、適合したベクトライザーとトレーニング済みの分類器を保存しました。ベクトライザーを再度ロードしたとき、その上で新しいデータセットを変換し (見えないデータを分類子で分類したいので)、新しいデータセットを予測しようとしました。コードを実行すると、次のようになります。
ValueError: X has 1375913 features per sample; expecting 1373084
これは、ベクトライザーと分類子を取得するために使用したコードです。
X_train, X_test, y_train, y_test = train_test_split(df['Processed_text'], y, test_size=0.2)
tfidf_vectorizer = TfidfVectorizer()
tfidf_train = tfidf_vectorizer.fit_transform(X_train)
with open('vectorizer.pkl', 'wb') as fin:
pickle.dump(tfidf_vectorizer, fin)
tfidf_test = tfidf_vectorizer.transform(X_test)
linear_clf = PassiveAggressiveClassifier(n_iter=50)
linear_clf.fit(tfidf_train, y_train)
pred = linear_clf.predict(tfidf_test)
with open('topic_classifier.pkl', 'wb') as fid:
pickle.dump(linear_clf, fid)
そして、これは私がそれを再び開いて使用する方法です:
classifier = pickle.load(open('topic_classifier.pkl', 'rb'))
vectorizer = pickle.load(open('vectorizer.pkl', 'rb'))
tfidf_vectorizer = vectorizer
tfidf_articles = tfidf_vectorizer.transform(texts)
topics = classifier.predict(tfidf_articles)
また、分類子をトレーニングしたファイルを再度チェックし、語彙の長さを調べて、
len(tfidf_vectorizer.vocabulary_)
1371569
さらに別の数字...ここで何がうまくいかないのか、私には本当にわかりません。トレーニング/テスト データセットのテキストと、すべてを再度読み込んだ後に分類する必要があるテキストをまったく同じ方法で処理したので、これはベクトライザーに与える入力とは関係ないと思います。アプリで両方を使用しているため、ベクトライザーを再度適合させたり、分類子を再度トレーニングしたりすることはできません。そのため、保存されたバージョンで何らかの形で機能する必要があります。