二进制分类:预处理数据的最佳方法

数据挖掘 机器学习 Python 分类 预处理
2022-02-22 18:14:15

关于数据集我有一个训练数据集

  • 129 列(最后一列是类,即 y 值)
  • 6068 行

我必须训练一些算法来进行二进制分类。数据集有

  • A型的701个例子
  • B型5367个例子

测试集由 1398 个示例组成。这是我对各种算法的准确度。

  • 投票合奏-> 0.73963
  • 随机梯度提升 -> 0.77682
  • Adaboost -> 0.75107
  • bagging 分类器(决策树)-> 0.76538
  • 随机森林 -> 0.75250
  • 额外的树 -> 0.75393

以上所有结果均来自 kaggle,因此它们可能仅来自测试集的一半。以上方法是在python中使用scikit-learn库实现的

有人可以建议提高准确性的方法,可能是通过降维或更好的算法。另外,请尽可能提供示例代码。

2个回答

更清楚地了解您要解决的问题类型将非常有用。

  • 无论如何,我建议的第一件事是请检查您的功能并尝试了解与响应的关系。所有基于树的方法都非常容易过度拟合,因此它们不能很好地泛化。如果您得出的结论是某些变量显示出线性关系,而另一些显示出非线性关系,那么您最好使用线性方法,例如 LogisticRegression 或 LinearDiscriminantClassifier(如果您的特征表明它们是从正态分布中采样的) . 显然,如果您确定某些特征高度相关并且不提供预测值,则可以使用 PCA 或正则化方法。

  • 其次,如果您已经完成了上述所有操作,那么您可能已经完成了特征选择步骤。下一个方法是特征创建。查看某些变量是否本质上是非线性的。然后尝试添加更高次的多项式项。尝试诊断特征之间的交互效果,尝试为这些交互包含特征。如果有任何您认为对问题多余的功能。再想想。看看您是否可以从中提取任何信息。

请在此处标记问题的链接。

这个问题有两个步骤:特征选择/降维和选择预测模型。选择模型中使用的“最佳”特征通常会提高准确性,并且您可以使用很多方法。

  • 在处理连续数据时,可以使用LassoElasticNet等正则化方法为模型选择最佳特征。这些都在 sklearn 中可用,但它们确实需要一些参数调整才能找到正确的超参数以获得最佳结果。
  • 您还可以查看sklearn.feature_selection这些是选择特征的更多统计方法,通常基于它们的 p 值。这也仅适用于连续数据。
  • 另一种方法是从决策树模型(例如 RandomForest)计算基尼重要性。当您拥有连续和分类数据时,这很有用。 是一个例子。

选择最佳特征后,您需要选择正确的二元分类模型。在这种情况下,首选模型是逻辑回归。sklearn.linear_model.LogisticRegression 中有多个超参数,为了获得最佳结果,您可能必须执行一些网格搜索才能找到正确的参数。

以下是一些可能有用的额外资源:

我添加了最后一个链接,讨论了偏差与方差的权衡,因为我认为在测试模型时理解这一点很重要。