保存对象到Pickle时出现TypeError: write()参数需为str而非bytes如何解决?
问题原因
你出现这个报错的核心原因是文件打开模式错误,和你的特征、标签格式没有任何关系,你不需要修改训练数据的格式。
- 你单独写的
open('level1_classifier.pk', 'wb')是无效操作:既没有赋值给变量,也没有手动关闭,执行完就直接被回收了,不会对后续操作产生任何影响 - 后续
with open ('level1_classifier.pk') as l1clf用的是Python open函数的默认模式rt(只读文本模式),文本模式下只能写入字符串类型数据,而pickle.dump序列化Python对象时输出的是bytes字节流,两种类型不匹配就触发了类型错误。
修正后代码
import pandas as pd from sklearn.naive_bayes import GaussianNB import pickle df = {'Description':[100,200,300,400,500],'Level_1':[1,2,3,4,5]} df = pd.DataFrame(df,columns=['Description','Level_1']) x = df[['Description']] y = df['Level_1'] nb = GaussianNB() nb.fit(x,y) # 直接在with语句里指定二进制写入模式wb即可 with open('level1_classifier.pk', 'wb') as l1clf: pickle.dump(nb, l1clf)
补充说明
如果后续需要加载这个pickle模型,也要对应使用二进制读模式rb:
with open('level1_classifier.pk', 'rb') as l1clf: loaded_model = pickle.load(l1clf)
内容的提问来源于stack exchange,提问作者angeliquelinde
相关产品推荐
相关产品推荐

