1.使用测试集时遇到问题在使用sklearn进行自然语言处理的时候,经常遇到一些报错,类似“X has 69 features, but MLPClassifier is expecting 284817 features as input.”或者“Vocabulary not fitted or provided”。在网页上检索了半天没有找到完美的教程,所以自己对照别人的代码拼拼凑凑解决了,以下是解决方法。
在分割训练集和测试集后,进行了模型拟合,在数据集上测试正常,但是到测试集上测试的时候会遇到“X has 2 features, but MLPClassifier is expecting 2817 features as input.”的问题。
导致这个问题的原因主要是训练集和测试集使用的CountVectorizer()不一样,只要更改代码使前后保持一致就能完美解决了
更改前的代码:
vect = CountVectorizer(token_pattern=u'(?u)\b[^\d\W]\w+\b',stop_words=frozenset(stopwords))
term_matrix_train = vect.fit_transform(X_train.cutted_comment)
term_matrix_test = vect.fit_transform(X_test.cutted_comment)
model = mlp.fit(term_matrix_train, y_train)
print("训练数据上的准确率为:%f" % (model.score(term_matrix_train, y_train)))
print("测试数据上的准确率为:%f" % (model.score(term_matrix_test, y_test)))
更改后的代码:
vect = CountVectorizer(token_pattern=u'(?u)\b[^\d\W]\w+\b',stop_words=frozenset(stopwords))
term_matrix_train = vect.fit_transform(X_train.cutted_comment)
term_matrix_test = vect.transform(X_test.cutted_comment)
model = mlp.fit(term_matrix_train, y_train)
print("训练数据上的准确率为:%f" % (model.score(term_matrix_train, y_train)))
print("测试数据上的准确率为:%f" % (model.score(term_matrix_test, y_test)))
只要把对测试集的训练从vect.fit_transform()改成vect.transform()就可以解决了。
2.使用模型预测新数据时遇到问题测试集的问题解决了,但是调用训练好的模型来处理新数据的时候还是会遇到问题。起先我以为是在自定义的predict()函数里使用的是vect.fit_transform()而不是vect.transform()导致的问题。
但是更改代码后“X has 2 features, but MLPClassifier is expecting 2817 features as input.”的错误消失了,反而出现了“Vocabulary not fitted or provided”的错误。
经过资料的查阅,发现是保存模型的时候,没有把CountVectorizer()类也保存下来,导致第二次调用和训练时使用的CountVectorizer()不同。
更改后的模型保存和调用代码:
joblib.dump(model, "model path")
joblib.dump(vect,"vect path")
def model_predict(text,model,vects):
text1 = [" ".join(jieba.cut(text))]
text2 = vects.transform(text1)
predict_type = model.predict(text2)[0]
print(predict_type)
return predict_type
def Use_model():
vec=joblib.load("vect path")
model_clone = joblib.load("model path")
text = input("待测试文本")
model_predict(text,model_clone,vec)
Use_model()
以上就是这个问题的解决方法,希望能帮到大家!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)