查询数据维度必须匹配训练数据维度
Query data dimension must match training data dimension
我正在开发推文分类器。我用一个 tfidf 数据集训练了一个 knn 分类器,其中每行的长度为 3.173,在训练模型后将其加载到一个文件中,以便我可以对新推文进行分类。
问题是,每次我提取新推文并尝试对其进行分类时,tfidf 长度会根据新提取的推文的词汇表而变化,因此模型无法对这些新推文进行分类。
我已经搜索并尝试解决这个问题两天了,但没有找到有效的解决方案。如何有效地使查询数据的维度适应训练数据的维度???
这是我的代码:
#CLASIFICA TWEETS TASS TEST
clf = joblib.load('files/model_knn_pos.sav')
#Carga los tweets
dfNew = pd.read_csv(f'files/tweetsTASStestCaract.csv', encoding='UTF-8',sep='|')
#Preprocesa
prepro = Preprocesado()
dfNew['clean_text'] = prepro.procesa(dfNew['tweet'])
#Tercer excluso
dfNew['type'].replace(['NEU','N','NONE'], 'NoPos', inplace=True)
#Funcion auxiliar para crear los vectores
def tokenize(s):
return s.split()
#Creo un vector por cada tweet, tendré en cuenta las palabras q aparezcan al menos 3 veces
vect = TfidfVectorizer(tokenizer=tokenize, ngram_range=(1, 2), max_df=0.75, min_df=3, sublinear_tf=True)
muestra = vect.fit_transform(dfNew['clean_text']).toarray().tolist()
#Caracterizo los tweets a clasificar
for i in range(len(muestra)):
caract=dfNew.drop(columns=['tweet','clean_text','type']).values[i]
muestra[i].extend(caract)
#Clasifica pos
y_train=dfNew['type'].values
resultsPos = clf.predict(muestra)
print(Counter(resultsPos))
这是我得到的错误:
File "sklearn/neighbors/binary_tree.pxi", line 1294, in
sklearn.neighbors.kd_tree.BinaryTree.query
ValueError: query data dimension must match training data dimension
解决方法很简单:
您需要使用 vect.fit_transform()
训练数据。但是,当使用测试数据时,你只需要使用 vect.transform()
.
我正在开发推文分类器。我用一个 tfidf 数据集训练了一个 knn 分类器,其中每行的长度为 3.173,在训练模型后将其加载到一个文件中,以便我可以对新推文进行分类。
问题是,每次我提取新推文并尝试对其进行分类时,tfidf 长度会根据新提取的推文的词汇表而变化,因此模型无法对这些新推文进行分类。
我已经搜索并尝试解决这个问题两天了,但没有找到有效的解决方案。如何有效地使查询数据的维度适应训练数据的维度???
这是我的代码:
#CLASIFICA TWEETS TASS TEST
clf = joblib.load('files/model_knn_pos.sav')
#Carga los tweets
dfNew = pd.read_csv(f'files/tweetsTASStestCaract.csv', encoding='UTF-8',sep='|')
#Preprocesa
prepro = Preprocesado()
dfNew['clean_text'] = prepro.procesa(dfNew['tweet'])
#Tercer excluso
dfNew['type'].replace(['NEU','N','NONE'], 'NoPos', inplace=True)
#Funcion auxiliar para crear los vectores
def tokenize(s):
return s.split()
#Creo un vector por cada tweet, tendré en cuenta las palabras q aparezcan al menos 3 veces
vect = TfidfVectorizer(tokenizer=tokenize, ngram_range=(1, 2), max_df=0.75, min_df=3, sublinear_tf=True)
muestra = vect.fit_transform(dfNew['clean_text']).toarray().tolist()
#Caracterizo los tweets a clasificar
for i in range(len(muestra)):
caract=dfNew.drop(columns=['tweet','clean_text','type']).values[i]
muestra[i].extend(caract)
#Clasifica pos
y_train=dfNew['type'].values
resultsPos = clf.predict(muestra)
print(Counter(resultsPos))
这是我得到的错误:
File "sklearn/neighbors/binary_tree.pxi", line 1294, in sklearn.neighbors.kd_tree.BinaryTree.query
ValueError: query data dimension must match training data dimension
解决方法很简单:
您需要使用 vect.fit_transform()
训练数据。但是,当使用测试数据时,你只需要使用 vect.transform()
.