You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决“AttributeError: 'numpy.bool_' object has no attribute 'predict'”错误

问题原因与解决方法

问题根源

你保存的不是分类器模型本身,而是单次预测得到的布尔值结果(pred是post_pos>post_neg生成的numpy.bool_对象),这个对象根本没有predict方法,所以调用时会报错。

正确解决步骤

要实现对新数据的预测,你需要保存生成预测结果的核心模型组件,而不是单次结果,然后加载后重新执行预测逻辑:

  1. 保存模型核心参数
    把计算预测需要的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'))
    
  2. 加载模型并实现预测逻辑
    加载保存的组件后,重新编写预测函数来计算新数据的布尔结果:

    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
    
  3. 批量预测(可选)
    如果需要处理多组数据,直接遍历调用预测函数即可:

    test_datasets = [[1,20], [3,50], [5,10]]
    results = [predict(data) for data in test_datasets]
    print(results)  # 输出布尔值列表
    

内容的提问来源于stack exchange,提问作者Zerone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:25:24