如何解决“AttributeError: 'numpy.bool_' object has no attribute 'predict'”错误
问题原因与解决方法
问题根源
你保存的不是分类器模型本身,而是单次预测得到的布尔值结果(pred是post_pos>post_neg生成的numpy.bool_对象),这个对象根本没有predict方法,所以调用时会报错。
正确解决步骤
要实现对新数据的预测,你需要保存生成预测结果的核心模型组件,而不是单次结果,然后加载后重新执行预测逻辑:
保存模型核心参数
把计算预测需要的multivariate_normal_pos、multivariate_normal_neg、prior_pos、prior_neg打包保存:import pickle # 将模型核心组件打包为字典 model_core = { "mv_pos": multivariate_normal_pos, "mv_neg": multivariate_normal_neg, "prior_pos": prior_pos, "prior_neg": prior_neg } # 保存模型组件 pickle.dump(model_core, open('movie_classifier.pkl', 'wb'))加载模型并实现预测逻辑
加载保存的组件后,重新编写预测函数来计算新数据的布尔结果:import pickle # 加载模型组件 loaded_model = pickle.load(open('movie_classifier.pkl', 'rb')) # 定义预测函数 def predict(data): likelihood_pos = loaded_model["mv_pos"].pdf(data) likelihood_neg = loaded_model["mv_neg"].pdf(data) post_pos = likelihood_pos * loaded_model["prior_pos"] / (likelihood_pos * loaded_model["prior_pos"] + likelihood_neg * loaded_model["prior_neg"]) post_neg = likelihood_neg * loaded_model["prior_neg"] / (likelihood_neg * loaded_model["prior_neg"] + likelihood_pos * loaded_model["prior_pos"]) return post_pos > post_neg # 测试用户数据 test_data = [1, 20] result = predict(test_data) print(result) # 输出布尔值True/False批量预测(可选)
如果需要处理多组数据,直接遍历调用预测函数即可:test_datasets = [[1,20], [3,50], [5,10]] results = [predict(data) for data in test_datasets] print(results) # 输出布尔值列表
内容的提问来源于stack exchange,提问作者Zerone
相关产品推荐
相关产品推荐

