对新的线性 SVM 数据帧进行分类时出错

Error when classifying new Linear SVM dataframe

我使用线性 SVM 创建了一个多 class class 化模型。但是我无法 class 验证新加载的数据框(我的基础必须 class 验证)我有以下错误。

我应该怎么做才能将我的新文本 (df.reason_text) 转换为 TFID 并使用我的模型 classify(调用 model.prediction(?))?

训练模型

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(ngram_range=(1,2), stop_words=stopwords) 
features = tfidf.fit_transform(training.Description).toarray()
labels = training.category_id

model = LinearSVC()
X_train, X_test, y_train, y_test, indices_train, indices_test = train_test_split(features, labels, training.index, test_size=0.33, random_state=0)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

现在我无法将我的新数据框转换为 classify

按分类加载新 DataFrame

from pyathena import connect
import pandas as pd
conn = connect(s3_staging_dir='s3://athenaxxxxxxxx/result/', 
                   region_name='us-east-2')
df = pd.read_sql("select * from data.classification_text_reason", conn)

features2 = tfidf.fit_transform(df.reason_text).toarray()
features2.shape

在我使用 TFID 转换新数据框文本并对其进行排序后,我收到以下消息

y_pred1 = model.predict(features2)

错误

ValueError: X has 1272 features per sample; expecting 5319

'

当您加载新的 DF 进行分类时,您将再次调用 fit_tranform(),但您应该只调用 transform()。

fit_transform() description: Learn vocabulary and idf, return term-document matrix.

变换() description: Transform documents to document-term matrix.

您需要使用训练算法时创建的转换器,因此代码为:

tfidf.transform(df.reason_text).toarray()

如果仍然存在特征形状错误,则阵列的形状可能有问题。解决transform部分,如果还是报错,post一个train的例子和数组格式的测试数据,我会继续帮助。