我已经训练了一个主题分类模型。然后,当我要将新数据转换为用于预测的向量时,它就会出错。它显示“NotFittedError:CountVectorizer - 词汇表未安装”。但是当我通过将训练数据分成训练模型中的测试数据来进行预测时,它可以工作。以下是代码:
#!/bin/bash
echo "Choose a simulation: "
read sim
echo "Starting Heat Capacity Calculations"
gens=(save/$sim/isings/*)
#find all generations in simulations folder, put into array
for ((i=0; i<${#gens[@]}; i++));
do
#find the generation number from file string
gens[i]=$(echo ${gens[$i]} | cut -d "[" -f2 | cut -d "]" -f1)
done
parallel --bar --eta -j14 'python3 compute-heat-capacity-generational-2 $sim {1} {2}' ::: \
$(seq 16) ::: \
${gens[@]}
这是一个错误
from sklearn.externals import joblib
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import numpy as np
# read new dataset
testdf = pd.read_csv('C://Users/KW198/Documents/topic_model/training_data/testdata.csv', encoding='cp950')
testdf.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1800 entries, 0 to 1799
Data columns (total 2 columns):
keywords 1800 non-null object
topics 1800 non-null int64
dtypes: int64(1), object(1)
memory usage: 28.2+ KB
# read columns
kw = testdf['keywords']
label = testdf['topics']
# 將預測資料轉為向量
vectorizer = CountVectorizer(min_df=1, stop_words='english')
x_testkw_vec = vectorizer.transform(kw)
答案 0 :(得分:2)
在调用vectorizer.fit()
之前,您需要为计数向量器调用vectorizer.transform()
来构建单词字典。您也可以调用两者结合的vectorizer.fit_transform()
。
但你不应该使用新的矢量化器进行测试或任何类型的推理。您需要使用与训练模型时使用的相同的结果,或者您的结果将是随机的,因为词汇表不同(缺少某些单词,没有相同的对齐等)。
为此,你可以pickle训练中使用的矢量化器,并在推理/测试时加载它。