python sklearn pickled model没有相同数量的功能

hmg*_*aly 2 python scikit-learn

我使用sklearn创建了一个SVC模型并将其腌制:

clf=LinearSVC(loss='l2', dual=False, tol=1e-3)
clf.fit(X_train, y_train)
#model_file_name='classify_pages_model'

with open('our_classifier.pkl', 'wb') as fid:
    cPickle.dump(clf, fid)
Run Code Online (Sandbox Code Playgroud)

我尝试加载它并在另一个文件中使用它,

with open('our_classifier.pkl', 'rb') as fid:
    clf = cPickle.load(fid)

X_test=tfidf_vectorizer.fit_transform((get_text(f) for f in urls))

pred=clf.predict(X_test)
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

ValueError:X每个样本有664个特征; 期待47387

如何确保测试文档中的功能与模型中的功能相同?

- - 编辑

当我在相同的代码中进行训练和测试时,问题不会发生(但只有当我挑选模型并从另一个代码加载它时)

以下代码正常工作,但是当我挑选clf时,我无法执行测试部分,因为X_test中的功能数量与clf中的功能数量不同

1 - 培训

X_train=tfidf_vectorizer.fit_transform((read(f) for f in train_files_paths))
clf=LinearSVC(loss='l2', dual=False, tol=1e-3)
clf.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)

2-测试

X_test=tfidf_vectorizer.transform((get_text(f) for f in urls))
pred=clf.predict(X_test)
Run Code Online (Sandbox Code Playgroud)

Bar*_*zKP 5

你不能fit_transform再次在测试集上做.这是一种数据窥探形式,不鼓励(除了在您的示例中不起作用).所有考虑学习的东西(特征提取都是其中之一)只能在训练集上完成.

您还需要选择特征提取器,并对transform测试数据执行操作.这个答案表明,对矢量化器进行酸洗应该没有问题.