如何修复二元分类中非常高的假阴性率?

我有一个项目,需要根据大约52个特征和2000行的数据来预测员工是否会离职。数据相对平衡,负样本1200个,正样本800个。我已经进行了广泛的探索性数据分析和数据清洗。我尝试了sklearn中的几种不同模型,包括逻辑回归、SVM和随机森林。所有模型的效果都很差,而且结果相似。这次运行我只使用了52个特征中的15个,但结果与使用所有52个特征时几乎相同。在52个特征中,有6个是分类特征,我将其转换为虚拟变量(每个特征有3到6个类别),另外3个是日期时间特征,我将其转换为自纪元以来的天数。数据中没有空值需要填充。

这是我最近一次使用随机森林运行的代码和混淆矩阵。

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

我可以采取哪些步骤来更好地拟合这个模型?


回答:

您展示的结果对于您提出的方法和您描述的数据平衡来说确实有些令人沮丧。然而,从问题的描述来看,显然还有很多改进的空间。

在使用train_test_split时,请确保传递stratify=endreason参数,以确保在拆分数据集时不会出现标签相关的问题。接下来是一些有助于改进模型的建议:

首先,降维:由于您处理的特征很多,其中一些可能无用甚至会污染您试图解决的分类问题。考虑将不同的降维技术应用到数据上,并使用这些处理后的数据来训练模型非常重要。一些值得尝试的常见方法包括:

  • 主成分分析(PCA)
  • 低方差与相关性过滤
  • 随机森林特征重要性

其次,理解模型:虽然逻辑回归可能是一个优秀的线性分类器基线,但它不一定适合这个任务。随机森林在捕捉非线性关系方面似乎表现更好,但需要控制和修剪以避免过拟合,并且可能需要大量数据。另一方面,SVM是一种非常强大的方法,具有非线性核,但处理大量数据时可能效率低下。XGBoostLightGBM是非常强大的梯度提升算法,在几乎所有情况下都表现出色,当然需要一些预处理,因为XGBoost不适合处理分类特征(LightGBM可以)。我的建议是尝试这两种方法。按一般情况从差到优,我会列出:

  • LightGBM / XGBoost
  • RandomForest / SVM / 逻辑回归

最后但同样重要的是超参数调优:无论选择哪种方法,总会有一些微调需要进行。Sklearn提供了网格搜索,这非常方便。但是,您需要了解您的分类器的行为,以便知道您应该寻找什么。我不会深入讨论这一点,因为这不适合SO,但您可以在这里阅读更多信息

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注