为什么 ML 算法在相关特征上的表现比在不相关特征上的表现更好?

数据挖掘 机器学习 特征选择 数据清理 预处理 相关性
2022-02-22 21:36:14

我有一个包含所有数值的数据集。由于特征并不多,因此我通过将彼此相乘来创建更多特征。正如预期的那样,这创建了一些高度相关的特征。现在,我创建了一个管道,如下所示:

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,这比以前更差,但可以理解。我期待结果会变得更好,因为多重共线性会导致系数波动。我的理解错了吗?

1个回答

几点不在这里:

  1. 与随机森林相比,多重共线性对线性模型的影响更大,因为它为每个模型拾取不同的特征集(带替换的读取采样),并且每个模型/树都看到不同的数据点。特征重要性可能会受到多重共线性的影响

  2. 多重共线性不会对模型性能产生负面影响,但会影响特征重要性的解释

  3. 当我们添加多项式特征时,我们会增加模型复杂度,模型开始表现更好,但要小心过度拟合

因此,当您引入多项式特征时,它非常好,并且预计模型性能会提高,但在解释特征重要性时要非常小心过度拟合