如何在相当平衡的二进制分类中固定很高的假阴性率?

问题描述 投票:1回答:1

我有一个项目,要求根据大约52个要素和2000行数据对员工是否离开公司进行二进制分类。数据在1200 neg至800 pos之间有些平衡。我已经进行了广泛的EDA和数据清理。我选择尝试从sklearn,对数回归,SVM和随机森林等几种不同的模型。我从所有的人中都得到了非常可怜的相似的结果。我只使用了52个功能中的15个,但结果几乎与使用所有52个功能时的结果相同。在52个功能部件中,有6个属于类别,我将其转换为虚拟变量(每个功能部件介于3-6个类别之间),有3个是日期时间,将其转换为days-since-epoch。没有要填充的空值。

这是我最近在随机森林中运行的代码和混淆矩阵。

x_train, x_test, y_train, y_test = train_test_split(small_features, endreason, test_size=0.2, random_state=0)


RF = RandomForestClassifier(bootstrap = True,
                            max_features = 'sqrt',
                            random_state=0)
RF.fit(x_train, y_train)
RF.predict(x_test)


cm = confusion_matrix(y_test, rf_predictions)
plot_confusion_matrix(cm, classes = ['Negative', 'Positive'],
                      title = 'Confusion Matrix')

enter image description here

我可以采取哪些步骤来帮助更好地适应此模型?

python machine-learning classification data-science random-forest
1个回答
0
投票

对于您提出的方法和所描述数据的平衡,您所显示的结果肯定显得有些令人沮丧。但是,从问题的描述来看,肯定有很多改进的余地。

[使用train_test_split时,请确保通过stratify=endreason,以确保分割数据集时标签没有问题。继续介绍有用的点以改进您的模型:

首先,降维:由于您要处理许多功能,因此其中一些功能可能无用,甚至会污染您要解决的分类问题。考虑将不同的dimension reduction技术拟合到您的数据并使用此拟合的数据来馈送模型非常重要。一些常见的方法可能值得尝试:

  • PCA(主成分分析)
  • 低方差和相关性过滤器
  • 随机森林功能的重要性

其次了解模型:虽然逻辑回归可能被证明是线性分类器的出色基线,但不一定是您完成此任务所需要的。在捕获非线性关系时,Random Forests似乎要好得多,但需要控制和修剪它以免overfitting,并且可能需要大量数据。另一方面,SVM是使用非线性内核的非常强大的方法,但是在处理大量数据时可能效率低下。 XGBoostLightGBM是非常强大的渐变增强算法,已经赢得了多次kaggle竞赛,并且在几乎每种情况下都可以很好地工作,当然,需要进行一些预处理,因为XGBoost不准备用于使用分类功能(LightGBM是)。我的建议是尝试这最后两种方法。从最差到最后(在一般情况下),我将列出:

  • LightGBM / XGBoost
  • RandomForest / SVM / Logistic回归

最后但并非最不重要的超参数调整:无论选择哪种方法,总会需要进行一些微调。 Sklearn提供了非常方便的gridsearch。但是,您需要了解分类器的行为方式,才能知道您要寻找的内容。我不会对此进行深入探讨,因为它会偏离主题并且不适合SO,但是您绝对可以阅读here

© www.soinside.com 2019 - 2024. All rights reserved.