Python sklearn MultinomialNB:使用 DictVectorizer 的维度不匹配
Python sklearn MultinomialNB: Dimension mismatch using DictVectorizer
我正在尝试 MultinomialNB
。我得到了Value Error: dimension mismatch
。
我使用 DictVectorizer
作为训练数据,LabelEncoder
作为 class。
这是我的代码:
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)
我的代码哪一部分是错误的?谢谢。
改变
testX = vector.fit_transform(Xz)
至:
testX = vector.transform(Xz)
当您执行 fit()
或 fit_transform()
时,您实际上是在用新数据训练向量化器,这不是您想要的。您只想以与训练集相同的方式转换测试集,因此只需调用 transform()
我正在尝试 MultinomialNB
。我得到了Value Error: dimension mismatch
。
我使用 DictVectorizer
作为训练数据,LabelEncoder
作为 class。
这是我的代码:
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)
我的代码哪一部分是错误的?谢谢。
改变
testX = vector.fit_transform(Xz)
至:
testX = vector.transform(Xz)
当您执行 fit()
或 fit_transform()
时,您实际上是在用新数据训练向量化器,这不是您想要的。您只想以与训练集相同的方式转换测试集,因此只需调用 transform()