在机器学习中合并稀疏和密集数据以提高性能

数据挖掘 机器学习 分类 预测建模 scikit-学习 监督学习
2021-10-04 00:35:29

我有预测的稀疏特征,也有一些预测的密集特征。我需要将这些功能结合在一起,以提高分类器的整体性能。

现在,问题是当我尝试将这些组合在一起时,密集特征往往比稀疏特征更占优势,因此与只有密集特征的模型相比,AUC 仅提高了 1%。

有人遇到过类似的问题吗?真的很感激投入,有点卡住了。我已经尝试了很多不同的分类器、分类器的组合、特征转换和不同算法的处理。

在此先感谢您的帮助。

编辑

我已经尝试了评论中给出的建议。我观察到的是,对于几乎 45% 的数据,稀疏特征表现得非常好,我得到的 AUC 约为 0.9,只有稀疏特征,但对于其余的密集特征表现良好,AUC 约为 0.75。我尝试分离出这些数据集,但我得到了 0.6 的 AUC,所以,我不能简单地训练一个模型并决定使用哪些特征。

关于代码片段,我尝试了很多东西,我不确定到底要分享什么:(

4个回答

这似乎是主成分分析的工作。在 Scikit 中,PCA实现得很好,它帮助了我很多次。

PCA 以某种方式结合了您的功能。通过限制组件的数量,您可以使用无噪声数据获取模型(在最佳情况下)。因为你的模型和你的数据一样好。

考虑下面一个简单的例子。

from sklearn.pipeline import Pipeline
pipe_rf = Pipeline([('pca', PCA(n_components=80)),
                    ('clf',RandomForestClassifier(n_estimators=100))])
pipe_rf.fit(X_train_s,y_train_s)

pred = pipe_rf.predict(X_test)

为什么选80?当我绘制累积方差时,我在下面得到了这个,它告诉我,大约 80 个分量,我几乎达到了所有的方差。 累积方差

所以我想说试一试,在你的模型中使用它。它应该有帮助。

组合特征的最佳方法是通过集成方法。基本上有三种不同的方法:bagging、boosting 和 stacking。您可以使用通过特征选择增强的 Adabbost(在此考虑稀疏和密集特征)或基于堆叠(随机特征 - 随机子空间)我更喜欢第二个选项,您可以通过使用随机子集和随机特征(保持训练基础学习器,直到覆盖整个特征集)下一步是测试训练集以生成元数据。使用此元数据来训练元分类器。元分类器会找出哪个特征更重要以及应该使用什么样的关系

变量组可能是多重共线的,或者稀疏和密集之间的转换可能会出错。您是否考虑过使用投票分类器/集成分类?http://scikit-learn.org/stable/modules/ensemble.html 这样你就可以处理上述两个问题。

除了上面的一些建议,我建议使用两步建模方法。

  1. 首先使用稀疏特征并开发最佳模型。
  2. 计算该模型的预测概率。
  3. 将该概率估计输入第二个模型(作为输入特征),该模型将包含密集特征。换句话说,使用所有密集特征概率估计来构建第二个模型。
  4. 最终的分类将基于第二个模型。