对未腌制分类器进行预测时出错

时间:2018-07-17 15:38:25

标签: python-3.x scikit-learn pickle

我正在制作一个文本分类程序,输入了数千封电子邮件,因此为了方便起见,我决定在训练完成后将分类器保存在一个腌制的文件中,以便在进一步执行该程序之后,重新训练。

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>

1 个答案:

答案 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)