我正在制作一个文本分类程序,输入了数千封电子邮件,因此为了方便起见,我决定在训练完成后将分类器保存在一个腌制的文件中,以便在进一步执行该程序之后,重新训练。
path = 'classifier.pkl'
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
if not os.path.exists(path):
# making a classifier
clf.fit(x_train, y_train)
with open(path, 'wb') as f:
pickle.dump(clf, f)
else:
print('<classifier found!>')
input_file = open(path, 'rb')
clf = pickle.load(input_file)
input_file.close()
pred = clf.predict(x_test) # the error occurs on this line
预测在首次运行时有效(当分类器不是文件输入时)。但这在下一次执行时给了我这个错误:
ValueError:操作数不能与形状一起广播 (3516,379)(376,)
x_train和x_test的形状如下:(14062,379),(3516,379)
任何帮助将不胜感激
编辑:我已经尝试过Desertnaut建议的腌制pred = clf.predict(x_test)
并将其用于程序的其他运行中,从这些运行中获得的准确度分数似乎比最初训练分类器时低两倍。 / p>
答案 0 :(得分:0)
无法弄清楚为什么酸洗不起作用。但是,sklearn的joblib函数似乎可以正常工作。
from sklearn.externals import joblib
if not os.path.exists(path):
clf = clf.fit(x_train, y_train)
joblib.dump(clf, path)
else:
clf = joblib.load(path)