我有一个包含所有数值的数据集。由于特征并不多,因此我通过将彼此相乘来创建更多特征。正如预期的那样,这创建了一些高度相关的特征。现在,我创建了一个管道,如下所示:
features_preprocessor= ColumnTransformer(transformers=[('numeric', num_transformer, [ 'f1','f2', 'f3', 'f4', 'f5', 'f6', 'f7',...., 'f26'])], remainder='passthrough')
pipe= Pipeline(steps=[
('preprocessor', features_preprocessor),
('regg', RandomForestRegressor())
])
xtr,xte,ytr,yte= train_test_split(x,y,test_size= 0.3)
pipe.fit(xtr,ytr)
ypred= pipe.predict(xte)
print("MAE",mean_absolute_error(yte,ypred))
考虑到我的目标变量范围为 60000 - 110000,这给出了 365 的 MAE,这非常好。请注意,我没有转换目标变量,因此在比较 MAE 值时比例保持不变。
但后来我删除了相关的特征,如下所示:
corr_features=set()
for i in range(len(highcorr.columns)):
for j in range(i):
if abs(highcorr.iloc[i,j])>0.8:
colname= highcorr.columns[i]
corr_features.add(colname)
cleandata=data.drop(corr_features, axis=1)
现在,当我训练相同的管道时,我得到了 1023 的 MAE。我还尝试先将数据拆分为训练和测试,然后仅使用训练数据找到相关特征。然后从训练和测试数据中删除这些特征。这给出了 1072 的 MAE,这比以前更差,但可以理解。我期待结果会变得更好,因为多重共线性会导致系数波动。我的理解错了吗?