如何解决LogisticRegression预测时特征数量不匹配的ValueError?
解决LogisticRegression预测时特征数量不匹配的问题
问题根源
你训练LogisticRegression模型时用了105个特征,但现在用来预测的x_coor1只有18个特征,维度不匹配直接触发报错。
两种可行解决方案
方案1:重新用18个特征训练模型(推荐)
既然你的最终目标是基于这18个变量生成混淆矩阵,完全没必要用之前的105特征模型,直接用筛选后的18个特征重新训练即可,步骤如下:
from sklearn.linear_model import LogisticRegression from sklearn.metrics import confusion_matrix # 假设y是客户流失的目标变量(0/1) # 初始化并训练新模型 new_model = LogisticRegression() new_model.fit(x_coor1, y) # 生成预测结果并输出混淆矩阵 y_pred = new_model.predict(x_coor1) confusion_matrix(y, y_pred)
方案2:给x_coor1补全缺失的特征(仅当必须用原105特征模型时用)
如果一定要用之前训练好的105特征模型,可以给x_coor1补上缺失的87个特征,值填0是可行的,但要注意:如果缺失的是哑变量,填0合理;如果是连续变量,填0可能引入偏差,需谨慎。操作代码:
import pandas as pd # 第一步:拿到训练模型时用的105个特征的完整列表(比如从训练数据的列名里取) train_feature_list = ["feat_1", "feat_2", ..., "feat_105"] # 替换成实际特征名 # 把x_coor1转成DataFrame(如果当前是numpy数组的话) x_coor1_df = pd.DataFrame(x_coor1, columns=["你的18个特征名1", ..., "你的18个特征名18"]) # 补全特征,缺失的列填充0 x_full = x_coor1_df.reindex(columns=train_feature_list, fill_value=0) # 现在x_full的维度是(57052,105),可以用原模型预测 y_pred = model.predict(x_full) confusion_matrix(y, y_pred)
后续避坑建议
训练模型前,务必把用到的特征列表保存下来(比如存成变量或文本文件),后续预测、验证时直接调用这个列表,就能避免特征维度不匹配的问题。
内容的提问来源于stack exchange,提问作者SSI_Guy
相关产品推荐
相关产品推荐

