sklearn模型数据转换错误:CountVectorizer - 未安装词汇表

时间:2018-03-29 03:48:28

标签: python machine-learning scikit-learn text-classification countvectorizer

我已经训练了一个主题分类模型。然后,当我要将新数据转换为用于预测的向量时,它就会出错。它显示“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)

1 个答案:

答案 0 :(得分:2)

在调用vectorizer.fit()之前,您需要为计数向量器调用vectorizer.transform()来构建单词字典。您也可以调用两者结合的vectorizer.fit_transform()

但你不应该使用新的矢量化器进行测试或任何类型的推理。您需要使用与训练模型时使用的相同的结果,或者您的结果将是随机的,因为词汇表不同(缺少某些单词,没有相同的对齐等)。

为此,你可以pickle训练中使用的矢量化器,并在推理/测试时加载它。