gpt4 book ai didi

python sklearn pickled模型没有相同数量的特征

转载 作者:行者123 更新时间:2023-11-28 21:57:03 25 4
gpt4 key购买 nike

我使用 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)

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

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)

它给我这个错误:

ValueError: X has 664 features per sample; expecting 47387

如何确保我的测试文档中的特征与模型中的特征相同?

----编辑

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

下面的代码工作正常,但是当我 pickle 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)

2-测试

X_test=tfidf_vectorizer.transform((get_text(f) for f in urls))
pred=clf.predict(X_test)

最佳答案

您不能再次对测试集执行 fit_transform。这是 data snooping 的一种形式并且气馁(除了在你的例子中不起作用)。所有与学习有关的事情(特征提取就是其中之一)只能在训练集上完成。

您还需要 pickle 特征提取器,并且只对测试数据进行转换This answer建议酸洗矢量化器应该没有问题。

关于python sklearn pickled模型没有相同数量的特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20433717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com