使用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
相关产品推荐
相关产品推荐

