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

使用sklearn PolynomialFeatures报错:特征数量不匹配问题求助

问题分析与解决

错误原因

你遇到的报错核心是特征数量不匹配:

  • PolynomialFeatures是基于X_train训练的,而X_train是df.drop(["Faltas"],axis=1)拆分后的子集,特征数为9(原数据集去掉Faltas列后的特征数)。
  • 但你调用poly.transform(df)时,传入的df包含了Faltas列,总特征数是10,和模型训练时的9个特征不匹配,因此触发ValueError。

解决步骤

  • 第一步:提前分离特征集与目标变量,避免后续混淆
    先把原数据拆分为纯特征集X和目标变量Y,后续所有预处理操作都基于X:
    X = df.drop(["Faltas"], axis=1)
    Y = df["Faltas"]
    
  • 第二步:修正transform的输入数据
    训练好的poly只能接收和X_train特征数一致的数据,根据需求选择输入:
    • 生成训练集的交互特征:用X_train作为transform的输入
    • 生成整个特征集的交互特征:用X作为transform的输入
    • 生成测试集的交互特征:用X_test作为transform的输入

完整修正代码

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
import pandas as pd

# 提前分离特征与目标变量
X = df.drop(["Faltas"], axis=1)
Y = df["Faltas"]

# 拆分训练集和测试集
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, train_size=0.8)

# 拟合多项式特征生成器
poly = PolynomialFeatures(interaction_only=True, include_bias=False).fit(X_train)

# 生成训练集的交互特征DataFrame
X_train_I = pd.DataFrame(poly.transform(X_train), columns=poly.get_feature_names(X_train.columns))
print(X_train_I.head(5))

# 如果需要生成测试集的交互特征,用下面的代码
# X_test_I = pd.DataFrame(poly.transform(X_test), columns=poly.get_feature_names(X_train.columns))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:20:30