Logistic回归模型ValueError排查及预测准确率评估咨询
问题分析与解决方案
错误原因
你遇到的ValueError核心原因是调用了错误的对象执行预测:
你已经通过result = full_logit_model.fit()得到了拟合后的模型结果对象,但却调用了未拟合的full_logit_model(原始GLM模型实例)的predict()方法。在statsmodels中,未拟合的GLM模型的predict()方法需要显式传入拟合好的参数(params),而你直接传入了特征矩阵activity_data[explanatory_cols],导致方法误将这个特征矩阵当作参数矩阵计算线性预测值——参数应该是(12,)的一维数组(对应12个特征的系数),但你传入的是(5420,12)的二维矩阵,两者点乘自然出现维度不匹配的错误。
正确评估模型准确率的步骤
要正确评估模型,你需要使用拟合后的result对象执行预测,再将预测概率转换为类别标签,最后和真实标签对比计算准确率。具体代码如下:
1. 生成预测结果
# 使用拟合后的result对象生成预测概率值(可传入训练数据或新数据) pred_probs = result.predict(activity_data[explanatory_cols]) # 将概率值转换为二元类别(以0.5为阈值,可根据业务需求调整) pred_classes = (pred_probs > 0.5).astype(int)
2. 计算准确率
你可以用工具函数或手动计算:
方法一:使用sklearn工具
from sklearn.metrics import accuracy_score accuracy = accuracy_score(activity_data['active'], pred_classes) print(f"训练集上的模型准确率: {accuracy:.4f}")
方法二:手动统计计算
# 统计预测正确的样本数量 correct_count = (pred_classes == activity_data['active']).sum() # 计算准确率 accuracy = correct_count / len(activity_data['active']) print(f"训练集上的模型准确率: {accuracy:.4f}")
额外说明
- 若要对新数据预测,只需确保新数据的特征列与训练时的
explanatory_cols完全一致(包括虚拟变量的前缀、列名),再调用result.predict(new_data[explanatory_cols])即可。 - 除准确率外,你还可以通过
result.summary()查看模型的统计指标(如系数显著性、AIC值等),更全面地评估模型性能。
内容的提问来源于stack exchange,提问作者arr
相关产品推荐
相关产品推荐

