Python sklearn MultinomialNB:使用DictVectorizer的维度不匹配

时间:2018-04-24 00:23:17

标签: python-3.x scikit-learn valueerror dictvectorizer

我正在尝试MultinomialNB。我得到了Value Error: dimension mismatch

我正在使用DictVectorizer作为培训数据,LabelEncoder作为课程。

这是我的代码:

def create_token(inpt):
    return inpt.split(' ')

def tok_freq(inpt):
    tok = {}
    for i in create_token(inpt):
        if i not in tok:
            tok[i] = 1
        else:
            tok[i] += 1
    return tok

training_data = []
for i in range(len(raw_data)):
    training_data.append((get_freq_of_tokens(raw_data.iloc[i].text), raw_data.iloc[i].category))

#vectorization
X, y = list(zip(*training_data))
label = LabelEncoder()
vector = DictVectorizer(dtype=float, sparse=True)
X = vector.fit_transform(X)
y = label.fit_transform(y)
multinb = mnb()
multinb.fit(X,y)

#vectorization for testing set
Xz = tok_freq(sms)
testX = vector.fit_transform(Xz)

multinb.predict(testX)

我的代码中哪一部分错了?谢谢。

1 个答案:

答案 0 :(得分:2)

更改

testX = vector.fit_transform(Xz)

为:

testX = vector.transform(Xz)

当您执行fit()fit_transform()时,您实际上是在训练新数据上的矢量化器,而这不是您想要的。您只想以与列车集上相同的方式转换测试集,因此只能调用transform()